OverwriteReadOnlyFiles属性,错误MSB3021

时间:2014-06-16 05:20:02

标签: tfs msbuild tfs2010 tfsbuild

这是我的问题:

错误消息

error MSB3021: Unable to copy file "<filename>" to "<output location>". Access to the path '<output location>' is denied
当MSBuild Copy任务无法覆盖现有的只读文件时,会出现

通常在Team Build中会出现此错误,因为(a)MSBuild中似乎存在一个问题,即同一文件可以多次包含在要复制的文件列表中,并且(b)这些文件通常会在Team Build中是只读的,因为它们是从版本控制中检索的(而不是检出)。该问题的解决方法取决于您正在使用的Team Build(和MSBuild)的版本。

我找到了这个解决方案:

  

Team Build 2008 / MSBuild 3.5
  在MSBuild 3.5中,添加了一个OverwriteReadOnlyFiles属性,该属性可以设置为true,以允许构建过程中涉及的复制任务覆盖此处概述的情况下的只读文件。因此,Team Build 2008 / MSBuild 3.5中可能有第三种解决方法。请注意,此解决方法仅适用于使用3.5版Microsoft.Common.targets的项目 - 由于MSBuild中提供了多目标功能,因此不一定是Team Build 2008构建的每个项目。

     

要将OverwriteReadOnlyFiles属性设置为全局,您可以:

     

添加文字&#34; / p:OverwriteReadOnlyFiles = true&#34;到您的构建定义的TfsBuild.rsp,或   将以下属性组添加到TfsBuild.proj以获取构建定义。

<PropertyGroup>
  <CustomPropertiesForBuild>OverwriteReadOnlyFiles=true</CustomPropertiesForBuild>
</PropertyGroup>

有人可以指导我如何在我的构建中在TFS 2010上实现此解决方案吗?

我不知道在哪里:

TfsBuild.rsp

TfsBuild.proj

找到

以及我如何添加上述建议

1 个答案:

答案 0 :(得分:0)

TFSBuild在TFS 2010中发生了显着变化,它不再基于MSBuild而是基于Workflow。不再有TfsBuild.proj文件。

如果您试图覆盖只读文件,那么您可能正在做一些不符合最佳实践的事情(正如MrHinsh在评论中提到的那样)。如果您确定您正在做的事情是合适的,那么您需要关闭只读标志,或使用能够忽略只读标志的复制方法。