【问题标题】:Invalid static method invocation syntax: "[MSBuild]::IsRunningFromVisualStudio()"无效的静态方法调用语法:“[MSBuild]::IsRunningFromVisualStudio()”
【发布时间】:2017-12-06 09:13:34
【问题描述】:

升级到 Visual Studio 2017 15.5 后,我的项目都无法正确加载。所有都标记为不可用。

每个项目我都收到以下错误:

错误:无效的静态方法调用语法:“[MSBuild]::IsRunningFromVisualStudio()”。找不到方法“[MSBuild]::IsRunningFromVisualStudio”。静态方法调用应采用以下形式:$([FullTypeName]::Method()),例如$([System.IO.Path]::Combine(a, b))。 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets

重新加载项目会产生以下错误提示:

添加新项目会产生这个错误提示:

【问题讨论】:

  • 在 github github.com/Microsoft/msbuild/issues/2775github.com/dotnet/docfx/issues/2265 上遇到这些线程(但是,我不能从线程中扣除实用的解决方案)。
  • 另一个相关话题github.com/dotnet/docfx/pull/2267
  • 仅供参考,我已经将 VS2017 Enterprise 与 VS2017 pro 并排安装了很长时间。一直在用pro。所有项目都可以在 Enterprise 中正常加载(安装了 ReSharper 并进行构建)。看来只有我的 VS2017 pro 15.5 安装坏了。
  • 非常感谢您的分享。我注意到您正在通过产品组解决此问题,如果有任何结论和解决方法,您可以在这里分享。这对遇到同样问题的其他社区有好处。
  • 在将 VS 2017 更新到 v15.6.5 后,我也面临同样的问题。您是否找到任何解决方案或解决方法来解决它?

标签: msbuild visual-studio-2017


【解决方案1】:

1.关闭所有正在运行的 Visual Studio 2017 实例

2.(以管理员身份)启动“VS 2017 的开发人员命令提示符”

3. 键入以下命令(将 Professional 替换为您的版本,Enterprise 或 Community,或相应地调整路径):

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Framework.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Engine.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Conversion.Core.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Tasks.Core.dll"

gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Utilities.Core.dll"

4.重启 Visual Studio 2017

【讨论】:

  • 我在我的构建服务器上运行了这个命令,它破坏了我们所有的构建——特别是它破坏了vswhere.exe 实用程序,它定位了 MSBuild 的具体版本。必须通过 gcutil 找到所有新添加的程序集并使用 gacutil /u 卸载它们来修复它
  • 也为我修复了它。我也必须运行它:gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\System.Collections.Immutable.dll",因为我得到了Could not load file or assembly 'System.Collections.Immutable blah blah
  • 嗯,这部分有帮助。我上帝摆脱了这个问题,但后来我到了SDK Microsoft.NET.Sdk specified could not be found
  • 之后我必须按照stackoverflow.com/questions/49816884/… 中的建议安装Microsoft.CodeAnalysis.Workspaces.MSBuildMicrosoft.Build.Locator
  • 这搞砸了我的 Visual Studio。您能建议如何解决它吗?
【解决方案2】:

从对this issue on github 的回复看来,这通常是由 GAC 中的旧版本 MSBuild 引起的。然后,这将优先于 VS 更新版本附带的捆绑版本使用。

解决方案是从 gac 中删除旧版本的 Microsoft.Build。

  1. 查找 gac 的版本:

    gacutil /l | findstr Microsoft.Build

  2. 查找任何 15.x.x.x 版本,然后将其删除:

    gacutil /u "Microsoft.Build, Version=15.{version_found}"

  3. 重启 Visual Studio

可能还需要删除该版本的相关程序集Microsoft.Build.Utilities.CoreMicrosoft.Build.FrameworkMicrosoft.Build.Tasks.Core

【讨论】:

    【解决方案3】:

    由 henkmollema 在此线程中提供的解决方案:https://github.com/Microsoft/msbuild/issues/2775 是从开始菜单启动 Visual Studio 安装程序并运行修复。

    【讨论】:

    • 也不适合我。
    • 解决了我的问题。
    【解决方案4】:

    通过更新程序安装最新的 Visual Studio 版本后,我收到了相同的错误消息。

    至少在我的情况下,通过在安装 Visual Studio 更新后重新启动解决了该问题。

    【讨论】:

      【解决方案5】:

      我在公司网络上的 Windows 7 PC 上使用 Visual Studio 2017 时遇到了这个问题。我尝试通过以下方式解决此问题:

      • 多次重新启动计算机/Visual Studio(如此处的答案所述)。
      • 升级到“扩展和更新”中的最新版 Visual Studio
      • 使用安装程序中的“修复”选项。
      • 通过卸载“Visual Studio 安装程序”(控制面板 → 添加删除程序)将其完全卸载,然后重新安装。

      我注意到在同事的电脑上,从来没有安装过 VS2017,当我安装 VS2017 社区版 15.5 版时,没有问题。

      在这一点上,我不得不认输。唯一简单的解决方案是替换文件中的行:

      • C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets

      文件末尾附近有一行:

      <NuGetRestoreTargets Condition="'$(NuGetRestoreTargets)'=='' and '$([MSBuild]::IsRunningFromVisualStudio())'=='true'">$(MSBuildToolsPath32)\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets</NuGetRestoreTargets>

      只需将$([MSBuild]::IsRunningFromVisualStudio()) 替换为true

      <NuGetRestoreTargets Condition="'$(NuGetRestoreTargets)'=='' and 'true'=='true'">$(MSBuildToolsPath32)\..\..\..\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets</NuGetRestoreTargets>

      但这仅允许加载项目 - 您不能使用它来构建项目。

      我将要求为我的机器重新映像,以便我可以从头开始下载并安装 Visual Studio。

      (我希望 Microsoft 尽快提出解决方案。)

      【讨论】:

        【解决方案6】:

        除了Yuriy Oleynik's answer 中提到的程序集之外,我发现我需要在 gac 中添加一个额外的程序集(参见下面的最后一个命令)(我使用的是 VS 2019):

        gacutil.exe -i "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\amd64\Microsoft.Build.dll"
        gacutil.exe -i "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\amd64\Microsoft.Build.Conversion.Core.dll"
        gacutil.exe -i "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\amd64\Microsoft.Build.Engine.dll"
        gacutil.exe -i "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\amd64\Microsoft.Build.Framework.dll"
        gacutil.exe -i "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\amd64\Microsoft.Build.Tasks.Core.dll"
        gacutil.exe -i "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\amd64\Microsoft.Build.Utilities.Core.dll"
        gacutil.exe -i "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\amd64\System.Collections.Immutable.dll"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-18
          • 1970-01-01
          • 1970-01-01
          • 2015-10-17
          • 1970-01-01
          • 1970-01-01
          • 2022-11-18
          • 1970-01-01
          相关资源
          最近更新 更多