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>()); 

上面的代碼失敗,出現以下錯誤信息:

的「壓縮」任務沒有被發現。檢查以下內容:1.)項目文件中任務的名稱與任務類的名稱相同。 2.)任務類是「public」並實現Microsoft.Build.Framework.ITask接口。 3.)任務在項目文件或「C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319」目錄中的* .tasks文件中正確聲明。

如果我刪除Zip任務,它的工作完美無瑕。爲什麼當我以編程方式構建時失敗,而不是在VS中構建時失敗?我該如何解決它?如果你給的軟件包的選項從Visual Studio的工具菜單中恢復>>選項>>軟件包管理器>>通用

+0

您是否使用'msbuild'命令從Visual Studio命令提示符嘗試過相同的命令。如果沒有,你可以嘗試一次併發布結果嗎? – RinoTom

+0

@RinoTom,我剛剛嘗試過,並且產生了相同的結果。它還包含錯誤編號:*錯誤MSB4036 *。 – Sam

回答

-1

這將得到解決,如下圖所示圖像:

Enable Package Restore

這將恢復即使在使用MSBuild構建項目時,Nuget包也是如此。否則,它只會在Visual Studio構建中恢復,而不是在MSBuild構建中恢復。由於這個原因,MSBuild.Community.Tasks Nuget在MSBuild中沒有得到恢復,但在Visual Studio中很好。

所以,試試這個,並希望這應該解決這個問題。

+0

該軟件包不會丟失,所以我不認爲它需要恢復;它已經在文件系統中。 MSBuild並不是說它找不到該文件。 – Sam

+0

是否在Visual Studio命令提示符MSBuild和\或編程構建嘗試之後,文件系統中是否存在包文件?即使沒有我在回答中提到的設置,即使在Visual Studio解決方案構建之後,我也知道它會存在。 – RinoTom

+0

沒錯;在更新項目文件之前,我已經從NuGet安裝了軟件包。我沒有從文件系統中刪除它。 – Sam