【发布时间】:2016-02-13 05:54:08
【问题描述】:
作为自动构建的一部分,我清除了一个目录,并将最新版本的源文件复制到该目录。首先,我设置了我希望复制的文件列表:
<CreateItem
Include="\\BuildServer\Build_Temp\SomeRootDirectory\**\*">
<Output
TaskParameter ="Include"
ItemName ="FilesToCopy"/>
</CreateItem>
并让我的系统知道我的 QA 服务器的位置:
<CreateProperty
Value="\\QAWebServer\Websites\MySite">
<Output
TaskParameter="Value"
PropertyName ="MyDropLocation"/>
</CreateProperty>
然后,我在目标服务器上删除并重新创建我的目录以清除所有文件(这是一个焦土构建,以确保我们不会意外将不属于源代码控制的文件留在我们的 Web 目录中)。
<RemoveDir Directories="\\QAWebServer\Websites\MySite" />
<MakeDir Directories="\\QAWebServer\Websites\MySite" />
最后,我执行了一个复制任务:
<Copy
SourceFiles="@(FilesToCopy)"
DestinationFiles="@(FilesToCopy->'$(MyDropLocation)\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="True"/>
然后,当它尝试复制文件时,我得到了结果错误。有趣的是,有些成功,有些没有(在这种情况下,它看起来几乎完全位于我刚刚在上面创建的目录的根目录中):
C:\Build_Temp\QABuild\BuildType\TFSBuild.proj(690,3): error MSB3021: Unable to copy file "\\BuildServer\Build_Temp\SomeRootDirectory\Import.swf" to "\\QAWebServer\Websites\MySite\Import.swf". Access to the path '\\QAWebServer\Websites\MySite\Import.swf' is denied.
C:\Build_Temp\QABuild\BuildType\TFSBuild.proj(690,3): error MSB3021: Unable to copy file "\\BuildServer\Build_Temp\SomeRootDirectory\Incomplete.swf" to "\\QAWebServer\Websites\MySite\Incomplete.swf". Access to the path '\\QAWebServer\Websites\MySite\Incomplete.swf' is denied.
C:\Build_Temp\QABuild\BuildType\TFSBuild.proj(690,3): error MSB3021: Unable to copy file "\\BuildServer\Build_Temp\SomeRootDirectory\Index.html" to "\\QAWebServer\Websites\MySite\Index.html". Access to the path '\\QAWebServer\Websites\MySite\Index.html' is denied.
我已经验证了对文件系统的访问权限(每个人都可以访问创建/修改/等),并且将文件添加到 \QAWebServer\Websites\MySite 上的子目录结构没有问题,只是(主要)根。
【问题讨论】:
-
附注:在最新版本的 MSBuild 中,您不再需要使用
CreateProperty- 您可以使用更简洁的语法编写PropertyGroup以获得相同的结果。