查找标准.NET程序集的位置

本文关键字:位置 程序集 NET 标准 查找 | 更新日期: 2023-09-27 17:58:36

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

查找标准.NET程序集的位置

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

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

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

GAC中dll的完整路径是

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

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

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

另请参阅KB306149中记载的(HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)'SOFTWARE'Microsoft'.NETFramework(HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)'SOFTWARE'Microsoft'.NETFramework'AssemblyFolders下的注册表项。

GAC更多地用于运行时使用。

大多数都在GAC中,我相信这是指示您使用自己的编译器进行查找的地方。帮助编译器等的文档位于.NET Framework的旧版本下,位于工具开发人员文件夹下。

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

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