Iva*_*vov 3 c# projects-and-solutions target-framework nuget-package
我理解这是一个非常普遍的问题,但我无法找到解决以下场景的可靠资源,也不是在一个地方.所以我决定在这里问一下希望能帮助其他人解决同样的问题:
作为.NET组件的开发人员,我想支持各种.NET目标框架.这个主题对我来说非常重要,因为当引入点网核和点网标准时,最近爆炸的目标框架变体.
所以,想象一下我正在编写一个C#库MyLib(我称之为"产品"),它编译成了MyLib.dll.我想支持不同范围的目标框架:net35,net40,net45,netstandard1.2对于每一个目标框架和等,因此我创建构建(或的MSBuild的csproj文件),并在单个NuGet包一起捆扎在一起,尊重的NuGet准则lib文件夹结构.因此,该产品可以从单个构造工件 - nuget包获得.
对于每个目标框架版本,我尝试利用其功能和优点,并为较低版本提供pollyfill或删除某些功能.一般来说,无论消费项目的目标框架如何,"产品"都是可用的 - 我的意思是MyLib应该正确安装nuget包,并且应该引用适当的dll.
因此,出现了一些问题:
AssemblyInfo.cs文件?[assembly: Guid("...")].其他人都显示关注的的[assembly: AssemblyTitle("...")]属性为好,而在不同的上下文.到目前为止,我自己的方法是为每个目标框架使用一个单独的.csproj文件用于相同的"产品",但随着开发的进展,支持多个项目可能会变得乏味,即使现在目标框架数量非常重要.
因此,我为每个目标框架创建构建(MSBuild或csproj文件),并将它们捆绑在一个nuget包中.
如果您使用Visual Studio 2017中新的csproj"SDK"格式,那么您甚至不需要这样做 - 它支持多个目标框架.例如:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net451;netstandard1.3</TargetFrameworks>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
该项目支持.NET Framework 4.5.1和NETStandard1.3.
这会自动创建条件编译符号,以便您可以执行类似的操作#if NET451,#if NETSTANDARD1_3以便在需要时有条件地应用代码.您也可以在.csproj本身中执行此操作,以便仅为一个框架包含nuget包.该小巧玲珑的项目在他们的.csproj文件中的这个例子.
使用新的dotnetcli,您可以使用dotnet pack它将所有内容打包到nuget包中.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |