.NET Core 程序集搜索顺序
.NET Core assembly search order
在 .NET Framework 中,加载程序在当前文件夹中搜索依赖项,然后在 GAC 中搜索。
但是.NET Core中没有GAC,.NET Core程序集加载器也只搜索当前文件夹或全局nuget缓存(someuser/.nuget/packages文件夹)中的程序集?
我还在我的 Mac(C:\Program Files\dotnet\shared in Windows) 中找到了一个 /usr/local/share/dotnet/shared 文件夹,所有基础库都位于该文件夹中, 比如 System.Runtime.dll, System.Collections.dll.
程序集加载器也在那里吗?
我还发现这些基础库在全局 nuget 缓存中也是重复的。
为什么?
.Net core基于跨平台的Nuget包。 NET Core 应用程序严重依赖 NuGet 来解决它们的依赖关系,从而简化了开发。
你可以查看link
PackageCompilationAssemblyResolver 使用的目录在很大程度上取决于您的环境。但是,它们可能包括:
- C:\Program Files\dotnet\store\x64\netcoreapp2.0(或您机器的等效路径)
- C:\Users\{用户}\.nuget\packages
- C:\程序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
});
有关在代码中管理程序集解析的更多详细信息,请参阅本文 - Resolving Assemblies in .NET Core
在 .NET Framework 中,加载程序在当前文件夹中搜索依赖项,然后在 GAC 中搜索。
但是.NET Core中没有GAC,.NET Core程序集加载器也只搜索当前文件夹或全局nuget缓存(someuser/.nuget/packages文件夹)中的程序集?
我还在我的 Mac(C:\Program Files\dotnet\shared in Windows) 中找到了一个 /usr/local/share/dotnet/shared 文件夹,所有基础库都位于该文件夹中, 比如 System.Runtime.dll, System.Collections.dll.
程序集加载器也在那里吗?我还发现这些基础库在全局 nuget 缓存中也是重复的。
为什么?
.Net core基于跨平台的Nuget包。 NET Core 应用程序严重依赖 NuGet 来解决它们的依赖关系,从而简化了开发。
你可以查看link
PackageCompilationAssemblyResolver 使用的目录在很大程度上取决于您的环境。但是,它们可能包括:
- C:\Program Files\dotnet\store\x64\netcoreapp2.0(或您机器的等效路径)
- C:\Users\{用户}\.nuget\packages
- C:\程序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
});
有关在代码中管理程序集解析的更多详细信息,请参阅本文 - Resolving Assemblies in .NET Core