TFSBuild 2010:文件.复制c#代码段在编译后抛出异常

本文关键字:编译 抛出异常 代码 2010 文件 复制 TFSBuild | 更新日期: 2023-09-27 18:15:56

使用TFS Build 2010,我为几个项目运行了devenv.com的构建过程。之后,我希望所有的二进制文件从输出文件夹中复制c#自定义构建活动与"File.Copy"。然而,它在文件的第一个副本中给我抛出了这个异常:

The process cannot access the file 'C:'Test'BuildServer'Sources'Library'LibraryInstall'LibraryInstall'Release'LibraryInstall.msm' because it is being used by another process.

这个文件似乎还在被devenv.com使用。知道怎么做吗?除了文件。拷贝,有没有更好的方法来拷贝它而不管文件的状态?

= = = = = =

我发现了一个丑陋的方法:

Process proc = new Process();
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.FileName = @"C:'WINDOWS'system32'xcopy.exe";
proc.StartInfo.Arguments = "/Y " + Path.Combine(sourcesDirectory, fileName) + " " + binariesDirectory;
proc.Start();

TFSBuild 2010:文件.复制c#代码段在编译后抛出异常

devvenv是一个激进的文件锁。如果你可以通过创建MSBuild文件而绕过devv来构建你的项目,你会更好。有些项目类型只能用devenv来构建,但是你没有指定你要使用的项目类型,所以这可能不是一个选项。

MSBuild有一个称为"节点重用"的特性,它创建的进程可以挂起长达15分钟,作为后续构建的优化。可能是节点重用和devenv的文件锁定行为相结合给您带来了麻烦。

你还没有弄清楚你是如何执行你的构建,但如果MSBuild涉及,你可以尝试指定/nodereuse:false选项来禁用此功能。

我也见过流氓MSBuild和devenv进程挂在文件上,如果在你的构建中有模糊的异常,它们可以被挂起并永远留在周围,直到你杀死它们。

我很少有业余爱好。不要在我的回答上加减号=)

首先,看看这个答案,稍微改变一下你的算法

  • 您可以创建批处理文件,其中包含相同的丑陋方法它。然后从c#
  • 调用这个批处理文件也许你可以使用FileStream..二进制读写
  • 也许你可以导入vb参考到你的项目和使用(无意义))
  • 或者直接终止与此错误相关的进程。

这是另一个搜索,请也看看这个问题。

这是最后一次,也是最后一次。

问好…