web-dev-qa-db-fra.com

Visual Studio 2017 ne charge pas les références .NET Framework dans la bibliothèque .NET Standard

J'ai installé Visual Studio 2017. J'ai une bibliothèque de classes au nouveau format .NET Standard (capable de faire surface à la fois .NET Framework et .NET Core). Mais lorsque je clique sur "Ajouter" - "Référence", puis "Assemblées" - "Framework", il tourne pendant un long moment puis indique "Aucun assemblage de framework n'a été trouvé sur la machine". (Cette machine est équipée de VS 2015 et fonctionne correctement, ainsi que de .NET 4.6.1.) Comment résoudre ce problème?

ETA: Mon fichier .csproj ressemble actuellement à ceci:

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

Changer de 

<TargetFramework>netstandard2.0</TargetFramework>

à 

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

me permet enfin d’ajouter la référence à System.Runtime.Caching, mais il comporte une icône d’avertissement jaune dans le IDE lors du développement des références, et est inclus à la fois dans .NET 4.6.1 et Standard dans les sections réductibles (où Standard affiche également l'icône d'avertissement). Les générations échouent car IDE prétend que la référence est toujours manquante.

5
Iucounu

Lorsque vous ciblez plusieurs fois .NET Framework et .NET Core/.NET Standard, vous devrez très certainement utiliser MSBuild Conditions pour éviter que les références .NET Framework ne se répercutent dans .NET Core/.NET Standard.

Les conditions MSBuild existent depuis assez longtemps, mais Visual Studio ne permet pas de les ajouter, vous devez modifier manuellement votre fichier .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>

Notez également qu'une fois que cela est fait, rien ne garantit que l'ajout d'un NuGet ou d'une autre référence d'assembly à l'aide de Visual Studio fonctionnera correctement. Vous devrez peut-être effectuer un nettoyage manuel à chaque fois dans le fichier .csproj pour vous assurer que la référence est ajoutée à droite. section conditionnelle. Il est probablement préférable d’ajouter des références à la main en éditant le fichier à chaque fois.

4
NightOwl888

De mon côté, j'ai essayé toutes les solutions présentées auparavant, mais la solution consistait simplement à installer le package NuGet pour Microsoft.CSharp.

Après l’installation, nettoyez simplement le projet et redémarrez votre IDE.

5
Badr Bellaj

Essayez de changer l’ordre de TargetFrameworks dans votre .csproj.

De

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

À

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

C'est ce qui m'est arrivé lorsque j'ai ouvert une solution ciblant 4.7.1 sur un PC fraîchement installé, où seul 4.7.2 était présent

0
smirkingman