创建发布删除

时间:2014-03-05 15:48:36

标签: msbuild

所以,我使用过MSBuild,但这是多年前的事了。

我想为解决方案创建一个Release版本,一旦构建,它会将所有文件复制到变量集文件夹“ReleaseDrop”并压缩内容。 在压缩之前,我想确保它只复制必要的文件(即没有pdb,没有sln,没有csproj,没有.cs文件(但允许.cshtml)或只复制某些目录并排除目录中的其他目录。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这应该是一个开始。它指定要包含在发行版中的一堆文件,将它们复制到目录并将其压缩。对于我使用MSBuild Extension Pack的zip部分,因为我还是安装了它,但你也可以使用7z左右的prtable版本并用Exec任务将其括起来。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>

<!--default values for properties if not passed-->
<PropertyGroup>
  <ProjectDir Condition="'$(ProjectDir) == ''">C:\Projects\MyProject</ProjectDir>
  <ReleaseDrop Condition="'$(ReleaseDrop) == ''">c:\Projects\MyProject\ReleaseDrop</ReleaseDrop>
</PropertyGroup>

<!--build list of files to copy-->
<ItemGroup>
  <SourceFiles Include="$(ProjectDir)\bin\*.exe" Exclude="$(ProjectDir)\bin\*test*.exe"/>
  <SourceFiles Include="$(ProjectDir)\bin\*.cshtml" />
</ItemGroup>

<!--copy files-->
<Target Name="CopyFiles">
  <MakeDir Directories="$(ReleaseDrop)" />
  <Copy SourceFiles="@(SourceFiles)" DestinationFolder="$(ReleaseDrop)" />
</Target>

<!--after files are copied, list them then zip them-->
<Target Name="MakeRelease" DependsOnTargets="CopyFiles">
  <ItemGroup>
    <ZipFiles Include="$(ReleaseDrop)\*.*"/>
  </ItemGroup>
  <Zip ZipFileName="$(ReleaseDrop)\release.zip" Files="@(ZipFiles)" WorkingDirectory="$(ReleaseDrop)"/>
</Target>

</Project>

可以像

一样调用
msbuild <name of project file> /t:MakeRelease /p:ProjectDir=c:\projects