2012-04-20 60 views
12

安裝MSVS 11Beta後,我遇到了我的MSVS 10的編譯問題。現在,當我編譯我的C#項目在MSVS 10(MSVS 10創建的項目;目標框架:3.5),我得到的錯誤MSB4216MSB4028與以下輸出窗口中的文本:看起來像MSVS 11.0 Beta破壞了MSVS 10.0安裝

1>Task "GenerateResource" skipped, due to false condition; ('%(EmbeddedResource.Type)' == 'Resx' and '%(EmbeddedResource.GenerateResource)' != 'false' and '$(GenerateResourceMSBuildRuntime)' != 'CLR2') was evaluated as ('Resx' == 'Resx' and '' != 'false' and 'CLR2' != 'CLR2'). 
1>Task "GenerateResource" 
1> Launching task "GenerateResource" from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" in an external task host with a runtime of "CLR2" and a process architecture of "x86". 
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2199,5): error MSB4216: Could not run the "GenerateResource" task because we could not create or connect to a task host with runtime "CLR2" and architecture "x86". Please ensure that (1) the requested runtime and/or architecture are available on the machine, and (2) that the required executable "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NetFX 4.0 Tools\MSBuildTaskHost.exe" exists. 
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2217,7): error MSB4028: The "GenerateResource" task's outputs could not be retrieved from the "FilesWritten" parameter. Object does not match target type. 
1>Done executing task "GenerateResource" -- FAILED. 

我怎樣才能解決這些錯誤?

編輯:

  1. 提到文件的 「C:\ Program Files文件(x86)的\微軟的SDK \的Windows \ v8.0A \ BIN \ NETFX 4.0工具\ MSBuildTaskHost.exe」 的存在。
  2. C++項目沒有問題。
  3. 重新安裝VS10不能解決問題。
  4. 這是GenerateResource任務,必須編譯RESX文件,但產生的異常:

<!-- But we can't use those parameters if we're targeting 3.5, since we're using the 3.5 task -->

<GenerateResource 
    Sources="@(EmbeddedResource)" 
    UseSourcePath="$(UseSourcePath)" 
    References="@(ReferencePath)" 
    AdditionalInputs="$(MSBuildAllProjects)" 
    NeverLockTypeAssemblies="$(GenerateResourceNeverLockTypeAssemblies)" 
    StateFile="$(IntermediateOutputPath)$(MSBuildProjectFile).GenerateResource.Cache" 
    StronglyTypedClassName="%(EmbeddedResource.StronglyTypedClassName)" 
    StronglyTypedFileName="%(EmbeddedResource.StronglyTypedFileName)" 
    StronglyTypedLanguage="%(EmbeddedResource.StronglyTypedLanguage)" 
    StronglyTypedNamespace="%(EmbeddedResource.StronglyTypedNamespace)" 
    StronglyTypedManifestPrefix="%(EmbeddedResource.StronglyTypedManifestPrefix)" 
    PublicClass="%(EmbeddedResource.PublicClass)" 
    OutputResources="@(EmbeddedResource->'$(IntermediateOutputPath)%(ManifestResourceName).resources')" 
    MSBuildRuntime="$(GenerateResourceMSBuildRuntime)" 
    MSBuildArchitecture="$(GenerateResourceMSBuildArchitecture)" 
    Condition="'%(EmbeddedResource.Type)' == 'Resx' and '%(EmbeddedResource.GenerateResource)' != 'false' and '$(GenerateResourceMSBuildRuntime)' == 'CLR2'"> 
  1. 我試圖debug的MSBuild腳本(.csproj)。就在致命GenerateResource任務之前,我檢查了所有屬性項目。沒有什麼關於「8.0A」,但只有大約「7.0A」
+0

您是否檢查每個錯誤所需的文件是否存在? 「請確保(1)機器上提供了所需的運行時和/或體系結構,以及(2)所需的可執行文件」C:\ Program Files(x86)\ Microsoft SDK \ Windows \ v8.0A \ bin \ NetFX 4.0 Tools \ MSBuildTaskHost.exe「存在。」 – Chris 2012-04-20 13:38:58

+0

@Chris - 是的,該文件存在,我可以在procmon日誌中看到該應用程序「C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.0A \ bin \ NetFX 4.0 Tools \ MSBuildTaskHost.exe」正在執行一些操作。 – Loom 2012-04-20 13:53:18

+0

這可能是一個路徑問題。 VS11可能已經設置了一條覆蓋生成腳本假定的路徑的路徑,並且使用了錯誤版本的文件或dll。檢查你的路徑。 – 2012-04-20 14:31:53

回答

17

有一種醜陋的方式來解決這個問題:重命名文件夾"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A"。我討厭接受這個答案。

+0

重命名爲什麼? – 2012-05-10 16:26:05

+0

@LuisFilipe - 將其重命名爲無法通過舊名稱找到的任何無意義的名稱(我將其更名爲「v8.0A」至「_v8.0A」) – Loom 2012-05-10 19:17:54

+0

+1。真正的答案是追蹤爲什麼MSBuild試圖使用.NET 4,但我沒有建議,你可以看看。 – Rup 2012-05-11 08:42:50

8

您的用戶名有多長?

當用戶名長度爲20個字符時,似乎有一個錯誤。如果您的用戶名是19個字符或更少,它可以正常工作。

我在connect上打開了一個問題。

編輯: 您是否嘗試過的環境變量DisableOutOfProcTaskHost設置爲true,如連接問題,這對我的工作建議。

+0

酷。這是一種魔法。但我的用戶名由13個字母組成。 – Loom 2012-08-20 18:57:12

+0

謝謝。不幸的是,我無法測試'DisableOutOfProcTaskHost'解決方法,因爲MSVS 11 Beta過期並且已被卸載。當前VS 2012 Express不會重現該問題。 – Loom 2012-10-12 15:01:31

1

安裝VS2010並安裝.NET Framework 4.5後,我的TFS 2010構建服務器上出現此問題。這使我可以構建.NET 4.5項目,但任何針對CLR2(.NET 2.0 -3.5)的VS2008項目,我嘗試構建都會返回錯誤。在少數網站上關於這個問題的建議都沒有奏效。

  1. 重啓 - 沒有解決問題
  2. 在一個環境變量,也是在項目文件中設置DisableOutOfProcTaskHost =真 - 沒修好
  3. 我生成賬戶的用戶名已經不到20個字符的問題
  4. 重命名Windows SDK文件夾 - N/A,因爲我沒有安裝VS2012和8.0A SDK ...只是.NET框架4.5。

在任何情況下,爲了解決這個問題,我卸載了.NET 4.5,修復了VS2010,然後重新啓動了構建服務器。現在我可以毫無問題地構建VS2008和VS2010項目。

幸運的是,我不再需要構建.NET 4.5項目,因爲該團隊決定返回到.NET 4.0。

1

另一個可能的解決方法是將項目的目標框架更改爲.Net 4.0。這並不總是一個解決方案,但如果一切都失敗了,那肯定有可能。

0

爲我工作:刪除有問題的文件夾中的bin和OBJ文件夾,重新啓動的解決方案

0

就我而言,我試圖建立一個32位的Windows 7機器上的解決方案時收到錯誤消息。解決錯誤的方法是右鍵單擊項目,選擇屬性,然後轉到生成選項卡。在這裏,我將「平臺目標」從「任何CPU」改爲「x86」。 HTH

0

設置設置DisableOutOfProcTaskHost = true在一個環境變量爲我工作。