由于第三方构建任务,程序化项目构建失败

时间:2013-09-22 09:10:54

标签: .net visual-studio visual-studio-2012 msbuild msbuildcommunitytasks

我已经设置了一个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.)任务类是“public”并实现Microsoft.Build.Framework.ITask接口。 3.)在项目文件中或位于“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319”目录中的* .tasks文件中正确声明了任务。

如果我删除Zip任务,它可以完美运行。为什么在我以编程方式构建时会失败,但在我在VS中构建时却不会失败?我该如何解决?

1 个答案:

答案 0 :(得分:-1)

如果您从Visual Studio的工具菜单&gt;&gt;中提供包恢复选项,这将得到解决。选项&gt;&gt;包管理器&gt;&gt;一般如下图所示:

Enable Package Restore

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

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