11

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

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

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

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

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

4

1 回答 1

9

首先,参考程序集和 GAC 中的程序集之间有一个重要区别。要编译代码,您需要一个参考程序集。要运行代码,您需要与 .exe 位于同一文件夹中的程序集副本或 GAC 中的程序集。

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

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

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

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

于 2009-01-30T19:50:11.787 回答