在依赖项目尝试使用MSBuild链接发布配置之前,未构建Visual Studio 2019 C ++参考项目

问题描述 投票:0回答:1

我有一个包含C ++和C#项目的解决方案,该解决方案是在远程计算机上的夜间CI中构建的。构建脚本签出源的干净副本,并使用MSBuild构建解决方案的调试和发布配置,并在每个配置上运行测试套件。

关于其他所有版本,发行版本配置均无法正确构建。对构建日志的分析表明,依赖于C ++ Project D的C ++ Project Q会在完成Project D之前尝试链接。此错误仅在此特定构建计算机上的release配置中发生-调试配置生成无错误。我有一个单独的每晚构建过程,该过程在单独的计算机上运行,​​在该机器上,发布配置是使用使用MSBuild的类似脚本构建的(它只是不运行测试套件),并且可以毫无问题地构建相同的源版本。多个团队成员构建解决方案时不会出现问题,无论是使用一种还是两种配置进行更新或干净签出(总是从Visual Studio 2019 IDE在各种操作系统上进行)。

[Project Q被配置为使用Project D作为项目参考,并且Project D也被列为Project Q的硬依赖性。如前所述,构建脚本正在使用MSBuild。

从发布和调试构建日志的分析中得到的另一个令人感兴趣的项目:在两个配置构建之间以不同的方式启动Project D的构建。它是由其自己的元项目在发行版配置中启动的(例如,作为项目60),但较早地(例如,作为项目44的)由调试配置中的另一个项目启动。由于构建的解决方案和工作源是相同的,因此不确定在两种情况下依赖算法为什么会以不同的结果运行。

任何想法或建议将不胜感激。

Update:检查发行和调试构建日志之间的差异揭示了一些有趣的事实。在失败的情况下,我在每个日志中搜索“)正在构建”-应该表明已构建了多少项目,包括metaproj条目。对于失败情况,调试发生282次,而发布则有175次。对于成功案例,调试发生了280次,而发布则高达559次!对“完成的建筑项目”的类似搜索将产生相似的结果,但结果相差1或2。这可能部分解释了解决方案之间的构建顺序差异。我还需要检查条件构建条目。

c++ visual-studio msbuild visual-studio-2019 project-reference
1个回答
0
投票

Visual Studio 2019参考项目未在依赖之前构建 使用MSBuild在发布配置中尝试链接项目

似乎项目的投标顺序被破坏,并且项目D的构建晚于需要[[项目D的输出内容的项目Q,所以整个构建失败了。

不确定是否使用

Project Dependency

(在项目上单击鼠标右键-> Build Dependencies-> Project Dependencies),如果这样,则只有VS IDE Build才能在MSBuild命令行中识别其构建顺序将会失去他们之间的关系。

Besides

,我想知道发布模式下的主项目是否引用发布模式下的依赖项项目。如果您做了这些,构建肯定会出错。以上所有这些是我认为您对项目进行了一些更改。

您可以按照以下步骤操作:

1]

我建议您尝试使用Project Reference,它将在ProjectQ.csproj文件中添加这些xml节点以强烈指定构建关系:<ItemGroup> <ProjectReference Include="..\ProjectD\ProjectD.csproj"> <Project>{26c26cdd-a5e0-40c7-b0c9-4563f969424f}</Project> <Name>ProjectD</Name> </ProjectReference> </ItemGroup>

Also

,当引用这样的项目时,请检查是否有任何条件可以区分“调试”或“发布”模式:<ProjectReference Include="..\ProjectD\ProjectD.csproj" Condition="'$(Configuration)'=='Debug'">
如果是这样,请删除该条件Condition="'$(Configuration)'=='Debug'",以确保在调试和发布模式之间相同。

[2)

关闭VS实例,删除解决方案文件夹下的.vs隐藏文件夹。

3)

检查CI构建和云构建服务器,并确保云参数与其他服务器一致。并检查您的xxx.csproj文件中的任何一个,以检查是否还有其他导致此行为的操作。

另外

,如有必要,您可以与我们共享您的xxx.csproj文件和构建脚本来进行故障排除。
© www.soinside.com 2019 - 2024. All rights reserved.