我有一个要发布到Web服务器的Web应用程序项目。有一个文件文件夹未包含在项目中,但在发布时需要复制。我发现了一些关于如何使用MSBuild进行复制的帖子,但我不能让它在我想要复制的主文件夹中递归复制所有文件/文件夹。
我要复制的文件夹是(proj)/ Scripts。 (此目录从应用程序项目中排除,因为我将所有JavaScript代码放在同一解决方案的单独项目中,并且在执行缩小和其他构建任务后,将从JS项目的输出文件夹中复制此文件夹。)
以下是我添加到* .csproj文件中的部分:
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="Scripts\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>
<!-- whitespace and new line added for question readability -->
Scripts\%(RecursiveDir)%(Filename)%(Extension)
</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
这将复制/ Scripts文件夹顶层的所有文件,但子文件夹中没有任何内容。
如何使其递归?
修正了我自己的问题:
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="Scripts\**\*.*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Scripts\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
<_CustomFiles Include="Scripts\*" />
必须更改为
<_CustomFiles Include="Scripts\**\*.*" />
答案 0 :(得分:0)
这对我有用:
<ItemGroup>
<Content Include="YourTargetDir\**\*.*">
<Link>YourTargetDir\%(RecursiveDir)%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>