我想使用AfterBuild
目标将整个项目结构复制到一个单独的文件夹中。这是项目结构
TANKProject
|
|__TANK.CLI
|__TANK.Core
|__TANK.Web
我想将整个项目结构(包括bin
文件夹和.sln
文件夹)复制到B:\animesh\repos
位置。
为此,我将以下代码段放在每个AfterBuild
文件的.csproj
目标中:
<ItemGroup>
<_CustomFiles Include="..\TANK.ProjectName\*.*" />
</ItemGroup>
<Copy
SourceFiles="@(_CustomFiles)"
DestinationFiles="B:\repos\TANK"
SkipUnchangedFiles="true" />
构建项目时出现以下错误:
"DestinationFiles" refers to 3 item(s), and "SourceFiles" refers to 1 item(s). They must have the same number of items.
我在这里缺少什么?
根据AdrianMonk的回答,我改变了我的AfterBuild
配置:
<Target Name="AfterBuild">
<ItemGroup>
<_CustomFiles Include="..\**" />
</ItemGroup>
<Copy
SourceFiles="@(_CustomFiles)"
DestinationFiles="@(_CustomFiles->'B:\repos\TANK\%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true" />
</Target>
我只将这个AfterBuild
目标放在其中一个项目中,因为这样就足够了。
答案 0 :(得分:2)
您需要指定DestinationFolder
,而不是DestinationFiles
:
<Copy
SourceFiles="@(_CustomFiles)"
DestinationFolder="B:\repos\TANK"
SkipUnchangedFiles="true" />
但是,这只会复制项目结构根目录中的文件。要复制整个结构,包括子目录中的文件,您需要使用:
<Copy
SourceFiles="@(_CustomFiles)"
DestinationFiles="@(_CustomFiles->'B:\repos\TANK\%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true" />
这将执行整个项目结构的递归副本(也包括输出目录)。有关更多信息,请参阅MSBuild Copy task reference docs。