24

MSBuild 拡張機能の Zip タスクを使用して、ビルドごとにソース コードの一部を圧縮することにしました。

ただし、これは機能しません。

<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 ファイルで正しく宣言されています。

このエラーの原因がわかりません。何か案が?

4

2 に答える 2

35

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>

さらに例が必要な場合は、私のプロジェクトの 1 つから完全に機能する MSBuild ファイルを次に示します。

于 2012-10-05T15:27:32.973 に答える
11

MSBuild Community Tasksに代わるものを次に示します。.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>
于 2016-06-30T15:49:05.363 に答える