首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用MSBuild扩展的压缩任务?

如何使用MSBuild扩展的压缩任务?
EN

Stack Overflow用户
提问于 2012-10-05 23:06:13
回答 2查看 31.3K关注 0票数 24

我决定在每次构建时使用MSBuild扩展的压缩任务来压缩我的一些源代码。

然而,这不起作用:

代码语言:javascript
复制
<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.)在项目文件或位于"c:\Windows\Microsoft.NET\Framework\v4.0.30319“目录下的*.tasks文件中使用正确声明了任务。

我不知道是什么导致了这个错误?有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 23:27:33

MSBuild Community Tasks示例

代码语言:javascript
复制
<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>

如果你需要更多的例子,可以从我的一个项目中获取here is a complete working MSBuild file

票数 35
EN

Stack Overflow用户

发布于 2016-06-30 23:49:05

这里有一个MSBuild Community Tasks的替代方案。如果您使用的是.net 4.5.1,则可以将System.IO.Compression函数嵌入到UsingTask中。此示例使用ZipFile.CreateFromDirectory

代码语言:javascript
复制
<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>
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12749032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档