我已经设置了一个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中构建时却不会失败?我该如何解决?
答案 0 :(得分:-1)
如果您从Visual Studio的工具菜单&gt;&gt;中提供包恢复选项,这将得到解决。选项&gt;&gt;包管理器&gt;&gt;一般如下图所示:
即使您使用MSBuild构建项目,这也将恢复Nuget包。否则,它将仅在Visual Studio构建中恢复,而不在MSBuild构建中恢复。因此,MSBuild.Community.Tasks Nuget在MSBuild中没有为您恢复,但在Visual Studio中运行良好。
所以,试试这个并希望这可以解决问题。