web-dev-qa-db-fra.com

Comment référencer une bibliothèque .NET Standard à partir d'une application console .NET Framework 4.5 dans Visual Studio 2017?

J'ai enfin installé Visual Studio 2017.2 et j'essaie de faire fonctionner mon premier projet, mais je rencontre des problèmes que j'espère aborder ici.

J'ai une très simple bibliothèque .NET Standard décrite comme fichier de projet suivant:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>

</Project>

Et une application console très simple .NET Framework qui fait référence à la bibliothèque .NET Standard ci-dessus et qui est décrite comme le fichier de projet suivant:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Common\Common.csproj" />
  </ItemGroup>

</Project>

Lorsque je crée mon application console, j'obtiens l'erreur de construction suivante:

C:\Program Files\dotnet\sdk\1.0.4\NuGet.targets(97,5): error : Project Common is not compatible with net45 (.NETFramework,Version=v4.5). Project Common supports: netstandard1.6 (.NETStandard,Version=v1.6)

J'ai vu cette question et j'ai essayé certaines des suggestions fournies ici, mais aucune d'entre elles n'a fonctionné. Donc, cela semble être un problème différent. Veuillez noter que cela se produit pendant la construction de ma solution et ne fait aucunement référence aux packages (explicites) de NuGet.

Enfin, si cela peut aider, j’ai une solution qui illustre ce problème ici: https://github.com/Mike-EEE/Stash/blob/master/VS2017.Multi/VS2017.dotNetFramework.sln

26
Mike-EEE

.NET Framework 4.5 prend uniquement en charge l’utilisation de bibliothèques standard .net ciblant .NET Standard 1.0 ou 1.1. Depuis que votre bibliothèque cible 1.6, l’outillage fait la bonne chose ici et génère des erreurs (car votre bibliothèque peut utiliser des API non disponibles dans .NET Framework 4.5). Si vous avez publié la bibliothèque en tant que package NuGet et que vous l'avez utilisée via une référence de package, la restauration du package générerait également une erreur (avec une erreur indiquant que le package est incompatible).

Il existe une certaine confusion quant à la version .NET Standard prise en charge par une version .NET Framework, notamment du fait qu'il existe un outil de prévisualisation ("2.0") permettant de modifier ces versions. Le tableau "Support des plateformes .NET" dans la documentation contient donc deux lignes concernant les versions prises en charge. Toutefois, dans votre cas, les deux versions limitent .NET Framework 4.5 à .NET Standard 1.1.

31
Martin Ullrich

pour que les projets de framework .net soient compatibles avec les bibliothèques standard .net, vous devez acquérir le NETStandard.Library de la pépite.
Maintenant, je ne trouve aucune ressource officielle indiquant exactement pourquoi il s’agit là d’un impératif, mais à partir de ce que je comprends le NETStandard.Library possède les liens nécessaires pour créer une carte des API .NET Standard vers .NET Framework.
Si vous souhaitez plus d’informations, je vous suggère de lire la documentation officielle de NET Standard .

4