我已经安装了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声称参考,至今下落不明。
当多靶向.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
文件,以确保引用添加到右侧有条件的部分。你可能最好将通过手工编辑文件,每次引用。
在我的身边,我已经试过之前提出的所有解决方案,但该溶液只需安装的NuGet包Microsoft.CSharp。
安装完毕后只需清理项目,然后重新启动IDE。
试着改变你的.csproj内TargetFrameworks的顺序。
从
<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
至
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
这发生在我身上时,我开了一个解决方案新安装的PC只有4.7.2存在于4.7.1目标