我已经设置了一个 Web 应用程序项目,其中包含一个额外的构建后步骤来压缩一些生成的文件以用于发布构建。为此,我添加了MSBuild 社区任务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 中构建时不会?我该如何解决?