的Visual Studio 2017年将不会加载在.NET标准库.NET框架引用

问题描述 投票:8回答:4

我已经安装了Visual Studio 2017年我在新的.NET标准格式的类库(这是能够表面积均.NET Framework和.NET核心)。但是,当我去“添加” - “参考”,然后在“组件” - “框架”,它旋转很长一段时间,然后说:“没有框架组件是在机器上找到。” (本机已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和标准(如标准还给出了警告图标)包含。构建失败,因为IDE声称参考,至今下落不明。

c# .net visual-studio-2017 .net-standard .net-standard-2.0
4个回答
6
投票

当多靶向.NET Framework和.NET核心/ .NET标准,你几乎肯定会需要使用MSBuild Conditions防止过度出血到.NET核心/ .NET标准.NET框架的引用。

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>

还要注意的是,一旦你做到这一点,也不能保证它会工作的时候添加的NuGet或其他组件参考使用Visual Studio - 你可能需要在每次做手工清理在.csproj文件,以确保引用添加到右侧有条件的部分。你可能最好将通过手工编辑文件,每次引用。


6
投票

在我的身边,我已经试过之前提出的所有解决方案,但该溶液只需安装的NuGet包Microsoft.CSharp。

安装完毕后只需清理项目,然后重新启动IDE。


2
投票

试着改变你的.csproj内TargetFrameworks的顺序。

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

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

1
投票

这发生在我身上时,我开了一个解决方案新安装的PC只有4.7.2存在于4.7.1目标

© www.soinside.com 2019 - 2024. All rights reserved.