我知道这是一个相当普遍的问题,但我无法找到解决以下情况的可靠资源,也无法找到一个地方。所以我决定在这里问,希望能帮助其他人在同样的问题上苦苦挣扎:
作为 .NET 组件的开发人员,我希望支持各种 .NET 目标框架。随着最近引入dot net core和dot net 标准的目标框架变体爆炸式增长,这个话题对我来说变得非常重要。
所以,想象一下我正在编写一个 C# 库MyLib
(我将其称为“产品”),它编译为MyLib.dll
. 我想支持不同范围的目标框架:net35
、、、net40
等。因此net45
,netstandard1.2
我为每个目标框架创建构建(MSBuild 或 csproj 文件)并将它们捆绑在一个 nuget 包中,遵守 lib 文件夹结构的 nuget 指南. 因此,产品可以从单个构建工件——nuget 包中获得。
对于每个目标框架版本,我都尝试利用其特性和优势,并为较低版本提供 pollyfills 或剥离一些特性。一般来说,无论使用项目的目标框架如何,“产品”都是可用的——我的意思是MyLib
应该正确安装 nuget 包,并且应该引用适当的 dll。
因此,出现了几个问题:
- 在不同的构建中共享相同的程序集版本信息是否正确?喜欢重复使用同一个
AssemblyInfo.cs
文件? - 哪些程序集属性不应该在我的构建之间共享?关于] 属性,我已经开始了另一个线程。
[assembly: Guid("...")]
其他人也在不同的背景下表现出对该属性的担忧。[assembly: AssemblyTitle("...")]
- 是否有任何好的或标准化的方法来组织解决方案来支持上述构建结果。大多数项目是否真的在实现这一目标时自谋生路?
到目前为止,我自己的方法是为相同的“产品”为每个目标框架使用单独的 .csproj 文件,但随着开发的进展,支持多个项目可能会变得乏味,即使目标框架数量现在非常重要。