3

我们目前有一个类库.NET 4.6.2,它具有一些通过 nuget 解析的依赖项(SDK 类)。

该类库所需的所有 SDK 程序集都可用于多个目标平台(例如4.6.24.5.2等)。

我们正在使用 VSTS 来构建库并将其打包/推送到私有 NuGet 提要。

现在,我们需要我们的 Class-Library 来定位.NET 4.5.2以及.NET 4.6.2因为我们有一个使用这个库定位的项目.NET 4.5.2不,不幸的是升级它的目标是没有选择的

所以最重要的问题是:有没有办法为这两个多重目标框架构建解决方案?

到目前为止我尝试了什么:

  • 进行了很多研究,但这个问题似乎并不常见(或者在这种特殊情况下我无法正确地使用谷歌搜索)
  • 尝试了构建变量,但这似乎也没有减少它

我还考虑过某种用于解析和操作所有文件的脚本packages.config*.csproj但我想这根本不是最佳实践。

4

2 回答 2

1

拥有可供针对不同版本 .Net Framework 的项目使用的程序集/类库非常容易。

如果您有针对 4.5.2 和 4.6.2 的项目,但您想提供一个通用库,那么您的库目标为 4.5.2。.Net 本质上是向后兼容的,因此您始终可以使用针对低于使用库/项目目标版本的库。从技术上讲,您也可以定位低于 3.5 的任何内容,但您为什么要这样做。

这也适用于 .Net Core 和 .Net Standard,但组合很快就会叠加起来。如果该库以 .Net Standard 1.0 为目标,则它可以被面向任何版本的 .Net Standard >= 1.0、任何版本的 .Net Core >= 1.0 和任何版本的 .Net Framework >= 4.5.2 的项目使用。有关详细信息,请查看.Net Standard上的文档。

有关 .Net Standard 的更多详细信息,请查看Daniel Crabtree 的这篇博文

于 2018-08-14T06:40:24.157 回答
1

实际上,是的,这似乎是可能的,但我从未见过任何文档,我自己也没有尝试过。我只是偶然发现了一个使用它的开源项目,并且闪现这是可能的。

这实际上很简单:您必须手动编辑*.csproj文件,如下所示:

  1. 将项目转换为新的 sdk 样式格式,就像将其移植到 .NET Standard(文档根目录应该是<Project Sdk="Microsoft.NET.Sdk">
  2. 而不是<TargetFramework>net452</Targetframework>,简单地写<TargetFrameworks>net452;net462</TargetFrameworks>

如果您在 Visual Studio 中打开此类项目的属性页面,您会看到目标平台的字段只读,因此(目前)还没有直接支持。作为构建过程的结果,您将获得指定构建输出路径的多个子文件夹,其中包含单独目录中所有指定目标平台的程序集。

于 2018-07-30T12:08:26.177 回答