Msbuild 何时使用<;项目参考>;在项目文件中?

Msbuild 何时使用<;项目参考>;在项目文件中?,msbuild,dependencies,projects-and-solutions,Msbuild,Dependencies,Projects And Solutions,摘要: 项目使用VisualStudio和托管C++和C语言项目错误地建立 说明: 我有一个庞大的(100多个项目)解决方案文件,它以错误的顺序构建了几个项目。解决方案文件包含以下类型的项目: 本地C/C++ 托管C++ 托管C# 该解决方案包含不同类型项目之间的所有适当依赖关系。好的,当我从命令行(使用MSBuild)构建时,出现了一个问题。托管项目的依赖关系(C++和C)都按错误顺序建立。例如,由于缺少托管依赖项,项目将无法生成。例如,托管C++文件将有一个使用失败的声明: #using

摘要:

项目使用VisualStudio和托管C++和C语言项目

错误地建立 说明:

我有一个庞大的(100多个项目)解决方案文件,它以错误的顺序构建了几个项目。解决方案文件包含以下类型的项目:

  • 本地C/C++
  • 托管C++
  • 托管C#
该解决方案包含不同类型项目之间的所有适当依赖关系。好的,当我从命令行(使用MSBuild)构建时,出现了一个问题。托管项目的依赖关系(C++和C)都按错误顺序建立。例如,由于缺少托管依赖项,项目将无法生成。例如,托管C++文件将有一个使用失败的声明:

#using <foo.dll>
因此,解决方案文件正确地具有依赖性。但是Foo.vcxproj项目中的依赖关系仅由#using指令表示。 我在VisualStudio博客上读到,在msbuild中排序项目时存在一个已知的错误。

他们的工作是将一个名为“我的项目”的项目添加到我的项目中,如下所示:

<ProjectReference Include="... foo.csproj"> 
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly> 
</ProjectReference>

假的
<> P> >强>我的问题是>:我只需要为我的托管C++项目做这个吗?或者我是为管理C++和C语言项目做这件事的? (我有点相信我不需要为C#项目这样做,因为它们的依赖关系是明确的)

注意:我已经尝试在我的构建中的所有项目上使用它,但它并没有那么好用,因为我在我的原生项目中遇到了很多奇怪的构建错误


感谢您对此的回复。

我也有同样的问题,但仅限于C#projects。 MsBuild似乎没有使用解决方案文件依赖项。它使用项目文件中的项目引用来创建生成顺序。尝试更新所有项目引用以获得正确的生成顺序。在您的情况下,您必须在C++项目文件中添加托管项目引用(依赖项)。
你的问题的答案是:是的,你必须同时为托管C++和C语言项目做这件事。如果使用MSBuild生成,则仅在sln文件中设置依赖项是不够的。

我发现,如果添加ProjectReference元素以链接到本机库,则在MSBuild脚本的深层生成错误。因此,我已经开始为我的所有管理C++项目添加一个投影到其他.cPROJ文件。现在我将把它们添加到我的.csproj文件中,看看它是如何运行的。
<ProjectReference Include="... foo.csproj"> 
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly> 
</ProjectReference>