问题在于,当正常构建和生成项目而没有任何错误时,最终打包的msi缺少通常打包的依赖程序集,如果有人通过visual studio构建项目。所以会发生的情况是应用程序正常安装,然后在运行时崩溃,说xyz dll丢失了。
我可以告诉它要么在构建安装项目之前不刷新依赖关系,要么不能包含所有这些依赖关系。
我们使用devenv和解决方案文件(Rebuild all)构建
有没有人遇到过类似的东西,如果有的话你是怎么解决的?
编辑:CruiseControl正在开发一个不同的机器。此外,我们已经发现这种情况发生在解决方案中引用的项目中。
IE在一个包含3个项目的解决方案中,A是一个库,B是一个引用A和C一个安装项目的应用程序,然后在构建之后发生的事情是B缺少A,尽管构建成功并且生成了msi。答案 0 :(得分:0)
还有另一篇文章看起来像是同一个问题,但我还是无法检查它是否有效。您应该能够包含执行任务来运行为刷新依赖项而创建的宏。
https://stackoverflow.com/questions/45593?sort=votes#sort-top
答案 1 :(得分:0)
当你说它通过Visual Studio手动构建时,你的意思是在同一台机器上吗?如果是这样,那么可能是您的cruisecontrol服务作为不同的用户运行,因此,设置了不同的路径和环境变量,也许它没有权限访问这些依赖项所依赖的文件系统。如果你的意思是它在另一台机器上运行正常,那么我会确保那些依赖项实际存在,并且服务运行的用户有权访问它们。对不起,我们从未遇到过这些问题,所以我只想猜测一些可能存在的CC.NET问题。
答案 2 :(得分:0)
您可以检查构建计算机上GAC中是否缺少dll。
几个月前我遇到了一个问题,即构建服务器生成的安装数比任何开发人员框少一个dll。事实证明,缺少的dll是在构建盒上的GAC中。由于某些未知原因,VS2005认为它不需要包含dll,因为它在GAC中 - 即使我们在项目中专门引用了dll的本地副本。
答案 3 :(得分:0)
这种情况是MSBUILD不支持安装项目的结果。所以我们被迫使用devenv来构建Cruise Control的解决方案。
真正的问题是主应用程序引用了同一解决方案中的项目,虽然这在完整的.NET安装项目中无法重现,但确实在CF安装项目中反复出现。
我们已解决这个问题,方法是更改我们的CF解决方案的体系结构,将1个项目中的所有相关项目作为文件夹,这样只有1个exe生成并与安装项目一起打包。
值得注意的是,在引用其他dll文件时我们没有丢失程序集,但只有当我们引用同一解决方案中存在的库项目时才会这样。
在谷歌搜索这个主题后,我发现了一些关于这个主题的令人不安的细节,这使我发现这个错误和msbuild无法支持安装项目的事实自2005年以来在msdn论坛报告中存在而且不仅仅是。