Comment Faites-Vous Référence à un .NET Standard de la Bibliothèque de la .NET Framework 4.5 Application Console dans Visual Studio 2017?
J'ai enfin installé Visual Studio 2017.2 et essaie d'obtenir mon premier projet de travail, mais je suis quelques difficultés qui, je l'espère, à l'adresse ici.
J'ai une question très simple .NET de la Bibliothèque Standard décrite comme suit le fichier de projet:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.6</TargetFramework>
</PropertyGroup>
</Project>
Et très simple .NET Framework application console qui fait référence à la ci-dessus .NET de la bibliothèque Standard, et est décrite comme suit le fichier de projet:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net45</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Common\Common.csproj" />
</ItemGroup>
</Project>
Quand j'ai créer mon application console, j'obtiens l'erreur de génération 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 essayé quelques-uns des suggestions fournies, mais aucun d'entre eux travaillaient. Donc, cela semble être un problème différent. Veuillez noter que ceci se produit lors de la construction de ma solution et pas de référencement (explicite) de packages NuGet en aucune façon.
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
J'ai essayé votre exemple de projet et il semble que les références de projet ne fonctionnent pas encore avec VS 2017.2 avec .Net Standard referenes. Ajouter la bibliothèque comme un fichier normal de référence et d'ajouter à votre Console d'Application de la NETStandard.Bibliothèque de package Nuget, alors cela va fonctionner.
semble ou est de cette façon? C'est certainement semble comme si évidente et primaire scénario qu'il devrait y avoir de code de travail quelque part que le démontre. C'est très surprenant, pour le moins, que rien ne peut être trouvé. En ajoutant directement un fichier de référence pourraient travailler pour une configuration (Debug), mais ce que sur les autres (presse, etc.)? C'est l'avantage d'utiliser une référence de projet. Si vous pouvez trouver un GitHub question qui déclare cela à cause d'un problème connu en tant que tel et de le présenter comme une réponse je vais le marquer. Tout ce que j'ai vu, dit que cela "fonctionne" comme décrit.
Vous pouvez ajouter le chemin de référence $(Configuration).e.g Debug/Release pour obtenir une Configuration agnostique fichier csproj. Mais VS généralement squiggle, car il ne peut pas reconnaître correctement ce un bien que cela fonctionne. Je suis d'accord que .NET de Base de l'Outillage est toujours un gâchis, mais il sera de plus en plus à chaque sortie.
Je suis content de voir que je ne suis pas le seul bamboolzed par ce nouvel outillage. 🙂 Même après la lecture de la matrice de compatibilité plusieurs fois je n'ai toujours pas à comprendre avec précision. Veuillez voir la accepté de répondre par @martin-ullrich.
OriginalL'auteur Mike-EEE | 2017-06-18
Vous devez vous connecter pour publier un commentaire.
.NET Framework 4.5 prend uniquement en charge l'aide .net bibliothèques standard de ciblage .NET Standard 1.0 ou 1.1. Depuis votre bibliothèque cibles 1.6, l'outillage fait la bonne chose ici et d'erreurs (depuis votre bibliothèque peut utiliser des Api non disponible .NET Framework 4.5). Si vous avez publié la bibliothèque en tant que package NuGet et consommée par l'intermédiaire d'une référence au paquet, le paquet de restauration serait l'erreur (avec un message d'erreur indiquant que le colis est incompatible).
Il existe une certaine confusion au sujet de qui .NET version Standard une .NET Framework version prend en charge en particulier puisqu'il est extrait de l'outillage disponible ("2.0") que les changements de ces versions. L' ".NET plates-formes de soutien" de la table dans la documentation contient donc deux lignes sur les versions prises en charge. Dans votre cas, cependant, les deux versions de la limite .NET Framework 4.5 .NET Standard 1.1.
netstandard1.4
et dotNet.Cadre denet461
et les deux projets maintenant compiler comme prévu. Merci encore!Ah... depuis je ne peux plus modifier le commentaire ci-dessus, je voulais être sûr et de préciser que
net461
a toujours été ma cible, mais ma question ci-dessus utilisenet45
que c'est une baisse de cadre et de sentir qui permettrait de simplifier les choses. Mais comme nous sommes clairement, rien n'est simple ici. 😉Ouais j'ai eu un coup d'oeil dans votre dépôt GitHub et il a été
net45
ainsi, mais je n'ai pas essayer de le construire. Si vous frappez les autres questions, comme c'est probablement mieux d'ouvrir de nouvelles questions..OriginalL'auteur Martin Ullrich
pour .net framework projets pour être compatible avec .net bibliothèques standard, vous devez acquérir l'
NETStandard.Library
de la nuget.Maintenant, je ne peux pas trouver tout fonctionnaire de ressources que les etats exactement pourquoi c'est un must, mais ce que je comprends de la
NETStandard.Library
a les liens nécessaires pour créer une carte à partir .NET Standard de l'API .NET Framework.Si vous voulez plus d'info je vous suggère de lire les docs officielles de NET Standard.
Bien que ceci ne répond pas à la question, je pense que ce point est très intéressant et aussi très difficile de trouver des informations sur. ".net framework projets pour être compatible avec .net bibliothèques standard, vous devez acquérir l'NETStandard.Bibliothèque de la nuget."
OriginalL'auteur Nick Polyderopoulos