跨不同解决方案的安装项目中的合并模块显示“无法确定名称”

Merge Module in setup project across different solutions says “unable to determine name”

安装项目在两个解决方案之间共享:

  1. SetupOne.sln
  2. SetupTwo.sln

安装项目还包含合并模块的输出。 在 SetupOne.sln 中的安装项目中,它按预期引用了此合并模块。但是,在 SetupTwo.sln 中它显示“无法确定名称”并且无法构建。通过在解决方案 SetupTwo.sln 中重新添加合并模块来“修复”此问题,然后破坏 SetupOne.sln 中的合并模块引用 - 它现在显示“无法确定名称”并且无法构建。

这是由于解决方案文件中的 GUID 不匹配。我将说明修复如下:

创建两个新的空解决方案,SetupOne 和 SetupTwo。在 SetupOne 中,添加一个名为 SetupOne 的新安装项目,并添加一个名为 MergeModule 的新 MergeModule 项目。以通常的方式将 MergeModule 添加到 SetupOne。你应该有这样的东西:

现在将现有项目 SetupOne 和 MergeModule 添加到 SetupTwo 中。你现在应该有这样的东西:

请注意,我们在解决方案 SetupTwo 的项目 SetupOne 中出现“无法确定名称”。这将导致构建失败。要解决此问题,请在文本编辑器中打开 SetupOne.sln 和 SetupTwo.sln。在 SetupOne.sln 中我们有:

Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "SetupOne", "SetupOne\SetupOne.vdproj", "{8AF96D5B-4852-4862-9894-0278ED68054C}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "MergeModule", "MergeModule\MergeModule.vdproj", "{55F30708-F70E-4B78-9F3C-F312BFB1AF80}"
EndProject

在 SetupTwo.sln 中我们有:

Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "SetupOne", "..\SetupOne\SetupOne\SetupOne.vdproj", "{AE3E9BDE-529F-430C-8EEA-FE5E8A5FAC7D}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "MergeModule", "..\SetupOne\MergeModule\MergeModule.vdproj", "{5DDD8FE2-8736-4D77-960E-DA98BEB6CB8F}"
EndProject

SetupTwo.sln 中的 SetupOne 和 MergeModule 的 GUID 与 SetupOne.sln 中的 SetupOne 和 MergeModule 的不同。 编辑这些项目的 GUID,使它们在两个解决方案中完全相同。当您执行此操作时,Visual Solution 会重新加载 SetupTwo 解决方案,我们有:

构建成功。