如何使用MSBuild扩展的邮编任务是什么?(How to use MSBuild extensio

2019-08-01 04:54发布

我决定使用MSBuild扩展的邮编任务压缩我的一些源代码,在每一个版本。

然而,这不是工作:

<UsingTask TaskName="MSBuild.ExtensionPack.Compression.Zip" AssemblyFile="MSBuild.ExtensionPack.dll" />
<Target Name="AfterBuild">
    <CallTarget Targets="ZipSourceFiles" />
</Target>
<Target Name="ZipSourceFiles" Condition="'$(ConfigTransform)'=='ImRunningOnTheServer'">
    <MSBuild.ExtensionPack.Compression.Zip TaskAction="Create" CompressFiles="c:\source.txt" ZipFileName="C:\target.zip"/>
</Target>

我得到了以下错误信息:

该“MSBuild.ExtensionPack.Compression.Zip”任务没有被发现。 检查以下内容:1)在项目文件中的任务的名称是一样的任务类的名称。 2)任务类是“公”,实现了Microsoft.Build.Framework.ITask接口。 3)任务是否正确与项目文件中声明,或在* .tasks位于文件“C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319”目录。

我不知道是什么原因导致这个错误? 任何的想法?

Answer 1:

示例的MSBuild社区任务 :

<Import Project="lib\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />

<Target Name="Zip">
        <CreateItem Include="YourSourceFolder\*.*" >
                <Output ItemName="ZipFiles" TaskParameter="Include"/>
        </CreateItem>
        <Zip ZipFileName="YourZipFile.zip" WorkingDirectory="YourSourceFolder" Files="@(ZipFiles)" />
</Target>

如果你需要更多的例子, 这里是一个完整的工作的MSBuild文件从我的项目之一。



Answer 2:

下面是一个替代的MSBuild社区任务 。 如果您在使用.NET 4.5.1,您可以嵌入System.IO.Compression在功能UsingTask 。 本例使用ZipFile.CreateFromDirectory 。

<Target Name="Build">
  <ZipDir
    ZipFileName="MyZipFileName.zip"
    DirectoryName="MyDirectory"
  />
</Target>

<UsingTask TaskName="ZipDir" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll">
  <ParameterGroup>
    <ZipFileName ParameterType="System.String" Required="true" />
    <DirectoryName ParameterType="System.String" Required="true" />
  </ParameterGroup>
  <Task>
    <Reference Include="System.IO.Compression.FileSystem" />
    <Using Namespace="System.IO.Compression" />
    <Code Type="Fragment" Language="cs"><![CDATA[
      try
      {
        Log.LogMessage(string.Format("Zipping Directory {0} to {1}", DirectoryName, ZipFileName));
        ZipFile.CreateFromDirectory( DirectoryName, ZipFileName );
        return true;
      }
      catch(Exception ex)
      {
        Log.LogErrorFromException(ex);
        return false;
      }
    ]]></Code>
  </Task>
</UsingTask>


文章来源: How to use MSBuild extension's Zip task?
标签: .net msbuild