web-dev-qa-db-de.com

Visual Studio 2017 lädt keine .NET Framework-Referenzen in der .NET Standard-Bibliothek

Ich habe Visual Studio 2017 installiert. Ich habe eine Klassenbibliothek im neuen .NET-Standardformat (das sowohl .NET Framework als auch .NET Core auftauchen kann). Aber wenn ich zu "Hinzufügen" - "Referenz", dann "Assemblies" - "Framework" gehe, dreht es sich lange und sagt dann: "Es wurden keine Framework-Assemblys auf dem Computer gefunden." (Auf diesem Computer ist VS 2015 installiert und es läuft einwandfrei sowie .NET 4.6.1.) Wie kann ich dies beheben?

ETA: Meine .csproj-Datei sieht derzeit so aus:

<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>

Ändern von 

<TargetFramework>netstandard2.0</TargetFramework>

zu 

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

erlaubt es mir schließlich, den Verweis auf System.Runtime.Caching hinzuzufügen, er hat jedoch beim Erweitern der Verweise ein gelbes Warnsymbol in IDE und ist sowohl in .NET 4.6.1 als auch in Standard in den reduzierbaren Abschnitten (wo Standard auch angezeigt wird) enthalten das Warnsymbol). Builds schlagen fehl, da die IDE behauptet, dass der Verweis noch fehlt.

5
Iucounu

Wenn Sie sowohl .NET Framework als auch .NET Core/.NET Standard auf mehrere Ziele ausrichten, müssen Sie wahrscheinlich MSBuild Conditions verwenden, um zu verhindern, dass .NET Framework-Referenzen in .NET Core/.NET Standard übergehen.

MSBuild-Bedingungen gibt es schon länger, aber in Visual Studio gibt es keine Unterstützung für das Hinzufügen von Bedingungen. Sie müssen Ihre .csproj-Datei manuell bearbeiten. 

<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>

Wenn Sie dies getan haben, gibt es jedoch keine Garantie, dass es richtig ist, eine NuGet- oder andere Assembly-Referenz mit Visual Studio hinzuzufügen. Sie müssen möglicherweise jedes Mal eine manuelle Bereinigung in der .csproj-Datei durchführen, um sicherzustellen, dass die Referenz rechts hinzugefügt wird Bedingter Abschnitt. Es ist wahrscheinlich besser, Verweise hinzuzufügen, indem Sie die Datei jedes Mal manuell bearbeiten.

4
NightOwl888

Auf meiner Seite habe ich alle zuvor präsentierten Lösungen ausprobiert, aber die Lösung bestand einfach darin, das NuGet-Paket für Microsoft.CSharp zu installieren.

Nach der Installation bereinigen Sie einfach das Projekt und starten Sie Ihre IDE neu.

5
Badr Bellaj

Versuchen Sie, die Reihenfolge der TargetFrameworks in Ihrem .csproj zu ändern.

Von

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

Zu

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

Dies passierte mir, als ich eine Lösung für 4.7.1 auf einem frisch installierten PC öffnete, auf der nur 4.7.2 vorhanden war

0
smirkingman