2014-03-05 49 views
0

因此,我使用了MSBuild,但這是多年前的事情。創建發佈版本

我想創建一個解決方案的Release版本,一旦建成,它會將所有文件複製到變量集文件夾「ReleaseDrop」中並壓縮內容。 在壓縮之前,我想確保它只複製必要的文件(即沒有pdb,沒有sln,沒有csproj,沒有.cs文件(但允許.cshtml)或只有某些目錄並排除目錄中的其他目錄。

我怎麼能做到這一點?

+0

請提供更多信息。你想要複製的文件的位置是什麼?他們都在同一個目錄嗎? – stijn

+0

文件的位置應該不重要 - 它們應該可以設置在可以引用的屬性/變量中。但讓我們說,爲了更容易,它是整個項目/ bin文件夾存在的C:\ Projects \ MyProject。然後我想在構建完成之後構建sln,將所有文件複製到另一個文件夾(不包括某些文件夾或文件類型),然後將其壓縮起來 –

回答

1

這應該是一個開始。它指定一堆文件在一份新聞稿中包括,將它們複製到一個目錄和拉鍊他們。對於拉鍊部分我用MSBuild Extension Pack因爲我有它無論如何安裝,但你也可以使用一個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 
+0

謝謝!我非常欣賞這一點。 –