C# 由于缺少依赖项,MSBuild clean操作失败
我有一个VisualStudio2010解决方案文件,其中包含许多项目文件。如果我使用C# 由于缺少依赖项,MSBuild clean操作失败,c#,.net,visual-studio-2010,msbuild,cruisecontrol.net,C#,.net,Visual Studio 2010,Msbuild,Cruisecontrol.net,我有一个VisualStudio2010解决方案文件,其中包含许多项目文件。如果我使用devenv清理解决方案,则清理将成功完成。但是,如果我使用MSBuild,由于缺少依赖项,错误MSB3395,其中两个项目文件无法清理。如果我在失败后立即再次运行Clean,则Clean将在没有错误的情况下完成 我们使用MSBuild的构建成功 任务“注销程序集”(任务ID:204) 错误MSB3395:无法注销程序集 “C:\Build\Dir\MyFile.dll”。无法加载文件或文件 程序集“MyOt
devenv
清理解决方案,则清理将成功完成。但是,如果我使用MSBuild,由于缺少依赖项,错误MSB3395
,其中两个项目文件无法清理。如果我在失败后立即再次运行Clean,则Clean将在没有错误的情况下完成
我们使用MSBuild的构建成功
任务“注销程序集”(任务ID:204)
错误MSB3395:无法注销程序集
“C:\Build\Dir\MyFile.dll”。无法加载文件或文件
程序集“MyOtherFile,版本=10.0.0.414,
区域性=中性,PublicKeyToken=266e457ed35afd03'或其
依赖关系。系统找不到指定的文件。
[C:\Build\Dir\ProjFolder\MyFileProj.vbproj]
是的,此程序集是COM互操作程序集,因此生成将注册该程序集。如果我删除了与这两个问题区域相关联的UnmanagedRegistration.cache文件,则清理工作将顺利完成。然而,这些文件并没有被注销,注册表中充满了旧的COM注册。我也不确定对未来构建的影响
我已经在这里阅读了VS2008项目的文章
然而,我不认为这适用于这种情况,因为这个构建过程已经正确地清理和构建了几个月
我还读过:“t-clean-project-with-C-COM-component-dependent-on-other-NET-library.html。在清理受此影响的解决方案之前,我尝试清理两个不同的项目,但这也失败了。e、 g
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文件中,存在具有发布配置条件的属性组。所有这些都包括true
。如果我将这个值设置为false,那么错误就会消失,因为没有任何东西要注销。但是,为了编译我们的vb6
项目,我需要.tlb
文件
那么,如果将其设置为false,然后使用Regasm在生成后注册程序集,并在清理之前取消注册,对我来说有什么问题吗?有人知道为什么MSBuild在成功运行数月后会突然在这个过程中出现问题吗
谢谢
更新
- 如果我使用msbuild清理第一个有问题的项目,则此清理工作正常 成功李>
- 然而,第二个项目未能正确清洁
- 在清理第一个项目ProjA时,它还会删除依赖项 来自其他项目的文件,ProjB李>
- 当我清理第二个有问题的项目ProjC时,它也依赖于ProjB.dll,而这个文件丢失了
-如何防止MSBuild删除其他项目所需的文件?最后,我不得不接受stijn的答案。 我从未找到原因-msbuild clean进程中的某些内容似乎删除了注销程序集所需的文件。 我曾尝试创建一个msbuild任务来首先注销程序集,但也失败了。
最后,我编写了一个Powershell脚本,用于搜索
*.unmanagedregistration.cache
文件的路径。然后,我可以从unmanagedregistration.cache文件中确定.dll文件名,然后一旦代码运行regasm/unregister
,它将删除该文件 只需以管理员身份执行清理即可。如果使用visual studio,请以管理员身份打开它,它应该执行清理操作 这不是互操作程序集。永远不要忽略“或其依赖项之一”这句话。如果它以错误的顺序清理文件,即在尝试注销MyFile.dll之前删除依赖项,则可能会出错。如果您不提供详细的构建跟踪,就无法猜测发生这种情况的原因。不知道发生了什么错误,但您可能会花费(浪费)更少的时间来解决一个解决方案,比如只手动删除项目输出的预清理目标。另请参阅