I've installed Visual Studio 2017. I have a class library in the new .NET Standard format (which is able to surface both .NET Framework and .NET Core). But when I go to "Add" - "Reference", then "Assemblies" - "Framework", it spins for a long time and then says, "No Framework assemblies were found on the machine." (This machine has VS 2015 installed and running fine, as well as .NET 4.6.1.) How do I resolve this?
ETA: My .csproj file currently looks like this:
<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>
Changing from
<TargetFramework>netstandard2.0</TargetFramework>
to
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
allows me to finally add the reference to System.Runtime.Caching
, but it's got a yellow warning icon in the IDE when expanding the references, and is included under both .NET 4.6.1 and Standard in the collapsible sections (where Standard also shows the warning icon). Builds fail because the IDE claims that the reference is still missing.
On my side, I've tried all the solution presented before but the solution was simply install NuGet package for Microsoft.CSharp.
After installation just clean the project and restart your IDE.
This happened to me when I opened a solution targeting 4.7.1 on a fresh-install PC where only 4.7.2 was present
As an alternative, you can use .NET standard library from Nuget Package Manager to handle this issue:
The message in Add Reference window for .NET Framework is expected. Since, When you create a .NET Standard library the NETStandard.Library metapackage is automatically referenced during project creation. It is a set of standard .NET APIs that are recommended to be used and supported together. This includes all of the APIs in the NETStandard.Platform package plus additional libraries that are core to .NET but built on top of NETStandard.Platform.
This means we don’t need to need add references individually.
When multi-targeting both .NET Framework and .NET Core/.NET Standard you will almost certainly need to use MSBuild Conditions to prevent .NET Framework references from bleeding over into .NET Core/.NET Standard.
MSBuild conditions have been around for quite some time, but there is no support in Visual Studio to add them, you have to manually edit your
.csproj
file.Try to change order of TargetFrameworks inside your .csproj.
From
To