【问题标题】:.NET Core assembly search order.NET Core 程序集搜索顺序
【发布时间】:2017-10-07 11:11:27
【问题描述】:

在 .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 缓存中也有重复。
    为什么?

【问题讨论】:

    标签: c# .net .net-core gac


    【解决方案1】:

    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
    
    });
    

    有关在代码中管理程序集解析的更多详细信息,请参阅这篇文章 - Resolving Assemblies in .NET Core

    【讨论】:

      【解决方案2】:

      .Net 核心基于跨平台的 Nuget 包。 NET Core 应用程序严重依赖 NuGet 来解决它们的依赖关系,从而简化了开发。

      您可以查看链接Is there any GAC equivalent for .NET Core?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        相关资源
        最近更新 更多