您如何在 Visual Studio 2017 中从 .NET Framework 4.5 控制台应用程序引用 .NET 标准库?

How Do You Reference a .NET Standard Library from a .NET Framework 4.5 Console Application in Visual Studio 2017?

我终于安装了 Visual Studio 2017.2,我正在尝试让我的第一个项目正常运行,但是我 运行 遇到了一些麻烦,我希望能在这里解决。

我有一个非常简单的 .NET 标准库,描述为以下项目文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>

</Project>

还有一个非常简单的 .NET Framework 控制台应用程序,它引用了上述 .NET Standard 库,并描述为以下项目文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Common\Common.csproj" />
  </ItemGroup>

</Project>

当我构建控制台应用程序时,出现以下构建错误:

C:\Program Files\dotnet\sdk.0.4\NuGet.targets(97,5): error : Project Common is not compatible with net45 (.NETFramework,Version=v4.5). Project Common supports: netstandard1.6 (.NETStandard,Version=v1.6)

我看到 并尝试了那里提供的一些建议,但其中 none 行得通。所以,这似乎是一个不同的问题。请注意,这发生在我的解决方案构建过程中,并且没有以任何方式引用(显式)NuGet 包。

最后,如果有帮助的话,我这里有一个解决这个问题的解决方案: https://github.com/Mike-EEE/Stash/blob/master/VS2017.Multi/VS2017.dotNetFramework.sln

要使 .net 框架项目与 .net 标准库兼容,您必须从 nuget 中获取 NETStandard.Library
现在我找不到任何官方资源来准确说明为什么这是必须的,但据我了解,NETStandard.Library 具有必要的链接来制作从 .NET Standard API 到 .NET Framework 的映射.
如果您想了解更多信息,我建议您阅读 NET Standard.

的官方文档

.NET Framework 4.5 仅支持使用面向 .NET Standard 1.0 或 1.1 的 .net 标准库。由于您的库以 1.6 为目标,因此该工具在这里做正确的事情并出错(因为您的库可能使用 .NET Framework 4.5 中不可用的 API)。如果您将库发布为 NuGet 包并通过包引用使用它,则包还原也会出错(错误表明包不兼容)。

关于 .NET Framework 版本支持哪个 .NET Standard 版本存在一些混淆,特别是因为有可用的预览工具(“2.0”)可以更改这些版本。 The ".NET platforms support" table in the documentation 因此包含两行关于支持的版本。但是,在您的情况下,两个版本都将 .NET Framework 4.5 限制为 .NET Standard 1.1。