我有一个VS2008部署项目,它为几个Windows服务构建了一个安装程序.
每个服务引用几个不同的项目:
CustomerName.MailSendingService -> CustomerName.Network -> CustomerName.Data -> CustomerName.Security CustomerName.ProductIntegrationService -> CustomerName.Core -> CustomerName.Security
Windows服务项目,它们引用的项目以及部署项目都在同一个VS2008解决方案中.
我在部署项目的文件系统编辑器中添加了Windows服务项目的主要输出.
我的期望是Windows服务项目的主要输出将包括来自引用项目的DLL.但是,在构建部署项目时,缺少其中一个引用项目的DLL.(CustomerName.ProductIntegrationService
缺失CustomerName.Security
)
疯狂地,存在由Windows服务引用的其他项目的DLL; 只缺少一个项目的输出.
(编辑)我已经验证了引用在参考属性窗口中设置为Copy Local.引用项目的DLL放在Windows服务项目的bin\Release
文件夹中,但未打包在为部署项目构建的MSI文件中.
(编辑2)根据Joseph Daigle的建议,我检查了依赖项是在主要输出的依赖项列表中,并且它没有标记为"排除",因此这似乎不是导致此问题的原因.
为什么只丢失一个项目的输出?
在重现相同的可疑msi缺陷后,我还有几件事需要补充.
1)当我向安装程序添加共享相同检测到的依赖项的第二个项目输出时,它没有自动添加依赖项.我删除了两个项目输出并以相反的顺序添加它们.添加的第二个项目输出从未添加检测到的依赖项.这排除了项目的任何配置或代码问题以及如何添加引用.它总是第二个失败.
2)在使用"手动添加检测到的程序集"解决方法后,我的团队确实遇到了第二个问题.最初我们从'\ Program Files\xxx'中的位置添加了依赖项,但在64位计算机上遇到了构建问题,其中相同的依赖项位于'\ Program Files(x86)\ xxx'文件夹中,即使VS足够智能在获取引用时处理此问题.
手动添加程序集的正确方法是导航到bin文件夹并添加本地复制的程序集.这可确保在x86或x64计算机上存在正确的程序集.