.NET核心程序集搜索顺序
问题描述:
在.NET Framework中,加载程序搜索当前文件夹中的依赖项,然后在GAC中搜索依赖项。.NET核心程序集搜索顺序
但是在.NET的核心没有GAC,所以没有.NET核心组装装载机仅搜索组件在当前文件夹或全局的NuGet高速缓存(SomeUser的/ .nuget /包文件夹)也?
此外,我在我的Mac(C:\ Program Files \ dotnet \ Windows共享)中找到了所有基础库所在的/ usr/local/share/dotnet/shared文件夹,如System.Runtime.dll, System.Collections.dll。
装配加载程序是否也在那里?另外我发现这些基本库也在全局nuget缓存中复制。
为什么?
答
由PackageCompilationAssemblyResolver使用的目录将在很大程度上依赖于您的环境。然而,他们可能包括:
- C:\ Program Files文件\ DOTNET \店\ 64 \ netcoreapp2.0(或为您的机器的相应路径)
- C:\用户\ {用户} \的NuGet \包
- 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
});
更多有关管理您内部程序集解析的详细信息,请参阅此文章 - Resolving Assemblies in .NET Core
答
.net核心是基于Nuget软件包跨平台的。 .NET Core应用程序严重依赖NuGet来解决它们的依赖关系,这简化了开发。