Ajouter une référence à dll vs. ajouter un paquet NuGet in.NET projet Standard

j'ai un projet .NET standard 2.0 dans ma solution et j'utilise L'interface IConfiguration. Quand j'écris le nom VS suggère que je me réfère à Microsoft.Extension.Configuration.Abstraction.DLL. Si je le fais, il est ajouté sous le noeud de référence. Cependant, je peux aussi l'ajouter comme un paquet NuGet. Les deux façons semble fonctionner. Je suppose que la référence VS suggère est ajoutée via le SDK Standard .NET qui est référencé dans le projet.

Qui est la méthode recommandée pour ajouter que de référence? Quels sont les avantages et les inconvénients de chaque approche?

12
demandé sur Stilgar 2017-09-20 12:55:41

1 réponses

référencer une DLL directement à partir d'un paquet NuGet qui a été téléchargé manuellement, ou qui est installé à un endroit connu, peut accélérer le processus de restauration et de compilation, mais présente quelques dangers.

il y a un certain nombre de choses qu'un paquet NuGet peut faire lorsqu'il est référencé qu'un fichier DLL ne peut pas. Si vous voulez faire référence à une DLL à partir d'un paquet, assurez-vous que le paquet ne fait pas l'une des possibilités suivantes:

  • Supplémentaires Les paquets NuGet peuvent être retirés en tant que dépendances. Si vous mettez à jour la DLL à partir d'un nouveau paquet, vous devez vérifier si les dépendances ont changé et mettre à jour le projet en conséquence.
  • les paquets NuGet peuvent fournir différents assemblages de référence et d'implémentation - par exemple, un paquet NuGet peut donner une dll "surface API" dans son ref/ et ensuite contiennent différents assemblages d'implémentation pour .net Framework .net Core, Xamarin et plus dans son lib/. dossier. Vous devez être prudent sélectionnez le fichier DLL de référence approprié pour le projet de type-A. la bibliothèque Standard de .NET peut avoir besoin de faire référence à un ref-assembly (e.g. ref/netstandard1.4/foo.dll pendant le temps de compilation et une application. NET Framework qui utilise cette bibliothèque doit faire référence à l'assemblage à partir par exemple de lib/net452/foo.dll.
  • les paquets NuGet peuvent contenir des spécifications d'exécution supplémentaires et / ou du contenu spécifique au framework cible qui est ajouté à la sortie de compilation. Cela peut être bibliothèques natives (.dll sur windows, .so sur linux etc. - de runtime/ sous-dossier) ou tout fichier de contenu. Obtenir ce droit sans NuGet est délicat, depuis le .nuspec file peut aussi définir des actions de construction pour les fichiers de contenu.
  • la logique de compilation peut être incluse dans les paquets NuGet qui fixent certaines propriétés ou exécutent des cibles pendant la compilation, ce qui est nécessaire pour que le produit soit utilisé correctement. Ceci est impossible à faire manuellement sans éditer le .cspoj classez de la bonne façon.

si le paquet NuGet n'utilise pas le ci-dessus (que vous devez vérifier manuellement), vous êtes généralement sûr de faire référence à la DLL à la place. Cependant, mettre à jour la DLL et ses dépendances est beaucoup de travail et plus facile à faire avec NuGet.

de plus, vous avez mentionné que vous faites référence directement à partir du dossier de repli nuget de L'outil.net Core tooling. Ce dossier n'est pas garanti de contenir des versions spécifiques de la DLL dans d'autres installations (selon les versions SDK installées) et peut même être installé dans un l'emplacement différent sur les différentes machines, rendant votre dossier de projet inutilisable pour d'autres personnes travaillant dessus (ainsi que construire sur les machines non-windows).

7
répondu Martin Ullrich 2017-09-20 13:47:15