打包模板 基础工作已经准备完成,我们还需要把项目打包,发布到Nuget.org 或者是公司的内部 Nuget Server,这样其他人才可以下载和安装这个模板。.../IncludeBuildOutput> content $(NoWarn);NU5128...然后,运行 dotnet pack 命令进行打包, 你可以在 /bin/nuget/ 文件夹找到 生成的 nupkg 文件 在win10的应用商店(Microsoft Store)安装 Nuget Package...最后,你可以把程序包推送到 nuget 服务器。...--name=Order,--name 指定了变量值,它会自动帮我们生成 Order 项目,这很棒!
通过上面的步骤我们已经实现了多版本输出,但是在实际的企业级业务系统开发时情况比较复杂,还需要解决以下几个问题: 1、条件编译 2、引用本地程序集 3、NuGet方式引用程序集 4、XML文档输出 5、编码与....NET Standard 指定多个目标框架时,可有条件地为每个目标框架引用程序集。...但是 .NET Standard 2.0 前面显示黄色警告符合。展开所有依赖项,.NET Framework 4.0 与 .NET Framework 4.5 都已经正确引用。 ?...静态文件如何指定复制行为等,或许会发现安装NuGet之后希望能编辑的文件仅仅只是一个链接而已,如何让它包含在项目里面呢,请参考微软官方文档 NuGet ContentFiles揭秘,带回解决方案级包的讨论...PackageReference 方式作为包管理格式,安装时不支持执行install.ps1等powershell相关脚本,init.ps1在解决方案第一次安装时可用。
启用可空引用类型 你需要先在你的项目中启用可空引用类型的支持,才能修改警告到错误: C# 8.0 如何在项目中开启可空引用类型的支持 - 吕毅 项目属性 在项目属性中设置是比较快捷直观的方法。...在项目上右键属性,打开“生成”标签。 在这里,可以看到“将警告视为错误”一栏: 无 所有 特定警告 可以看到默认选中的是“特定警告”且值是 NU1605。...NU 是 NuGet 中发生的错误或者警告的前缀,NU1605 是大家可能平时经常见到的一个编译错误“检测到包降级”。...1 NU1605;CS8600;CS8602;CS8603;CS8604;CS8618;CS8625 这些值的含义可以参考我的另一篇博客: C# 8.0 可空引用类型中的各项警告和错误 - 吕毅 记得在改之前...WarningsAsErrors 前面使用属性面板指定时,有一个奇怪的默认值。实际上我们直接修改将固化这个默认值,这不利于将来项目跟随 Sdk 或者 NuGet 包的升级。
如何指定目标框架 以应用或库中的框架为目标时,需要指定想要向应用或库提供的 API 集。 使用目标框架名字对象 (TFM) 在项目文件中指定目标框架。 ...元包 是一个 NuGet 包,NuGet 包本身不包含任何内容,只是一个依赖项列表(其他包)。 基于 NuGet 包的目标框架隐式指定一个元包,该元包引用一起构成框架的所有包。...指定单个目标框架时,使用 TargetFramework 元素。...>net5.0 指定多个目标框架时,可有条件地为每个目标框架引用程序集。...-- 有条件地获取.NET Framework 4.5 目标引用 -->
$(Authors): 包的作者;建议指定成在 nuget.org 上的用户名,这样访客可以点击包作者查看到包作者的信息;多个名字用分号分隔。...$(PackageTags): 标签,用分号分隔;指定多个标签有助于用户在 nuget.org 上搜索到你的 NuGet 包。...-- 如果 lib/**/*dll 中没有发现 dll,NuGet 打包过程中会有警告; 将这个属性设为 true 可以禁用警告;这在制作纯工具型 NuGet 包是非常有用。... 引用的项目或包中的指定部分是本项目的依赖项。默认为 all。 引用的项目或包中的指定部分不是本项目的依赖项,应该排除。... 引用的项目或包中的指定部分依然是本项目的依赖项,但是在打 NuGet 包时不作为依赖项(不会传递到下一个项目)。
Package id 是最重要的,即最终用户安装你的NuGet包时,使用的ID。这和Product是不一样的。...其次是版本号,Package version是最终会显示在nuget.org网页上的版本,也是通过NuGet CLI指定安装版本时候所用的版本。...不然最终上传nuget.org之后,会报一个警告。 ?...但是在Listed之后,还是会有一个警告,意思是服务器的索引还没建完,用户搜不到该版本的包。...如果心急,可以等到显示Listed后,通过NuGet CLI或者编辑project文件,指定具体版本号去安装。 ? 等警告消失后,你的包就完完整整的ready了!赶紧向全世界分享你的成果吧~ ?
以前版本的.NET Core工具(project.json和基于csproj的工具)在默认情况下会指定一个框架和元包 。不过,现在,元包被目标框架隐式引用,这样一来每个元包都和目标框架关联在一起。...指定一个框架会隐式实现对元包引用,同时也会添加对元包依赖项的引用。这样,元包中的所有类库都能够被IDE智能感知,也可以被打包到你的应用中。...这些框架描述一组可用于你所指定的框架的API(和一些其它特征)。当加入新的API时,这些框架的版本号也会发生相应的变化。...我们可以编写基于.NET Framework 4.6引用程序集的库,并以NuGet 包的方式在 net46 lib 文件夹中发布这些库。...上图描述了这种双向关系。API指定并定义框架。框架选择资产。资产提供具体的API实现。
2020年,微软发布了大一统的.NET 5,支持桌面、Web、移动端、IoT等等应用的开发,也有了VS For Mac和VS Code 这样比较完善的在非Windows平台开发的工具 ?...--netcoreapp3.1--> net5.0netcoreapp3.1--> net5.0 2、升级依赖的NuGet包 将项目依赖的所有NuGet包更新至最新版本 update-package ...升级完成后需要在OptionsBuilder时指定MySQL版本 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder
做库的时候,需要一定程度上保持 API 的兼容性 ---- 第一步:安装 NuGet 包 首先打开你的库项目,或者如果你希望从零开始也可以直接新建一个项目。...然后,为主要的库项目安装 NuGet 包: NuGet Gallery - Microsoft.CodeAnalysis.PublicApiAnalyzers 安装完成之后,你的项目文件(.csproj...创建纯文本文件的方法是在项目上右键 -> 添加 -> 新建项...,然后在打开的模板中选择 文本文件,使用上面指定的名称即可(要创建两个)。...将警告变成错误 在分析器的规则上面右键,可以为某项规则设置严重性。 这时,再编译即会报告编译错误。...在一个新的版本发布后,就需要将 API 归档到 PublicAPI.Shipped.txt 文件中。
所以,我们需要进行“一番配置”,使得这个项目编译成一个NuGet 工具,而不是一个依赖包。...由于我们没有 lib 文件夹,所以 NuGet 会给出警告,NoPackageAnalysis 将阻止这个警告。...DevelopmentDependency 是为了说明这是一个开发依赖,设置为 true 将阻止包作为依赖传递给下一个项目。(事实上这又是官方的一个骗局!因为新版本的 NuGet 竟然去掉了这个功能!...; } } } 这样,在使用 msbuild 或者 dotnet build 时,就会弹出一个调试器选择界面。 ?...加入差量编译支持 在本文的例子中,当你每次编译时,虽然核心的编译流程不怎么耗时,不过那个命令却是每次都执行。如果你觉得此命令的执行非常耗时,那么建议加入差量编译的支持。
如果你希望做一个 NuGet 工具包,那么这个包一定不能作为依赖传递给下一个包。典型的例子,做一个生成版本号的工具 NuGet 包,或者做一个代码分析器。...更新: 官方的 NuGet 在更新到 4.9 及以上之后,此属性再次生效。...至于如何查看自己的 NuGet 版本号,请参见:获取 Nuget 版本号 - 林德熙 我试图寻找的解决方案 为 A 项目添加去除依赖的代码 我们创建一个项目 Walterlv.PackageDemo.A...▲ 项目的结构 以下是 A 项目的 csproj 文件,包含将 Package.targets 在打包 NuGet 包时改名的部分。...令人遗憾的结果 然而使用命令行编译的时候,就不按照预期工作了;如下图这样,B 项目中出现了对 A 的依赖。 ? 命令行编译时使用这些命令效果都是一样的不管用。
PackageReference:顾名思义,此元素用于包含对为您的应用程序安装的所有NuGet包的引用。在项目文件中,我们有以下2个NuGet包。...metapackage本身是没有任何的内容的,它只是包含了其他包的依赖信息。 您可以在解决方案资源管理器中的NuGet下找到此元数据包,而NuGet又位于依赖项(Dependencies)下。...展开元数据包时,您可以找到所有依赖项。 ?...在ASP.NET Core 2.1及更高版本的默认项目模板,都是会使用这个包。 请注意,metapackage中没有版本号。 未指定版本时,SDK会指定隐式版本。....NET Core团队建议依赖SDK指定的隐式版本,而不是在包引用上显式设置版本号。 如果目前还不完全清楚,请不要担心。 我们将在即将发布的视频中详细讨论metapackage和隐式版本。
依赖管理是 NuGet 的核心功能。Nuget管理单个项目的依赖关系很容易,只需要每个项目维护自己的Nuget依赖与对应版本。...但是,管理多项目解决方案的依赖关系可能会变得很困难,因为它们的规模和复杂性开始扩大,每个项目依赖的相同的Nuget包的版本可能不同。...在您管理许多不同项目的公共依赖项的情况下,您可以利用 NuGet 的中央包管理功能从一个位置轻松完成所有这些工作。...在文件内部,您可以使用 定义包 ID 和版本。... net7.0</TargetFramework
<!...TargetFramework节点指定要定位的框架。由于我们使用的是.NET Core 3.1,因此值为netcoreapp3.1。...``` 在.NET Core 3.0开始中,使用框架引用关系来替换综合元管理包,即(Microsoft.AspNetCore.App)。...ASP.NET Core 3.x中对 Microsoft.AspNetCore.App 的调整 如果你使用过 ASP.NET Core 2.X 那么应该知道在我们的项目文件有引入一个 NuGet 包,...包来直接进行管理,我们可以在项目的依赖性中看到他们,见如图 17.12: 通过下方的属性中的路径窗口,可以看到它所在位置,如果您看不见属性窗口,可以选择Microsoft.AspNetCore.App
如果你在团队项目当中安装了 ILRepack 的 NuGet 包,那么无论团队其他人是否安装了 ILRepack 的工具,都可以使用 ILRepack 工具。...这个程序引用了一个 NuGet 包 Ben.Demystifier。为此带来了三个额外的依赖。...(注意到项目文件中我有额外引用一个其他的 NuGet 包 Ben.Demystifier,这是为了演示将依赖进行合并而添加的 NuGet 包,具体是什么都没有关系,我们只是在演示依赖的合并。)...缺少依赖 如果你在使用 ILRepack 合并程序集的过程中出现了缺少依赖的错误,例如下面这样: 1 Mono.Cecil.AssemblyResolutionException: Failed to...将所有依赖合并指的是将缺少的依赖也一起作为命令行参数传入要合并的程序集中。 而另一种是增加一个参数 /lib,即添加一个被搜索的依赖程序集的目录。将这个目录指定后,则可以正确解析依赖完成合并。
5.2.4.0"/> 若项目启动后报错:未能加载文件或程序集“XXXXXX”或它的某一个依赖项...="Microsoft.AspNet.WebApi" version="5.2.4" targetFramework="net462" /> 默认在sln文件所在目录下会生成packages...文件夹用于存放项目引用的Nuget包: [zvdx6amfla.jpg] 我们通过Nuget命令行或者Visual Studio中的图形界面来管理Nuget包,当Nuget包发生变更时,packages.config...包位于%UserProfile%\.nuget\packages 可以使用.NET Core提供的CLI中的命令来获取nuget包的位置: dotnet nuget locals all -l info...\plugins-cache 也可以使用Nuget自身命令来获取nuget包位置: nuget locals all -l info : http-cache: C:\Users\xfh\AppData
若项目启动后报错:未能加载文件或程序集“XXXXXX”或它的某一个依赖项,找到的程序集清单定义与程序集引用不匹配,则应当检查下项目所引用的dll文件与Web.config中配置的dll文件信息是否一致。...="Microsoft.AspNet.WebApi" version="5.2.4" targetFramework="net462" /> 默认在sln文件所在目录下会生成packages...文件夹用于存放项目引用的Nuget包: 我们通过Nuget命令行或者Visual Studio中的图形界面来管理Nuget包,当Nuget包发生变更时,packages.config与.csproj文件内容及...包位于%UserProfile%\.nuget\packages 可以使用.NET Core提供的CLI中的命令来获取nuget包的位置: dotnet nuget locals all -l info...\plugins-cache 也可以使用Nuget自身命令来获取nuget包位置: nuget locals all -l info : http-cache: C:\Users\xfh\AppData
新的csproj文件,顺便升级到新的SDK-style csproj文件有很多好处,包括更简洁可读的文件,新的NuGet引用方式,可以指定多个开发框架等。 更方便打包Nuget。...2. .NET 可移植性分析 在升级前,保险起见需要使用.NET 可移植性分析器分析项目在目标.NET平台上的可移植性。...要迁移到PackageReference,先尽可能升级引用的Nuget包,然后选中项目中的packages.config,在右键菜单中选中“将 packages.config 迁移到 PackageReference...在弹出的对话框会列出顶级的依赖项和传递的依赖项,还会询问是否将后者升级到顶级依赖项,这个项目无需做任何改变,直接点击“确定”: ? 迁移完成后会得到一个报告: ?...打开Kino.Toolkit.Wpf.csproj,会发现少了些东西,但多了下面这段,这段就是经过精简的Nuget引用,在“管理Nuget程序包”的页面也可以看到已安装的Nuget变少了: ? ?
不在 Target 里面的属性和项是提前计算好的,而 Target 里面的属性和项是编译时才计算的。...--> net47...搜索 @(PackageReference) 发现有很多的 Target 都依赖于一个名为 CollectPackageReferences 的 Target。...于是我可以将我们的 BeforeTargets 指定为 CollectPackageReferences。 不过我发现在这种情况下,NuGet 包管理器的界面中能够发现这个项目使用了旧版本。...并且在安装了新版本的包后,将因为多次引用不同版本而导致编译不通过。 所以,方案否决。 最终解决 既然无法阻止发现这个 NuGet 包,那思路就换成无论如何更新,都无效好了。
最近我把很多项目都使用了 VisualStudio 2017 新项目格式,在使用的时候发现一些比较好用的功能。...的,那么就需要做一些设置,在继续阅读文本,我希望大家先看项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - walterlv 添加注释 如果需要在发布的...> $(OutputPath)\$(AssemblyName).xml 防止警告生成的文件...一些生成的文件会让 VisualStudio 编译时警告,使用下面代码可以让 VisualStudio 不分析生成的文件 <Target Name="PragmaWarningDisablePrefixer...或者发布出去的包,可以通过查看 dll 的版本号就知道是哪个 <em>Nuget</em> 发布,因为 dll 的版本号和 <em>nuget</em> 的相同。
领取专属 10元无门槛券
手把手带您无忧上云