我正在努力让我们的持续集成服务器(巡航控制.net)与我们的解决方案一起工作。从cruisecontrol我打电话给msbuild来构建解决方案,我遇到了一些问题,让我解释一下解决方案的结构:
4个项目:
项目A是包含所有用户表单等的实际项目。 该项目参考了其他3个项目。
在Visual Studio中编译时,一切当然都有效。 据我所知,MSBuild的工作方式与VS完全不同。
使用msBuilds构建项目A时,出现以下错误:
C:\CI\Project A\Source\Project A\General.vb(859,33): error BC30007: Reference required to assembly 'System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' containing the base class 'System.EnterpriseServices.ServicedComponent'. Add one to your project. [C:\CI\Setra\Source\Project A\Project A.vbproj]]]></message>
有趣的是,项目A根本没有参考上述装配。但是项目A中引用的DLL确实有。
当我使用msbuild编译其他项目(那些生成DLL的项目)时,构建成功。
我觉得它与主项目中引用DLL的方式有关,但我似乎无法弄清楚..
非常感谢任何帮助或建议!!
答案 0 :(得分:1)
This blogpost,尽管年纪不大,应该回答你的问题。还可以找到有关如何解决此问题的更多有用信息here。
通常,MSBuild在直接解析二级,三元等引用时遇到问题。可以找到更新的文章here。我没有测试过这种方法,虽然它看起来非常好并且很容易实现:
将以下代码粘贴到最后一个标记之前的文件中:
<Target Name="AfterResolveReferences">
<!-- Redefine referencepath to add dependencies-->
<ItemGroup>
<ReferencePath Include="@(ReferenceDependencyPaths)"></ReferencePath>
</ItemGroup>
</Target>
答案 1 :(得分:0)
这可能是问题
项目A是包含所有用户表单等的实际项目。 它有引用由其他项目创建的3个DLL 。
在解决方案资源管理器中,右键单击“引用”并添加新的“引用”。 不要在Assemblies下浏览依赖项,而是转到Projects,Solution,选择DataAccess,BusinessLayer和BusinessEntity项目。
现在删除文件参考&amp;保存项目文件。重建时,msbuild将检测这些ProjectReference依赖项