2014-06-16 45 views
1

這是有問題IM:OverwriteReadOnlyFiles財產,錯誤MSB3021

錯誤消息

error MSB3021: Unable to copy file "<filename>" to "<output location>". Access to the path '<output location>' is denied 

時發生的MSBuild複製任務不能覆蓋現有隻讀文件。

通常在Team Build中會出現此錯誤,因爲(a)MSBuild中似乎存在一個問題,即同一個文件可能會多次包含在要複製的文件列表中;(b)這些文件將通常在Team Build中是隻讀的,因爲它們是從版本控制中檢索的(並且未檢出)。問題的解決方法取決於您正在使用的Team Build(和MSBuild)的版本。

,我發現這個解決方案:

團隊建設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屬性爲true,您可以:

文本「/ p:OverwriteReadOnlyFiles =真正的」添加到TfsBuild.rsp爲您構建定義,或 以下屬性組添加到TfsBuild.proj爲您的構建定義。

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

有人可以指導我如何實現我的建立在TFS 2010這個解決方案?

我不知道在哪裏:

TfsBuild.rsp

TfsBuild.proj

所在,以及如何我可以添加所提到的建議

+0

爲什麼需要在源代碼控制下覆蓋文件作爲構建的一部分?對我來說,這是一種嗅覺,有些東西不是很寫... –

回答

0

TFSBuild改變在TFS 2010中顯着,它不再是基於MSBuild的,而是基於工作流的。不再有一個TfsBuild.proj文件。

如果您試圖覆蓋只讀文件,您可能正在做一些不符合最佳實踐的內容(正如MrHinsh在評論中提到的那樣)。如果你確定你正在做的是合適的,那麼你需要關閉只讀標誌,或者使用能夠忽略只讀標誌的複製方法。