【问题标题】:List all available .NET assemblies列出所有可用的 .NET 程序集
【发布时间】:2010-10-04 11:01:51
【问题描述】:

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

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

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

从列出的信息来看,它一定可以通过 Assembly.Loadxxxx() 来实现。

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

【问题讨论】:

    标签: .net assemblies legacy


    【解决方案1】:

    首先,参考程序集和 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 中的“浏览”选项卡来添加对它们的引用。并搜索整个磁盘以自己找到它们。

    【讨论】:

    • 刚刚尝试了答案中的最后一点,但没有奏效。例如,System.dll 不包含在HKLM\Software\Microsoft\.NETFramework\AssemblyFolders 处的任何路径中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多