【问题标题】:Looks like MSVS 11.0 Beta spoiled a MSVS 10.0 installation看起来 MSVS 11.0 Beta 破坏了 MSVS 10.0 安装
【发布时间】:2012-05-02 02:30:27
【问题描述】:

安装 MSVS 11Beta 后,我遇到了 MSVS 10 的编译问题。现在,当我在 MSVS 10 中编译我的 C# 项目(在 MSVS 10 中创建的项目;目标框架:3.5)时,我收到错误MSB4216MSB4028,并在输出窗口中显示以下文本:

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)\Microsoft SDKs\Windows\v8.0A\bin\NetFX 4.0 Tools\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”的内容

【问题讨论】:

  • 您是否根据错误检查了所需文件是否存在? “请确保 (1) 请求的运行时和/或体系结构在机器上可用,以及 (2) 所需的可执行文件 "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NetFX 4.0 Tools\MSBuildTaskHost.exe”存在。”
  • @Chris - 是的,该文件存在,我可以在 procmon 日志中看到该应用程序“C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NetFX 4.0 Tools \MSBuildTaskHost.exe" 已启动并正在执行一些操作。
  • 可能是路径问题。 VS11 可能设置了一个路径,该路径覆盖了您的构建脚本假定的路径,并且使用了错误版本的文件或 dll。检查你的路径。
  • @MystereMan - 谢谢。你的意思是VS11改变了我的Microsoft.Common.targets
  • 您是否尝试过简单地重新安装 VS10?

标签: c# .net visual-studio-2010 msbuild visual-studio-2012


【解决方案1】:

在 MSDN 论坛上提出了类似的问题。安装 VS11 后重启了吗?

http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/7d955d96-ff73-47d3-8830-85ea321eb4ab

【讨论】:

  • 不,我一个月前安装了VS11
【解决方案2】:

有一个丑陋的方法来解决这个问题:重命名文件夹"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A"。我讨厌接受这个答案。

【讨论】:

  • @LuisFilipe - 将其重命名为旧名称无法找到的任何无意义名称(我将“v8.0A”重命名为“_v8.0A”)
  • +1 至少是一个解决方案。真正的答案是追查为什么 MSBuild 试图将其用于 .NET 4,但我没有建议您可以查看的地方。
  • +1 来自我的解决方案.. 没有时间重新安装 VS10
  • @AnarchistGeek - 谢谢。其实重装VS10并没有解决问题
  • +1 还隐藏了在我以前使用 2013 Update 2 的机器上出现的相同问题,该机器从未有过 2010(或 2012)。不,没有做过任何 RCA。 (使用 MSBuild 4.0 [不是 12] 进行命令行构建,在 VS [即 12] 内部构建仍然存在类似问题)。是的,非常不专业:(
【解决方案3】:

您的用户名有多长?

用户名长度为 20 个字符时似乎存在错误。如果您的用户名不超过 19 个字符,则可以正常使用。

我在connect 上打开了一个问题。

编辑: 您是否尝试按照连接问题中的建议将环境变量 DisableOutOfProcTaskHost 设置为 true,这对我有用。

【讨论】:

  • 酷。这是一种魔法。但我的用户名由 13 个字母组成。
  • 谢谢。不幸的是,我无法测试“DisableOutOfProcTaskHost”解决方法,因为 MSVS 11 Beta 已过期并已被卸载。当前的 VS 2012 Express 没有重现该问题。
【解决方案4】:

在安装 VS2010 然后安装 .NET Framework 4.5 后,我在 TFS 2010 构建服务器上出现了这个问题。这允许我构建 .NET 4.5 项目,但我尝试构建的任何针对 CLR2 (.NET 2.0 -3.5) 的 VS2008 项目都会返回错误。少数几个谈论这个问题的网站上的建议都没有奏效。

  1. 重新启动 - 未解决问题
  2. 在环境变量和项目文件中设置 DisableOutOfProcTaskHost = true - 未解决问题
  3. 我的构建帐户的用户名已经少于 20 个字符
  4. 重命名 windows SDK 文件夹 - 不适用,因为我没有安装 VS2012 和 8.0A SDK...只是 .NET framework 4.5。

无论如何,为了解决这个问题,我卸载了 .NET 4.5,修复了 VS2010,然后重新启动了构建服务器。现在我可以毫无问题地构建 VS2008 和 VS2010 项目了。

幸运的是,我不再需要构建 .NET 4.5 项目,因为该团队决定回到 .NET 4.0。

【讨论】:

    【解决方案5】:

    另一个可能的解决方法是将项目的目标框架更改为 .Net 4.0。这并不总是一个解决方案,但如果所有其他方法都失败了,它肯定是有可能的。

    【讨论】:

      【解决方案6】:

      为我工作:删除有问题的文件夹的 bin 和 obj 文件夹并重新启动解决方案

      【讨论】:

        【解决方案7】:

        就我而言,我在尝试在 32 位 Windows 7 机器上构建解决方案时收到了该错误消息。为我解决错误的方法是右键单击项目,选择属性,然后转到构建选项卡。在这里,我将“平台目标”从“任何 CPU”更改为“x86”。高温

        【讨论】:

          【解决方案8】:

          在环境变量中设置 DisableOutOfProcTaskHost = true 对我有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-29
            • 2012-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-12
            相关资源
            最近更新 更多