团队构建,复制文件目标问题

时间:2009-01-16 09:57:43

标签: tfs copy team-build targets

我有这个团队在编译后构建目标设置

  <Target Name="AfterCompile">
    <Copy SourceFiles="$(SolutionRoot)\Development_VS2008\MyCompanyName.SharePoint.12" DestinationFolder="c:\testing"></Copy>
  </Target>

我希望将文件夹结构从源复制到目标...

令人惊讶的是我收到了这个错误

  

无法复制文件“C:\ TFS \ NightlyBuild \ Sources \ Development_VS2008 \ MyCompanyName.SharePoint.12 \”     到目标文件“c:\ testing \”,因为目标是文件夹而不是文件。     要将源文件复制到文件夹,请考虑使用DestinationFolder参数而不是DestinationFiles。

正如您所看到我确实使用了destinationfolder参数,是否有人知道我做错了什么?

6 个答案:

答案 0 :(得分:5)

我认为可能只是因为SourceFiles是一个目录而不是您要复制的文件。试试这个:

<Target Name="AfterCompile">
    <ItemGroup>
        <FilesToCopy Include="$(SolutionRoot)\Development_VS2008\MyCompanyName.SharePoint.12\**\*.*"/>
    </ItemGroup>

    <Copy SourceFiles="@(FilesToCopy)" DestinationFolder="c:\testing\%(RecursiveDir)"/>
</Target>

答案 1 :(得分:2)

你需要这样的东西:

<CreateItem Include="someFolder\**\*.*">

    <Output ItemName="files" TaskParameter="Include" />

</CreateItem>

<Copy SourceFiles="@(files)" DestinationFiles="@(files->'C:\folder\%(relativedir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />

或者我发现最简单的方法(如果你想对包含/排除的内容更加严格)是我编写的一些自定义MSBuild任务:http://www.aaron-powell.com/blog.aspx?cat=AaronPowell.MSBuild.Tasks

您提供源目录,目标方向(提供对网络共享的支持)和要排除的文件名/扩展名。

这主要是因为Team Build在运行时会造成一个真正的混乱(特别是对于Web应用程序)并且实际上不可能使用标准的MSBuild复制任务。

答案 2 :(得分:1)

此错误发生在我身上,而不是在Team Foundation项目下发生,而是在我个人下发生,当我使用构建操作ContentWithTargetPath添加新的.dll文件时。我希望该库包含在我的输出目录中。该操作的记录显示在.csproj文件的ItemGroup部分之一中,例如:

println getClasspath().any { println it }

但是由于某种原因,这不足以使ContentWithTargetPath选项正常工作(我在StackOverflow的某处看到了有关它的解释,但不记得在哪里了)。您应该像这样手动将TargetPath子部分添加到ContentWithTargetPath:

<ContentWithTargetPath Include="Resources\Libraries\libName.dll">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</ContentWithTargetPath>

在Visual Studio中编辑.csproj文件时,IntelliSense不会显示TargetPath子节,并且它也不会出现在libName.dll的属性窗口中,因此您应该手动添加此子节。即使在我的Visual Studio Community 2017中,也会出现这种情况。

PS。您可以在Visual Studio中编辑.csproj文件-卸载此项目,然后选择“编辑YourProjectName.csproj”选项(在卸载的项目上单击鼠标右键)。编辑并保存.csproj文件,然后重新加载项目。

答案 3 :(得分:0)

我们遇到了很多postbuild xcopy命令的问题。我们决定避免使用xcopy命令。

我们现在将文件(我们要复制的文件)包含到项目中,我们将copy local属性设置为“Copy if newer”和目标目录(目录结构在项目中必须相同)

它有很大帮助 也许它也适合你的情况。

答案 4 :(得分:0)

复制任务显然不支持复制目录(因为它基于'复制'),并且由于源中的长文件名(> 256个字符),xcopy有时会失败。

我做了这个(使用robocopy): <Exec WorkingDirectory="$(MSBuildProjectDirectory)" Command='robocopy $(MSBuildProjectDirectory)\Main $(DropLocation) /S /COPY:DATS /NP /NFL /NDL /v' ContinueOnError="true" />

答案 5 :(得分:0)

我有完全相同的信息:

错误103无法将文件“obj \ Release \ xxxx.dll”复制到目标文件“bin \ Release \ xxxx.dll”,因为目标是文件夹而不是文件。要将源文件复制到文件夹,请考虑使用DestinationFolder参数而不是DestinationFiles。 XXXX

它发生了(我不知道为什么)我在release文件夹中有另一个文件夹具有相同的程序集名称(包括扩展名),因此Visual Studio无法在那里创建程序集。它不是项目或解决方案中的配置,所以我只删除了文件夹(我不知道它是如何创建的)并且它有效。