2009-01-16 25 views
2

我有这样的团队建设目标设置到编译后团队建设,拷贝文件的对象问题

<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:\测试\”,因为该目标是一个文件夹,插件一个文件的tead。 要将源文件复制到文件夹中,请考虑使用DestinationFolder参数而不是DestinationFiles。

正如你所看到的,我确实使用了destinationfolder参数,有没有人知道我在做什么错?

回答

4

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

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

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

这种有点作品,至少它没有失败,但它不保留目的地文件夹中的目录结构,任何想法如何保持结构在另一边? – 2009-01-16 10:20:41

+0

已更新我的帖子。 – 2009-01-16 10:57:37

0

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

我们现在包括文件(这是我们想要复制)到项目,我们正在设置复制本地属性设置为“复制,如果新”和目标目录(目录结构必须在项目相同)

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

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复制任务。

0

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

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

0

我有完全一样的消息:

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

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