c# - 由于缺少 .net 4.5 框架,多目标 .NET Standard 2.0 和 .NET 4.5 失败

标签 c# .net .net-standard

在我的开发盒上,我安装了 .net 4.6.2 和 dotnet-sdk-2.1。我最初有 4.0,然后是 4.5,然后是 4.6.2

我能够在一个同时针对 netstandard2.0 和 net45 的多目标项目上运行 dotnet build,如下所示:

<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

我能够成功构建它并运行单元测试等。我看到 bin 目录包含每个目标框架的子目录并包含所有 DLL。

当我尝试将 CI 构建放在基于 Windows Server 2016 构建的 teamcity 代理上时。我收到错误:

The reference assemblies for framework ".NETFramework,Version=v4.5" were not found.

这让我很困惑,因为机器安装了.NET 4.6.2 SDK。 (它还安装了 dotnet sdk 2.1)

通过谷歌搜索,我看到很多人提到框架应该在字典中:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\

当我检查 Server 2016 计算机时,我看到目录和子目录:v4.6.2 没有 4.5 的子目录

在我的开发盒上,我看到了各种目录:4.5、4.0、3.5、4.6.2 ...

我无法在 Server 2016 计算机上安装框架 4.5 SDK,因为它已经安装了更高版本。所以看来我无法在那台机器上构建目标 .NET 4.5。

作为健全性检查,我将 csproj 文件更改为:

<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>

我能够成功构建该项目。所以构建确实有效,但该机器上需要 4.6.2。如果我以 net46 为目标,它也不起作用。

我在这里做错了什么?
有没有办法让我能够将我的项目多目标到 Server 2016 计算机上的 net45?

最佳答案

TL;DR:安装 .NET Framework 4.5 开发人员包以构建 .NET Framework 4.5 项目。

您说您的服务器安装了 .NET Framework 4.6.2 Developer Pack,并且您正在尝试使用它构建 .NET Framework 4.5 项目。

与运行时包不同,每个版本都包含(可以这么说)以前的版本,您需要拥有针对您目标框架的确切版本的开发人员包。

关于c# - 由于缺少 .net 4.5 框架,多目标 .NET Standard 2.0 和 .NET 4.5 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488466/

相关文章:

c# - 作为 WebService 使用的 WCF 添加了一个 bool 参数?

c# - Facebook web 应用程序扩展权限第二步不显示

c# - 基类和条件泛型之间的区别

.net - 交叉引用程序集

c# - VB 等效于 C# 接口(interface)行为

c# - 如何将 .net 核心 EF 注入(inject) WPF 应用程序

c# - 如何在 .NET Standard 2.0 中获取总系统 RAM?

asp.net-core - Entity Framework Core 1.1 OnModelCreating 方法未被调用

c# - 更好的 DateTime.Parse 在那里?

.net - Lucene.Net:如何在搜索结果中添加日期过滤器?