【问题标题】:How do I get the paths of the directories where .NET reference assemblies are stored, without hardcoding?如何在不进行硬编码的情况下获取存储 .NET 引用程序集的目录的路径?
【发布时间】:2017-05-19 13:03:20
【问题描述】:

C#(或 Windows)是否提供了一种方法来获取包含给定版本 .NET 的 .NET 引用程序集的目录位置?在我的机器上,它们位于:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v###\

其中### 是 3.5、4.0、4.5、4.5.1、4.5.2、4.6 或 4.6.1 中的任何一个。这些目录包含 mscorlib 和一些 System 程序集,而 v4.5+ 的在 Facades\ 子目录中还有更多 System 程序集。

有没有比硬编码更好的方法来获取这些目录的路径? (或者,或者,Microsoft 是否致力于将引用程序集保存在同一位置,以便硬编码不会中断?)

(上下文:我正在使用 Roslyn 编译一个项目,但它没有拾取我的 csproj、框架或其他方式中引用的任何程序集 - 所以我将它们手动加载为元数据引用。我在上面确定的目录是 MSBuild 在运行 csc 时从中获取程序集的位置,所以我想我也应该从那里获取程序集。)

【问题讨论】:

    标签: c# .net roslyn


    【解决方案1】:

    使用 Microsoft.Build.Utilities.Core 中的 ToolLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies 方法:

    foreach (TargetDotNetFrameworkVersion version in Enum.GetValues(typeof(TargetDotNetFrameworkVersion)))
    {
        string location = ToolLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies(version);
        Console.WriteLine($"{version}: {location}");
    }
    

    【讨论】:

      【解决方案2】:

      GetPathToDotNetFrameworkReferenceAssemblies 返回“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\version\”。

      ToolLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies(TargetDotNetFrameworkVersion.VersionLatest);
      

      【讨论】:

        【解决方案3】:

        如果你在 GitHub 上查看微软的 MSBuild 源代码,你可以阅读FrameworkLocationHelper.GetPathToDotNetFrameworkReferenceAssemblies 了解其中的逻辑。

        【讨论】:

          【解决方案4】:

          Getting the .NET Framework directory path:

          活动的 CLR 安装目录的路径 当前的 .NET 应用程序可以通过以下方式获得 方法:

          System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()

          【讨论】:

          • 在我的机器上,返回C:\Windows\Microsoft.NET\Framework\v4.0.30319\ 。我怀疑这些可能足以让 Roslyn 正确编译我的东西,但我希望能提供有关该目录中的程序集是否与目录中可用程序集相同(或等效)的更多信息我在我的问题中提到过。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-08-18
          • 1970-01-01
          • 1970-01-01
          • 2012-04-15
          • 1970-01-01
          • 2020-08-29
          • 1970-01-01
          相关资源
          最近更新 更多