繁体   English   中英

Visual Studio 2017 不会在 .NET Standard 库中加载 .NET Framework 引用

[英]Visual Studio 2017 won't load .NET Framework references in .NET Standard library

我已经安装了 Visual Studio 2017。我有一个新的 .NET Standard 格式的类库,.NET Framework 和 .NET Core 都可以使用它。 但是当我去Add... Reference... Assemblies Framework时,Visual Studio 旋转了很长时间然后说,

在机器上找不到任何框架程序集。

(这台机器还安装了 Visual Studio 2015,以及 .NET 4.6.1。)

我该如何解决这个问题?

我的.csproj文件目前如下所示:

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

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="Utility\EncryptionUtility.cs" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Utility\" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="System.Runtime.Caching" />
  </ItemGroup>

</Project>

从以下位置更改目标框架:

<TargetFramework>netstandard2.0</TargetFramework>

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

允许我最终添加对System.Runtime.Caching的引用,但在扩展引用时它在 IDE 中有一个黄色警告图标。 它包含在 .NET 4.6.1 和 .NET Standard 的可折叠部分中,Standard 下的参考也显示了警告图标。 构建失败,因为 IDE 声称该引用仍然丢失。

当同时针对 .NET Framework 和 .NET Core/.NET Standard 进行多目标处理时,您几乎肯定需要使用MSBuild 条件来防止 .NET Framework 引用流入 .NET Core/.NET Standard。

MSBuild 条件已经存在了很长一段时间,但 Visual Studio 不支持添加它们,您必须手动编辑.csproj文件。

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

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="Utility\EncryptionUtility.cs" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Utility\" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
    <Reference Include="System.Runtime.Caching" />
  </ItemGroup>

</Project>

另请注意,一旦执行此操作,无法保证使用 Visual Studio 添加 NuGet 或其他程序集引用会正常工作 - 您可能需要每次在.csproj文件中进行手动清理,以确保将引用添加到右条件部分。 通过每次手动编辑文件来添加引用可能会更好。

就我而言,我已经尝试过之前提出的所有解决方案,但解决方案只是为 Microsoft.CSharp 安装 NuGet 包。

安装后只需清理项目并重新启动 IDE。

尝试更改 .csproj 中 TargetFrameworks 的顺序。

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

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

当我在仅存在 4.7.2 的全新安装 PC 上打开针对 4.7.1 的解决方案时,这发生在我身上

作为替代方案,您可以使用Nuget 包管理器中的 .NET 标准库来处理此问题:

截屏

.NET Framework 的“添加引用”窗口中的消息是预期的。 创建 .NET Standard 库时,会在项目创建期间自动引用NETStandard.Library元包。 它是一组建议一起使用和支持的标准 .NET API。 这包括NETStandard.Platform包中的所有 API,以及 .NET 核心但构建在NETStandard.Platform之上的其他库。

这意味着我们不需要单独添加引用。

只需为相应的框架安装 .NET Framework 开发人员包,它就可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM