C J*_*son 6 msbuild dependencies projects-and-solutions
摘要:
使用visual studio和托管C++和C#项目,项目构建错误
描述:
我有一个庞大的(100多个项目)解决方案文件,正在以错误的顺序构建一些项目.解决方案文件包含以下类型的项目:
该解决方案包含不同类型项目之间的所有适当依赖关系.好吧,所以当我从命令行(使用MSBuild)构建时,存在问题.托管项目(包括C++和C#)的依赖关系以错误的顺序构建.例如,项目将无法构建,因为缺少托管依赖项.例如,托管C++文件将具有失败的using声明:
#using <foo.dll>
Run Code Online (Sandbox Code Playgroud)
因为foo.dll还不存在.
这意味着之前应该构建foo.dll,但事实并非如此.就像我之前提到的,依赖关系在解决方案文件中正确设置.例如,如果foo依赖于baz,我在解决方案文件中有这个...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}"
ProjectSection(ProjectDependencies) = postProject
...
{2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3}
EndProjectSection
EndProject
...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}"
ProjectSection(ProjectDependencies) = postProject
...
EndProjectSection
EndProject
Run Code Online (Sandbox Code Playgroud)
因此,解决方案文件正确具有依赖性.但是Foo.vcxproj项目中的依赖性仅由#using指令表示.我在视觉工作室博客上看到,在msbuild中订购项目时存在一个已知的错误. http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx
他们的工作是添加一个调用我的项目的项目,如下所示:
<ProjectReference Include="... foo.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
Run Code Online (Sandbox Code Playgroud)
无论如何,我的问题是:我是否只需要为我的托管C++项目执行此操作?或者我是否为托管C++和C#项目执行此操作?(我相信我不需要为C#项目执行此操作,因为它们的依赖关系是明确的)
注意:我已经尝试将它放在我的构建中的所有项目中,并且它没有那么热,因为我在本机项目中遇到了很多奇怪的构建错误...
感谢您对此的任何回应.
我也遇到了同样的问题,但仅限于 C# 项目。MsBuild 似乎没有使用解决方案文件依赖项。它使用项目文件内的项目引用来创建构建顺序。尝试更新所有 ProjectReferences 以获得正确的构建顺序。在您的情况下,您必须将托管项目引用(依赖项)添加到您的 C++ 项目文件中。
您的问题的答案是:是的,您必须为托管 C++ 和 C# 项目执行此操作。如果您使用 MSBuild 进行构建,在 sln 文件中设置依赖项是不够的。
| 归档时间: |
|
| 查看次数: |
13517 次 |
| 最近记录: |