VS 2010安装程序项目未将共享引用的程序集承载到所有输出

本文关键字:程序集 输出 引用 程序 安装 2010 项目 共享 VS | 更新日期: 2023-09-27 18:27:00

我正在为C#解决方案设置一个安装程序项目,遇到了一个依赖性问题:

在我的解决方案中,我有4个独立的项目输出——一个windows服务和三个可执行文件,它们都共享一些引用。

我需要安装程序安装所有四个,以便解决方案正常工作。

我已经在"目标机器上的文件系统"对话框的"应用程序文件夹"下为每个项目输出设置了一个安装文件夹,并在其文件夹中成功添加了windows服务的项目输出。但是,当我继续尝试将可执行文件的项目输出添加到它们的文件夹中时,已经携带到windows服务文件夹中的程序集不会携带到可执行文件文件夹中,并且在安装之后,可执行文件将不会运行,因为它们缺少依赖项。

我可以手动将缺少的程序集添加到可执行文件的文件夹中,但似乎不应该这样做,而且我缺少了一些东西。

有什么想法吗?

VS 2010安装程序项目未将共享引用的程序集承载到所有输出

您应该在解决方案中创建一个新项目,并将"安装程序"设置为您的主应用程序(或多个主应用程序)的输出,它应该自己解决依赖关系。

我遇到了我认为是最初描述的问题。我有一个Winform应用程序和一个控制台应用程序作为两个独立的项目,但一个单独的设置项目可以处理这两个项目。

Winform应用程序和控制台应用程序都使用相同的两个外部程序集:一个不是解决方案的一部分(引用文件夹中的文件),另一个来自C#类项目(引用项目)。

我发现,安装程序假设项目输出全部合并到安装机器上的一个文件夹中。因此,所有通用程序集也将与需要它们的可执行程序共存。因此,如果将第一个可执行文件的项目输出添加到文件夹中,这就是为什么会显示其所有依赖项,然后在添加第二个项目输出时,只会显示尚未添加的程序集。

如果在"应用程序"文件夹下创建子文件夹并不重要,Visual Studio似乎将"应用程序文件夹"视为一个整体。。。就项目输出(exe、dll和res)而言。

有两种方法可以解决这个问题。第一种是为每个可执行文件创建一个单独的安装项目。在一个大型项目中,这可能是许多设置项目。

如果你想在一次安装中保留所有内容,一个更好的选择是对共享程序集使用GAC,这在另一篇Stack Overflow文章中有描述:使用Visual Studio安装项目自动注册并GAC COM Interop DLL

MSI可以完成任务。右键单击"目标计算机上的文件系统",添加,GAC。右键单击添加的文件夹"添加","项目输出"。那个确保装配是gac-ed。

在我看来,GAC是更好的解决方案,因为如果以后对程序集进行更改和增强,程序集将由.NET层管理。.NET的好处之一是消除了Win98和以前版本的Windows中的旧"DLL地狱"问题。我强烈建议将它用于您的通用代码。