1

我已经设置了一个 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 中构建时不会?我该如何解决?

4

1 回答 1

-1

如果您从 Visual Studio 的工具菜单 >> 选项 >> 包管理器 >> 常规中提供包还原选项,这将得到解决,如下图所示:

启用包还原

即使您使用 MSBuild 构建项目,这也会恢复 Nuget 包。否则,它将仅在 Visual Studio 版本中恢复,而不是在 MSBuild 版本中。由于这个原因,MSBuild.Community.Tasks Nuget 没有在 MSBuild 中为您恢复,但在 Visual Studio 中运行良好。

所以,试试这个,希望这能解决这个问题。

于 2013-09-25T05:14:20.020 回答