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

时间:2012-03-06 14:46:47

标签: c# .net visual-studio-2010 installer installation-package

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

在我的解决方案中,我有4个独立的项目输出 - 一个Windows服务和三个可执行文件,他们之间共享一些引用。

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

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

我可以手动将缺少的程序集添加到可执行文件的文件夹中,但似乎这不是应该如何完成的,而是我缺少的东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

那么你应该在解决方案中创建一个新项目,并将“installer”设置为主应用程序(或主应用程序)的输出,它应该解决依赖关系本身。

答案 1 :(得分:1)

我的想法是我认为最初描述的问题。我有一个Winform应用程序和一个控制台应用程序作为两个单独的项目,但一个安装项目处理两个。

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

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

如果在Application文件夹下创建子文件夹无关紧要,Visual Studio似乎将应用程序文件夹视为整个单元......就项目输出(exe,dll和res)而言。

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

如果要将所有内容保留在单个安装中,更好的选择是将GAC用于共享程序集,这在另一个Stack Overflow文章中有所描述:Use Visual Studio Setup Project to automatically register and GAC a COM Interop DLL

  

MSI可以完成工作。右键单击“目标机器上的文件系统”,   加,GAC。右键单击添加的文件夹,添加,项目输出。那   确保装配成型。

GAC是我心目中的更好的解决方案,因为如果您稍后对它们进行更改和增强,那么您的程序集将由.NET层管理。 .NET的一个好处是消除了Win 98和以前版本的Windows中旧的“DLL地狱”问题。我强烈建议您将它用于您的通用代码。