Visual Studio 2017无法在.NET标准库

时间:2018-01-18 14:53:59

标签: c# .net visual-studio-2017 .net-standard .net-standard-2.0

我已经安装了Visual Studio 2017.我有一个新的.NET标准格式的类库(它能够同时显示.NET Framework和.NET Core)。但是当我去"添加" - "参考",然后"大会" - "框架",它旋转了很长时间然后说,"没有在机器上找到框架组件。" (这台机器安装了VS 2015并且运行良好,以及.NET 4.6.1。)我该如何解决这个问题?

ETA:我的.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和Standard中可折叠部分(标准也显示警告图标)。构建失败,因为IDE声称仍然缺少引用。

5 个答案:

答案 0 :(得分:5)

当多重定位.NET Framework和.NET Core / .NET Standard时,您几乎肯定需要使用MSBuild Conditions来防止.NET Framework引用流入.NET Core / .NET Standard。 / p>

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文件中进行手动清理以确保引用被添加到右边的条件部分。最好每次手动编辑文件来添加引用。

答案 1 :(得分:5)

在我这边,我已经尝试了前面介绍的所有解决方案,但是该解决方案只是为Microsoft.CSharp安装NuGet软件包。

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

当我在只有4.7.2的全新安装的PC上打开针对4.7.1的解决方案时,发生了这种情况

答案 4 :(得分:0)

或者,您可以使用.NET Standard Library from Nuget程序包管理器来解决此问题:

Screenshot

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

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