我有这个团队在编译后构建目标设置
<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参数,是否有人知道我做错了什么?
答案 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无法在那里创建程序集。它不是项目或解决方案中的配置,所以我只删除了文件夹(我不知道它是如何创建的)并且它有效。