找到标准.NET程序集的位置?

时间:2011-06-08 15:23:14

标签: c# .net assemblies

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

3 个答案:

答案 0 :(得分:5)

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

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

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

GAC中dll的完整路径是

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

e.g。在我的机器上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

答案 1 :(得分:5)

编译时,您可以使用%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和{{1}}下的注册表项。

GAC更适合运行时使用。

答案 2 :(得分:1)

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

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

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