我们有一个当前针对.NET 4.6.2
的类库,该类库具有一些依赖项(SDK类),这些依赖项通过nuget进行了解析。
该类库所需的所有SDK程序集均可用于多个目标平台(例如4.6.2
,4.5.2
等)。
我们正在使用VSTS来构建库并将其打包/推入私有的NuGet feed。
现在,我们需要将类库同时定位到.NET 4.5.2
和.NET 4.6.2
,因为我们有一个项目使用此库来定位.NET 4.5.2
(,不幸的是,没有升级它的目标是没有选择)
所以最重要的问题是:是否有办法为两个multipe目标框架构建解决方案?
到目前为止我尝试过的事情:
我还考虑了用于解析和处理所有packages.config
和*.csproj
文件的某种脚本,但是我认为这根本不是最佳实践。
答案 0 :(得分:1)
实际上,是的,这似乎是可能的,但是我从未见过任何文档,也没有亲自尝试过。我只是偶然发现了一个使用它的开源项目,并感到这是可能的。
实际上非常简单:您必须按照以下步骤手动编辑*.csproj
文件:
<Project Sdk="Microsoft.NET.Sdk">
)<TargetFramework>net452</Targetframework>
即可代替<TargetFrameworks>net452;net462</TargetFrameworks>
如果在Visual Studio中打开此类项目的属性页,则会看到目标平台的字段为只读,因此尚无直接支持。作为构建过程的结果,您将获得指定构建输出路径的多个子文件夹,这些子文件夹在单独的目录中包含所有指定目标平台的程序集。
答案 1 :(得分:1)
拥有一个程序集/类库很容易,该库可以供面向不同版本.NET Framework的项目使用。
如果您有针对4.5.2和4.6.2的项目,但您想提供一个公共库,则将库目标设为4.5.2。 .Net make本质上是向后兼容的,因此您始终可以使用比使用库/项目目标版本低的库。 从技术上讲,您也可以定位低于3.5的任何内容,但为什么呢?
这也适用于.Net Core和.Net Standard,但组合很快就会堆积起来。如果该库的目标是.Net Standard 1.0,则可以由面向任何版本的.Net Standard> = 1.0,任何版本的.Net Core> = 1.0和任何版本的.Net Framework> = 4.5.2的项目使用。查看docs on .Net Standard了解详情。
有关.Net Standard的更多详细信息,请查看this blog post from Daniel Crabtree