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