.NET Core程序集搜索顺序

6

在.NET Framework中,装载程序会在当前文件夹和GAC中搜索依赖项。

  1. 但在.NET Core中没有GAC,所以.NET Core程序集装载程序只会在当前文件夹或全局的NuGet缓存(如someuser/.nuget/packages文件夹)中搜索程序集吗?

  2. 我在我的Mac上发现了一个/usr/local/share/dotnet/shared文件夹(在Windows下是C:\Program Files\dotnet\shared),其中包含所有基础库,如System.Runtime.dll、System.Collections.dll。
    程序集装载器也会在那里查找吗?

  3. 我还发现这些基础库也会在全局NuGet缓存中重复出现。
    为什么?

2个回答

8
PackageCompilationAssemblyResolver使用的目录将在很大程度上取决于您的环境。然而,它们可能包括以下内容:
  • C:\Program Files\dotnet\store\x64\netcoreapp2.0(或您机器上等效的路径)
  • C:\Users\{user}\.nuget\packages
  • C:\Program Files\dotnet\sdk\NuGetFallbackFolder
请注意,这仅适用于包(即NuGet)。其他程序集解析器存在于引用和应用程序程序集中...
请注意,如果您直接在代码中使用程序集解析器,则可以按如下方式指定用于解析的路径:
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

});

要更好地管理代码中程序集的分辨率,请参阅此文章 - .NET Core中解决程序集问题


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接