如何配置我的安装项目以在安装过程中将程序集添加到GAC?

时间:2011-03-04 09:23:31

标签: .net visual-studio-2010 assemblies gac setup-project

首先,我知道 why 它没有出现在“添加引用”对话框中。我也知道如何manually添加它。

我想知道的是我应该如何更改安装项目(在Visual Studio中),以便程序集显示在“添加引用”对话框中。我应该添加新的目标位置还是自定义操作或其他内容?

我目前只是将“主要输出”放在“全局程序集缓存文件夹”

2 个答案:

答案 0 :(得分:4)

您可以修改安装项目以在安装时创建必要的注册表项,并在卸载时将其删除。

请注意,理想情况下,您还需要将程序集部署到“正确的”安装文件夹,然后将该部署文件夹用作AssemblyReferences项的目标文件夹 - 与Microsoft部署参考程序集文件夹的方式相同它的组成部分。

更新

这是我为您准备的演示VS2010解决方案的链接:https://docs.google.com/leaf?id=0Bw_NnV9fhgmgNGE0N2JjYWYtNmVlNC00YjZhLWJlMGMtMDAyMTllYzU4Y2Fi&hl=en&authkey=CPTv8bUI这将完全符合您的要求。

构建并运行安装项目后,“AddReferenceDemo”程序集将出现在“添加引用”对话框的“Assemblies \ Extensions”选项卡中。

以下是我如何构建它:

  • 在文件系统视图中将主输出添加到“应用程序文件夹”。

  • 将主要输出添加到“全局程序集缓存文件夹”特殊文件夹 (可选 - 仅当您需要GAC中的文件时)

  • 在注册表查看器中使用UI添加键Software\Microsoft\.NetFramework\v4.0.30319\AssemblyFoldersEx\[ProductName](您必须创建每个键)。 [ProductName]此处应使用逐字,因为它是设置项目属性中设置的产品名称的快捷方式。

  • 使用值[TARGETDIR]添加默认字符串值(即没有名称) - 再次逐字复制。请注意,这最终将设置为用户在运行安装程序时选择的任何安装文件夹。

构建并运行安装程序。

此外,即使您将其标记为已卸载,也不会显示新的注册表项删除。可能还需要将值标记为删除。

请注意,应将安装程序标记为“x86”目标平台,以便根据目标平台的位数使用正确的注册表节点(Software或Software \ Wow6432Node)。如果您正在部署x64程序集并不重要 - 您在此处设置的安装程序的位数会影响注册表的视图等。

希望有所帮助。

答案 1 :(得分:0)

添加引用对话框(无论是原始的还是Productivity Power Tools中的增强版)都不会在GAC中搜索程序集。

而是搜索注册表中多个位置之一中指定的文件夹(取决于.NET框架版本和配置文件)。

EG。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx

但是我不认为有关搜索文件夹的规则是明确定义的,因此可能需要进行一些反复试验。