Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 由于缺少依赖项,MSBuild clean操作失败_C#_.net_Visual Studio 2010_Msbuild_Cruisecontrol.net - Fatal编程技术网

C# 由于缺少依赖项,MSBuild clean操作失败

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

我有一个VisualStudio2010解决方案文件,其中包含许多项目文件。如果我使用
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之前删除依赖项,则可能会出错。如果您不提供详细的构建跟踪,就无法猜测发生这种情况的原因。不知道发生了什么错误,但您可能会花费(浪费)更少的时间来解决一个解决方案,比如只手动删除项目输出的预清理目标。另请参阅