列出所有可用的.NET程序集

时间:2009-01-30 11:38:40

标签: .net assemblies legacy

列出所有可用的.NET 2.0程序集的最佳方法是什么?

所需列表的一个示例是,当您在.NET选项卡中执行“添加引用...”时,MS Visual Studio会显示一个。

我已经阅读过Visual Studio使用自己的目录配置和GAC另一个和.NET安装另一个。有关如何以计算机可移植方式知道此目录的位置的任何想法(例如,另一台计算机可能在D:驱动器中安装了Windows)?

从列出的信息中,必须可以使用Assembly.Loadxxxx()它。

注意:它应该以编程方式完成,而不是使用gacutil(例如,除非它提供了C#API)。所有这一切的目标是创建一个自定义动态脚本编辑器,以便您了解获取此信息的必要性。

2 个答案:

答案 0 :(得分:9)

首先,GAC中的参考装配和装配之间存在重要差异。要编译代码,您需要一个引用程序集。要运行代码,您需要与.exe相同的文件夹中的程序集副本或GAC中的程序集。

通常,在安装.NET应用程序时,其安装程序将复制它在GAC中使用的程序集。这些程序集可用作引用程序集,您无法找到它存储在哪个文件夹中,因此您无法告诉编译器其/ /命令行参数的正确值。好吧,你可以找到,但微软试图尽可能使用shell加载项使其变得更加坚固。

当您安装允许您在自己的程序中使用其程序集的.NET应用程序时,会发生一些不同的事情。像.NET框架一样。它将为每个组件制作两个副本。一个是GAC,另一个是“知名”的位置。对于.NET框架,这些众所周知的位置是c:\ windows \ microsoft.net \和c:\ program files \ reference assemblies。后一个文件夹开始被.NET 3.0及以上版本使用。

Visual Studio的“添加引用”对话框使用列出这些已知位置的注册表项。有一对,但重要的是HKLM\Software\Microsoft\.NETFramework\AssemblyFolders

长话短说:您可以使用该注册表项生成“添加引用”对话框生成的相同列表。但它不是100%可靠,您可能会错过某些产品在其他地方复制的参考组件。您必须使用VS中的“浏览”选项卡添加对这些选项的引用。并搜索整个磁盘以自行查找。

答案 1 :(得分:-1)

我之前发现的关于同一问题的唯一信息是this,但我从来没有使用过这些信息。

从它的外观来看,遍历目录以查找所有.DLL文件看起来有点麻烦,但也许这就是你需要做的事情。