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

Tfs 团队构建,复制文件目标问题,tfs,copy,tfsbuild,targets,Tfs,Copy,Tfsbuild,Targets,我让这个团队在编译后构建目标设置 <Target Name="AfterCompile"> <Copy SourceFiles="$(SolutionRoot)\Development_VS2008\MyCompanyName.SharePoint.12" DestinationFolder="c:\testing"></Copy> </Target> 我想将文件夹结构从源复制到目标 令人惊讶的是,我得到了这个错误 无法复制文

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

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

我想将文件夹结构从源复制到目标

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

无法复制文件“C:\TFS\NightlyBuild\Sources\Development\U VS2008\MyCompanyName.SharePoint.12” 发送到目标文件“c:\testing\”,因为目标是文件夹而不是文件。 若要将源文件复制到文件夹中,请考虑使用StestInFrutsCULL参数代替DestialFrase.< /P>
正如您所看到的,我确实在使用destinationfolder参数,有人知道我做错了什么吗?

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

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

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

我们在后期构建xcopy命令方面遇到了很多问题。我们决定避免使用xcopy命令

现在,我们将文件(要复制的文件)包含到项目中,并将“复制本地”属性设置为“如果较新,则复制”,目标目录(项目中的目录结构必须相同)

这很有帮助。

也许它也适合你的情况。

你需要这样的东西:

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

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

</CreateItem>

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

或者,我发现最简单的方法(如果您想对要包含/排除的内容更严格一点)是使用我编写的一些自定义MSBuild任务:

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


这主要是因为Team Build在运行时会造成混乱(尤其是web应用程序),并且不可能真正使用标准的MSBuild复制任务。

复制任务显然不支持复制目录(因为它基于“复制”),xcopy有时会因源文件名过长(>256个字符)而失败

我(用robocopy)做到了这一点:

我得到了完全相同的信息:

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


碰巧(我不知道为什么)我在发布文件夹中有另一个与程序集同名的文件夹(包括扩展名),因此Visual Studio无法在那里创建程序集。它不是项目或解决方案中的配置,所以我刚刚删除了文件夹(我不知道它是如何创建的),它工作了。

这个错误发生在我不在Team Foundation项目下,而是独立的一个,并且当我添加了具有Buffic Action的Talk PATH的新DLL文件时。我希望这个库包含在我的输出目录中。此操作的记录显示在.csproj文件的一个ItemGroup部分中,如下所示:

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

保存最新
但由于某些原因,这还不足以让ContentWithTargetPath选项正常工作(我在StackOverflow的某个地方看到了关于它的解释,但不记得在哪里)。您应该手动将TargetPath子部分添加到ContentWithTargetPath,如下所示:

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

保存最新
libName.dll
IntelliSense在Visual Studio中编辑.csproj文件时不会显示TargetPath子节,也不会显示在libName.dll的“属性”窗口中,因此您应该手动添加此子节。这种情况甚至在我的Visual Studio社区2017中也出现了


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

这种方法很有效,至少它没有失败,但它没有在destinationfolder中保留目录结构,知道如何将结构保留在另一端吗?+1到目前为止,所有其他解决方案中,这一种更加优雅简洁,解决了我的复制问题。它会将文件及其文件夹复制到子目录中。谢谢你,肯特!我需要手动将文件复制到其他位置,我正在考虑使用xcopy,我可能会尝试一下。虽然我的错误是swagget index.html文件,但这也是我的解决方案。我添加了标签
index.html
,它成功了。谢谢@Alex34758