我有一个包含多个项目文件的Visual Studio 2010解决方案文件。如果我使用
我们使用MSBuild构建成功了。
我已经阅读了这里的VS2008项目文章https://blogs.msdn.microsoft.com/visualstudio/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe/。然而,我认为这种情况不适用,因为这个构建过程已经清理和构建了几个月。
我也阅读了https://www.experts-exchange.com/questions/26259422/msbuild-can't-clean-project-with-C-COM-component-dependant-on-other-NET-library.html。我尝试在清理受此影响的解决方案之前清理两个不同的项目,但这也失败了,例如:
我尝试回退到问题出现之前的一个SVN版本,但仍然遇到了相同的错误。我的构建机器在虚拟机上,我甚至尝试将构建机器还原到出现问题之前的快照,但错误仍会出现。
我已经这样做了两个星期,我的唯一选择是使用devenv清理解决方案,但速度非常慢。我目前唯一的想法是,在使用msbuild时,对于干净的COM接口依赖关系处理不正确,但我不知道如何解决这个问题。
我可以使用VS2010 CMD提示重现此问题。以下是我使用的示例cmd行:
在vbproj文件中,有一些带有Release配置条件的PropertyGroups。所有这些都包含
那么,如果我将其设置为false,然后在构建后使用Regasm注册程序集,并在清理之前取消注册,是否会出现问题?有人有任何想法,为什么MSBuild在几个月内成功运行构建过程的情况下,突然出现了这个问题吗?
谢谢。
更新:
- 如果我使用msbuild来清理第一个问题项目,则此清理将成功。 - 然而,第二个项目无法正确清理。 - 在清理第一个项目ProjA时,它还会从其他项目ProjB中删除依赖文件。 - 当我清理第二个问题项目ProjC时,它也依赖于ProjB.dll,但是该文件丢失了。
问题:如何使MSBuild不要删除其他项目所需的文件?
devenv
清理解决方案,那么清理将成功完成;然而,如果我使用MSBuild,则由于缺少依赖项,其中两个项目文件无法清理,出现error MSB3395
。如果我在失败后立即再次运行Clean,那么清理就会成功完成,没有错误。我们使用MSBuild构建成功了。
是的,这个程序集是COM互操作程序集,因此构建会注册程序集。如果我删除与两个问题区域相关联的UnmanagedRegistration.cache文件,则清理过程将顺利完成。但是,这些文件没有被注销,注册表中充满了旧的COM注册。我也不确定对未来的构建会产生什么影响。任务“UnregisterAssembly”(TaskId:204)...
...
错误MSB3395:无法注销程序集“C:\Build\Dir\MyFile.dll”。无法加载文件或程序集“MyOtherFile,Version=10.0.0.414,Culture=neutral,PublicKeyToken=266e457ed35afd03”或其某个依赖项。系统找不到指定的文件。[C:\Build\Dir\ProjFolder\MyFileProj.vbproj]
我已经阅读了这里的VS2008项目文章https://blogs.msdn.microsoft.com/visualstudio/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe/。然而,我认为这种情况不适用,因为这个构建过程已经清理和构建了几个月。
我也阅读了https://www.experts-exchange.com/questions/26259422/msbuild-can't-clean-project-with-C-COM-component-dependant-on-other-NET-library.html。我尝试在清理受此影响的解决方案之前清理两个不同的项目,但这也失败了,例如:
msbuild ".\ProjDir\MyProj.csproj" /t:clean /p:configuration=Release /fl /flp:logfile=".\..\LogFiles\msbuildClean.log";verbosity=diagnostic
我尝试回退到问题出现之前的一个SVN版本,但仍然遇到了相同的错误。我的构建机器在虚拟机上,我甚至尝试将构建机器还原到出现问题之前的快照,但错误仍会出现。
我已经这样做了两个星期,我的唯一选择是使用devenv清理解决方案,但速度非常慢。我目前唯一的想法是,在使用msbuild时,对于干净的COM接口依赖关系处理不正确,但我不知道如何解决这个问题。
我可以使用VS2010 CMD提示重现此问题。以下是我使用的示例cmd行:
msbuild "A Solution.sln" /t:clean /p:Configuration=Release /fl /flp:logfile=".\..\LogFiles\msbuildClean.log";verbosity=diagnostic
msbuild "A Solution.sln" /t:build /p:Configuration=Release /fl /flp:logFile=".\..\LogFiles\msbuildBuild.log";verbosity=diagnostic
在vbproj文件中,有一些带有Release配置条件的PropertyGroups。所有这些都包含
<RegisterForComInterop>true</RegisterForComInterop>
。如果我将此值设置为false,则错误会消失,因为没有任何东西需要取消注册。然而,我需要.tlb
文件才能编译我们的vb6
项目。那么,如果我将其设置为false,然后在构建后使用Regasm注册程序集,并在清理之前取消注册,是否会出现问题?有人有任何想法,为什么MSBuild在几个月内成功运行构建过程的情况下,突然出现了这个问题吗?
谢谢。
更新:
- 如果我使用msbuild来清理第一个问题项目,则此清理将成功。 - 然而,第二个项目无法正确清理。 - 在清理第一个项目ProjA时,它还会从其他项目ProjB中删除依赖文件。 - 当我清理第二个问题项目ProjC时,它也依赖于ProjB.dll,但是该文件丢失了。
问题:如何使MSBuild不要删除其他项目所需的文件?