我遇到了我认为最初描述的问题。我有一个 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 地狱”问题。我强烈建议将它用于您的通用代码。