リリース ビルド用にいくつかの結果ファイルを圧縮する追加のビルド後の手順を使用して、Web アプリケーション プロジェクトをセットアップしました。これを行うために、MSBuild Community Tasks NuGet パッケージを追加しました。Visual Studio 内でビルドすると問題なく動作し、zip ファイルが作成されることを確認しました。csprojファイルの関連部分は次のとおりです。
<PropertyGroup>
<MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
<ZipFile>$(SolutionName).zip</ZipFile>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.targets" />
<Target Name="Zip" AfterTargets="Build" Condition="'$(Configuration)' == 'Release'">
<ItemGroup>
<ZipFiles Include="$(ProjectDir)\*.js; $(ProjectDir)\manifest.json" Exclude="$(ProjectDir)\*.map.js" />
</ItemGroup>
<Delete Files="$(ZipFile)" />
<Zip Files="@(ZipFiles)" WorkingDirectory="$(ProjectDir)" ZipFileName="$(ZipFile)" ZipLevel="9" />
</Target>
上記のプロジェクトを自動的にビルドしようとするコードが別のプロジェクトにあります。コードは次のとおりです。
var projectInstance = new ProjectInstance(project.File.AbsolutePath);
projectInstance.SetProperty("Configuration", "Release");
projectInstance.SetProperty("SolutionDir", project.Solution.Directory.AbsolutePath);
projectInstance.Build("Build", Enumerable.Empty<ILogger>());
上記のコードは、次のエラー メッセージで失敗します。
「Zip」タスクが見つかりませんでした。以下を確認してください: 1.) プロジェクト ファイル内のタスクの名前がタスク クラスの名前と同じである。2.) タスク クラスは "パブリック" であり、Microsoft.Build.Framework.ITask インターフェイスを実装します。3.) タスクは、プロジェクト ファイル、または "C:\Windows\Microsoft.NET\Framework\v4.0.30319" ディレクトリにある *.tasks ファイルで正しく宣言されています。
Zip
タスクを削除すると、問題なく動作します。プログラムでビルドすると失敗するのに、VS 内でビルドすると失敗しないのはなぜですか? どうすれば修正できますか?