5

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

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

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

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

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

有任何想法吗?

4

2 回答 2

1

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

于 2012-03-06T19:45:54.240 回答
1

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

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

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

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

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

如果您想在单个安装中保留所有内容,更好的选择是将 GAC 用于共享程序集,这在此处的另一篇 Stack Overflow 文章中进行了描述:使用 Visual Studio 安装项目自动注册和 GAC 一个 COM 互操作 DLL

微星可以完成工作。右键单击“目标机器上的文件系统”,添加,GAC。右键单击添加的文件夹,添加,项目输出。这确保了程序集是 gac-ed。

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

于 2012-07-15T23:42:37.680 回答