【问题标题】:Find location of standard .NET assemblies?查找标准 .NET 程序集的位置?
【发布时间】:2011-06-08 15:23:13
【问题描述】:

对于一个小的 C# 编译器,我需要找到标准 .NET 程序集的路径,例如 System.dll、System.Xml.dll 以及“添加引用”中“.NET”选项卡下列出的几乎所有程序集" Visual Studio (2010) 中的窗口。
我会使用绝对路径,但我觉得这可能会在特殊情况下中断。

【问题讨论】:

  • 你在编写自己的编译器吗?
  • 我相信您想要做的是列出 GAC 中的程序集。我没有示例代码来演示,但是 ILSpy 执行此任务并且源代码可用。也许你可以从中提取它。 wiki.sharpdevelop.net/ILSpy.ashx
  • @tomasmcguinness 这不是我说的第一件事吗?
  • 对不起@Vercas - 这应该以为什么开头。

标签: c# .net assemblies


【解决方案1】:

编译时可以使用%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework下的引用程序集

另请参阅(HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)\SOFTWARE\Microsoft\.NETFramework(HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders 下的注册表项,如KB306149 所述。

GAC 更适合运行时使用。

【讨论】:

    【解决方案2】:

    这些都存储在 GAC 中 %WINDIR%\assembly,您可以在 Windows 资源管理器中查看。

    实际的 dll 可以在 GACGAC_32GAC_MSIL 文件夹的子文件夹中找到,似乎取决于它们的版本。在我的机器上,我还有另外三个 NativeImages 文件夹,它们似乎也包含 GAC 的 dll。

    Windows 资源管理器不允许您直接浏览这些文件夹(据我所知),但您可以通过命令提示符到达那里。

    GAC 中 dll 的完整路径是

    %WINDIR%\assembly\GACFOLDER\FILENAME\VERSION__PUBLICKEYTOKEN\FILENAME.dll

    例如在我的机器上,System.Xml.dll 的不同版本可以在C:\WINDOWS\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089 中找到 C:\WINDOWS\assembly\GAC\System.Xml\1.0.5000.0__b77a5c561934e089 C:\WINDOWS\assembly\NativeImages1_v1.1.4322\System.Xml\1.0.5000.0__b77a5c561934e089_2775eea1 C:\WINDOWS\assembly\NativeImages1_v1.1.4322\System.Xml\1.0.5000.0__b77a5c561934e089_4c5fbb92

    【讨论】:

    • GAC 是否有路径变量? GAC 程序集是否始终存储在 c:\windows\assembly?
    • 我已更新我的答案以使用 Windows 目录的路径变量。
    • 谢谢!在那个文件夹中,我看到了真正程序集的路径......我也许可以使用这些!
    【解决方案3】:

    大多数都在 GAC 中,我相信您会被指示使用自己的编译器进行查看。帮助编译器等的文档可以在旧版本的 .NET Framework 下的 tools developer 文件夹下找到。

    我不会完全反对“硬编码”文件夹本身,但您将被锁定到特定版本。我并不是说这是正确的方法,但 .NET 的位置不太可能改变,并且很可能您的编译器卡在特定版本中。如果你走这条路......为了在各种机器上安全,你应该使用 %WINDIR% 来确定 Windows 的安装位置(如果你从未使用过它并想查看变量,请在命令提示符下尝试 cd %WINDIR%做)。学术练习结束。

    需要注意的一点是,通过检查 MS 在 vNext (?) 中的“编译器即服务”方向,您正在尝试的某些功能可能会得到更好的服务。这个想法/功能已经存在于 Mono(开源 .NET)中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多