Comment avez-vous multi-cible un .NET de Base de la bibliothèque de classe avec csproj?
Quand .NET de Base encore utilisé le project.json
format, vous pouvez créer une bibliothèque de classes ciblant de multiples cadres (par exemple net451, netcoreapp1.0).
Maintenant que le projet officiel format est csproj
à l'aide de MSBuild, comment spécifier plusieurs cadres à la cible? Je suis en train de regarder pour cette partir des paramètres de projet dans VS2017, mais je suis capable de ne cible qu'un seul cadre de l' .NET cadres de Base (il n'a même pas la liste des autres .NET Framework version qui je ne ont installé):
- Ce n'est pas ce qu'il est censé ressembler, vous devriez obtenir l' .NETStandard 1.x choix énumérés dans la liste déroulante. Il n'est pas très clair comment cela s'est produit, assurez-vous de choisir le bon modèle de projet pour commencer. Doit être "de la Bibliothèque de classes.NET Standard)". Ressemble vous avez choisi la Console de l'Application du modèle, puis a commencé à la modification des propriétés, pas de la bonne façon. Si vous en fait utilisé la Bibliothèque de Classe de modèle, puis l'installation ne va pas bien.
- J'ai effectivement choisi de la Bibliothèque de classes.NET de Base).
- Bon, alors que c'est faux si vous voulez vous multi-cible. Vous devez choisir un .NETStandard à faire de la bibliothèque utilisable sur plus d'une plateforme.
- Qui l'annule. Vous pouvez écrire une réponse à partir de vos commentaires si vous le souhaitez.
Vous devez vous connecter pour publier un commentaire.
Vous devez modifier manuellement le fichier de projet et ajouter s à la valeur par défaut TargetFramework et modifier fondamentalement à TargetFrameworks. Ensuite vous parler de la Moniker avec un ; séparateur.
Aussi, vous pouvez mettre le package Nuget des références dans un conditionnelle ItemGroup manuellement ou à l'aide de VS Gestionnaire de Package Nuget.
Voici ce que votre .csproj devrait ressembler à:
Une autre solution que je fais ces jours-ci en raison de documents manquants, c'est que je créer un projet dans VS2015 et la forme du projet.json à l'aide de la documentation disponible et intellisense, puis ouvrez la solution dans VS2017 et utilisez la fonction intégrée de mise à niveau. Je vais donc regarder le fichier csproj de comprendre comment faire pour que la configuration se produire.
Multi-ciblage plus ésotérique des objectifs sans un Moniker:
Microsoft:
Si vous souhaitez cibler un Profil Portable, il n'est pas prédéfinie moniker donc Portable Profils ne pouvez pas déduire
TargetFrameworkIdentifier
,TargetFrameworkVersion
, etTargetFrameworkProfile
. Aussi un compilateur constante n'est pas définie automatiquement. Enfin, il faut ajouter toutes les références d'assembly aucun n'est fourni par défaut.Cet Exemple ci-dessous est extrait à partir d'un projet qui a utilisé le
dynamic
mot-clé si elle a en outre besoin de l'Microsoft.CSharp
de l'assemblée, ainsi vous pouvez voir comment il est références pour des cibles différentes.TargetFramework
bien, alors pourquoi voudriez-vous être capable de l'utiliser dans leItemGroup
condition d'attributs? Quand j'ai essayer de faire ce dans VS2017-je obtenir gribouillis partout$(TargetFramework)
est référencé.Vous pouvez modifier manuellement
.csproj
fichier pour mettre cetteTargetFrameworks
(pasTargetFramework
) propriété.Voir, par exemple,
EFCore.csproj
:https://github.com/aspnet/EntityFrameworkCore/blob/951e4826a38ad5499b9b3ec6645e47c825fa842a/src/EFCore/EFCore.csproj
Qui n'est pas le modèle de projet que vous voulez si votre bibliothèque a besoin de travailler sur de multiples plate-forme cible. Avec ce modèle de projet, votre bibliothèque ne peut jamais être utilisé dans un projet qui vise .NETCore. Le PCL bibliothèque approche était à la retraite, vous devez maintenant choisir un .NETStandard.
Vous faire par de démarrer le projet avec la "Bibliothèque de classes (.NET Standard)" modèle de projet. Vous avez maintenant la possibilité de choisir la .NETStandard version. La compatibilité de la grille est ici.
Espérons qu'ils vont continuer, qui lie l'article à jour. C'est en mutation .NETStandard 2.0 a été cloué vers le bas, mais ne livre pas encore. Ciblée pour le 2ème trimestre de l'année 2017, fin du printemps sans doute, actuellement, il montre que 97% fait de. J'ai entendu les concepteurs de dire que l'utilisation de 1.5 ou 1.6 n'est pas recommandé, pas assez compatible avec 2.0
project.json
vous pouvez spécifier les dépendances spécifiques pour un framework cible.project.json
?J'ai fait un guide du débutant pour le multi-ciblage net framework et netcore.
L'approche la plus simple consiste à obtenir une netcore/netstandard cible de travail d'abord, puis de modifier le fichier csproj et de passer par ces étapes pour les autres cibles:
<Reference />s
pour le Système.* dll pour tous netframework cibles, il suffit de lire ce que les messages d'erreur de génération de dire est manquant.<PackageReference />s
dans le cas où ils ne sont pas les mêmes pour chaque cible. La meilleure astuce est de revenir temporairement à une seule cible à atteindre, de sorte que l'interface graphique va gérer le Nuget références correctement pour vous.