部署项目中缺少项目依赖项

时间:2020-03-06 14:44:07  来源:igfitidea点击:

我有一个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。仅缺少一个项目的输出。

(编辑)我已经验证参考在参考属性窗口中已设置为"本地复制"。引用项目的DLL放置在Windows服务项目的bin \ Release文件夹中,但没有打包在为部署项目构建的MSI文件中。

(编辑2)按照Joseph Daigle的建议,我检查了依赖项是否在主要输出的依赖项列表中,并且未将其标记为"已排除",因此这似乎不是造成此问题的原因。

为什么只有一个项目的输出会丢失?

解决方案

我尚未使用Visual Studio 2008,但是在2005年,我们必须验证项目上缺少的引用是否将"复制本地"属性设置为true。

这会将丢失的文件复制到输出目录。

除了hectorsq的响应之外,还要验证依赖关系是否在部署项目依赖项列表中,以及是否有问题的DLL被标记为包括在内。

我们是否尝试过在反射器中查看dll,以查看它是否确实取决于其他dll?如果VS可以看到我们实际上并没有使用它,则它足够聪明以至于不包含引用的程序集。

除此之外,即使我们"认为"我们正在使用它,VS也可以优化使用,这是一个极限情况,但我已经看到了:

例如,如果我们有一个"常量"程序集,其中包含以下内容:

public const string LockPanelUrn = "ApplicationRack.LockPanel";

VS会将字符串直接粘贴在引用代码中。

除此之外,我建议删除并重建安装解决方案。

在最初创建部署项目之后,是否添加了此程序集依赖项?如果是这样,则可能需要右键单击"检测到的依赖关系"文件夹,然后选择"刷新依赖关系"。它将拾取自上次执行此操作以来添加的所有新内容。

我也可以验证这对我们也是一个问题。我怀疑这是部署项目中的错误,它仅在一个位置添加了相关项目的输出(也许它认为这是一个COM dll?)

手动添加缺少的dll的主要输出似乎是一个可行的解决方法。

检查一下,也许这不能解释为什么,但是至少它提供了一些解决方法:)

http://lo-sharpdevs.blogspot.com/2009/07/vs-2008-disappearing-dependencies.html

重现相同的可疑msi缺陷后,我还需要添加其他内容。

1)当我向共享安装程序添加了共享相同检测到的依赖项的第二个项目输出时,它没有自动添加依赖项。我删除了两个项目的输出,并以相反的顺序将它们添加回去。添加的第二个项目输出从不添加检测到的依赖项。这排除了项目的任何配置或者代码问题以及如何添加引用。它始终是第二个失败的对象。

2)在使用"手动添加检测到的程序集"解决方法后,我的团队实际上遇到了第二个问题。最初,我们从" \ Program Files \ xxx"中的位置添加了依赖项,但是在VS足够智能的情况下,在64位计算机上的" \ Program Files(x86)\ xxx"文件夹中存在相同的依赖项时遇到了构建问题处理引用时处理此问题。

  • 手动添加程序集的正确方法是导航至bin文件夹,然后添加在本地复制的程序集。这样可以确保在x86或者x64机器上安装正确的程序集。