作为我的解决方案构建的一部分,我想将所有“内容”文件(asp?x等)复制到另一个文件夹。由于这些在项目中被如此清晰地标记,我认为必须有一种简单的方法来复制这些,而不是用xcopy编写我自己的后期构建步骤。 不幸的是我无法解决这个问题 - 这个msbuild的东西与我的大脑不相容。 我只想要一个步骤 但无法弄清楚要使用的语法。
Bat文件语法建议不能解决这个问题 - 只应用纯msbuild解决方案
谢谢, 每
答案 0 :(得分:10)
您可以通过以下方式轻松完成此操作:
<PropertyGroup>
<DestFolder>..\Copy\</DestFolder>
</PropertyGroup>
<Target Name="CopyContentFiles">
<Copy SourceFiles="@(Content)"
DestinationFiles="@(Content->'$(DestFolder)%(RelativeDir)%(Filename)%(Extension)')"/>
</Target>
如果你想以后期构建步骤执行它,那么你可以添加AfterTargets =“Build”,例如:
<PropertyGroup>
<DestFolder>..\Copy\</DestFolder>
</PropertyGroup>
<Target Name="CopyContentFiles" AfterTargets="Build">
<Copy SourceFiles="@(Content)"
DestinationFiles="@(Content->'$(DestFolder)%(RelativeDir)%(Filename)%(Extension)')"/>
</Target>
答案 1 :(得分:1)
我使用Web部署功能打包所有内容文件,然后我可以使用Web部署与站点同步或使用xcopy或更确切地说RoboCopy,如果Web部署不是一个选项。
RoboCopy任务包含在MSBuild Community Tasks中。
<PropertyGroup>
<Configuration>Release</Configuration>
<PackageDir>$(MSBuildProjectDirectory)\obj\$(Configuration)\Package\PackageTmp</PackageDir>
<ServerPath>\\server\path</ServerPath>
<MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\...</MSBuildCommunityTasksPath>
</PropertyGroup>
<ItemGroup>
<Project Include="WebApplication.csproj"/>
</ItemGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
<Target Name="Deploy">
<MSBuild Projects="@(Project)" Targets="Build;Package" Properties="Configuration=$(Configuration)"/>
<RoboCopy
SourceFolder="@(PackageDir)"
DestinationFolder="$(ServerPath)"
Subdirectories="true"
Mirror="true"
/>
</Target>
答案 2 :(得分:0)
Sayed的回答对我不起作用,因为它还保留了原始的父目录。我使用了以下更改版本,它工作得很漂亮,更优雅!
<PropertyGroup>
<DestFolder>..\Copy\</DestFolder>
</PropertyGroup>
<Target Name="CopyContentFiles">
<Copy SourceFiles="@(Content)"
DestinationFiles="$(DestFolder)\%(RecursiveDir)"/>
</Target>