MSBuild删除一个库文件,破坏构建.Visual Studio工作得很好



我有这样的项目依赖关系:

Main -> A, Common
A -> B, Common

与构建顺序:

Common
B
A
Main

该解决方案在Visual Studio 2019中构建良好。但是在MSBuild中,它构建Common.lib,B.lib,A.lib…然后删除Common.lib,然后尝试(和失败)构建Main.exe

我试过改变Common.lib的输出目录,但每次MSBuild都会在新的位置构建它,然后在A.lib构建后删除它。它不会删除A.libB.lib,即使它们与Common.lib在相同的目录中。我也有另一个解决方案与不同的主项目具有相同的依赖关系(A,BCommon),但MSBuild在这方面工作得很好。

有什么想法从哪里开始解决这个问题吗?

所有的项目都是在c++与MFC在一个静态库,使用多字节字符集(解决方案是从VC2005升级)。我从命令行(cmd.exe)运行MSBuild。版本号:

Visual Studio 16.8.5 
MSBuild 16.8.3.61104
更新:

使用-verbosity:diag作为@dxiv建议的构建日志现在在最后给出了这个构建层次结构。(我已经重新命名了项目以匹配上面的名称)

============================== Build Hierarchy (IDs represent configurations) =====================================================
Id                  : Exclusive Time   Total Time   Path (Targets)
-----------------------------------------------------------------------------------------------------------------------------------
0                   : 0.429s           105.369s     D:releasestemp_srcMain.sln (rebuild) 
. 1                 : 0.270s           104.941s     D:releasestemp_srcMain.vcxproj.metaproj (Rebuild) 
| | 2               : 6.218s           31.257s      D:releasestemp_srcAA.vcxproj (Rebuild) 
| | | 3             : 1.600s           1.600s       D:releasestemp_srcBB.vcxproj (Clean) 
| | | 4             : 0.764s           0.764s       D:releasestemp_srcCommonCommon.vcxproj (Clean) 
| | | 5             : 2.184s           2.184s       D:releasestemp_srcBB.vcxproj () 
| | | 6             : 2.507s           2.507s       D:releasestemp_srcCommonCommon.vcxproj () 
| | | 7             : 0.536s           0.536s       D:releasestemp_srcBB.vcxproj (GetNativeManifest) 
| | | 8             : 0.643s           0.643s       D:releasestemp_srcCommonCommon.vcxproj (GetNativeManifest) 
| | | 9             : 0.585s           0.585s       D:releasestemp_srcBB.vcxproj (GetProjectInfoForReference) 
| | | 10            : 0.668s           0.668s       D:releasestemp_srcCommonCommon.vcxproj (GetProjectInfoForReference) 
| | . 11            : 0.549s           0.549s       D:releasestemp_srcCommonCommon.vcxproj (GetCopyToOutputDirectoryItems) 
| . 12              : 5.923s           10.062s      D:releasestemp_srcMain.vcxproj (Rebuild) 
| | | 13            : 0.696s           0.696s       D:releasestemp_srcCommonCommon.vcxproj (Clean) 
| | | 14            : 1.845s           1.845s       D:releasestemp_srcAA.vcxproj (GetNativeManifest) 
| | | 15            : 0.969s           0.969s       D:releasestemp_srcAA.vcxproj (GetProjectInfoForReference) 
| | . 16            : 0.629s           0.629s       D:releasestemp_srcCommonCommon.vcxproj (GetProjectInfoForReference) 

ID 13显示Common.vcxprojMain开始重建时被清理;这似乎是删除Common.lib的操作。什么可能导致它执行这种清理?

您应该注意到构建有一个顺序:Common—>B—> a—>Main

主要如果项目有一个错误,它不会停止AB因为它们没有错误。

,如果底部项目Common有一个错误,当它会中断整个重建过程,删除AMain项目输出文件。

,当您尝试更改四个项目的外部目录时,您应该右键单击每个项目Properties——在一般——在输出目录或者只是修改vcxproj文件的每个outdir属性。当您重新构建它时,它将删除旧的位置输出文件,然后重新构建。

在我这边,当我运行msbuild xxxxxx.sln -t:clean时,它删除了所有旧的以前的输出文件。

如果不是,我认为你现在的项目有问题。请尝试以下步骤:

1)删除这些项目的任何项目引用,然后右键单击Reference—>Re-add project Reference

2)重新修改每个vcxproj文件下的outdir属性,然后使其值相同。

3)删除.vs隐藏文件夹和这四个项目的所有输出文件夹。

4)相反,运行msbuild xxxxxx.sln -t:rebuild来构建您的解决方案。

除了>,如果我的回答没有达到你的要求,请让你的问题更清楚,并使用更多的图片,....更详细地描述你的问题。

相关内容

  • 没有找到相关文章

最新更新