2017-10-07 4 views
2

Dans .NET Framework, le chargeur recherche les dépendances dans le dossier actuel, puis dans GAC.Ordre de recherche de l'assembly .NET principal

  1. Mais dans .NET de base il n'y a pas GAC, donc ne chargeur d'assemblage de base .NET recherche uniquement des ensembles dans le dossier en cours ou dans le cache global NuGet (U'nUtilisateur/.nuget/dossier packages) aussi?

  2. J'ai également trouvé un dossier/usr/local/share/dotnet/shared dans mon Mac (C: \ Program Files \ dotnet \ partagé dans Windows) où se trouvent toutes les bibliothèques de base, comme System.Runtime.dll, System.Collections.dll.
    Est-ce que le chargeur d'assemblage est là aussi?

  3. J'ai également trouvé que ces bibliothèques de base sont également dupliquées dans le cache global de nuget.
    Pourquoi?

Répondre

4

Les répertoires utilisés par le PackageCompilationAssemblyResolver dépendra en grande partie de votre environnement. Cependant, ils peuvent inclure:

  • C: \ Program Files \ dotnet \ Store \ x64 \ netcoreapp2.0 (ou chemin équivalent pour votre machine)
  • C:. \ Users \ {utilisateur} \ NuGet \ paquets
  • C: \ Program Files \ dotnet \ sdk \ NuGetFallbackFolder

Notez que ceci est juste pour les paquets (c.-à-NuGet). D'autres résolveurs de montage existent pour les références et les ensembles d'application ...

Notez que si vous utilisez un résolveur de montage directement dans votre code, vous pouvez spécifier les chemins utilisés pour la résolution comme suit:

ICompilationAssemblyResolver assemblyResolver = new CompositeCompilationAssemblyResolver 
         (new ICompilationAssemblyResolver[] 
{ 
    new AppBaseCompilationAssemblyResolver(basePath),  //e.g. project path 
    new ReferenceAssemblyPathResolver(defaultReferenceAssembliesPath, fallbackSearchPaths), 
    new PackageCompilationAssemblyResolver(nugetPackageDirectory) //e.g. C:\Users\\{user}\\.nuget\packages 

}); 

Pour en savoir plus détails sur la gestion de la résolution des assemblées dans votre code, voir cet article - Resolving Assemblies in .NET Core

0

Le cœur de réseau est basé sur des boîtiers Nuget en multiplateforme. Les applications NET Core dépendent fortement de NuGet pour résoudre leurs dépendances, ce qui simplifie le développement.

Vous pouvez vérifier le lien Is there any GAC equivalent for .NET Core?