MsBuild 无法解析 MsBuildMajorVersion
MsBuild cannot resolve MsBuildMajorVersion
我有 Visual Studio 超过 100 个项目的解决方案。其中五个安装了 Fody 的 nuget 包(版本 6.0.3)。当我尝试构建解决方案时出现以下错误:
Fody.6.3.0\build\Fody.targets(38,12): error MSB4086: A numeric
comparison was attempted on "$(MsBuildMajorVersion)" that evaluates to
"" instead of a number, in condition "($(MsBuildMajorVersion) < 16)"
在这次失败的构建之后,我尝试反复构建,并在多次尝试(有时一次,有时五次)后成功完成构建。我试图重新安装所有 nuget 包,清除 nuget 缓存,重新安装 Visual Studio,设置 MSBUILDDISABLENODEREUSE
变量,但没有任何帮助。
Visual Studio 2019 是 16.8.4 版本,所有项目都有 .NET Framework 4.8 版本。
更新:
这个问题只存在于我的机器上。在同事的工作站上,一切正常。我发现构建不成功后 Visual Studio 应该重新启动并且构建过程成功的提示。这个提示对我来说是一个足够的解决方法。
尝试在这五个项目上另外安装最新的 Costura.Fody
nuget 包,并尝试将 Fody
nuget 包更新到最新的 6.3.0
版本。
然后重建您的项目以检查问题是否发生。
问题的解决方案是从 packages.config
迁移到 PackageReference
。您可以在 Visual Studio 2019 中执行此操作:在 Solution Explorer 中展开您的项目,然后在 References 上单击鼠标右键并选择 Migrate packages.config to PackageReference...
.
我能够通过添加到 .csproj 代码来恢复 nugets(刚从 VS 2017 中创建的项目复制)来解决这个问题。
将 packages.config 转换为 PackageReference 也对我有用,但在通过 msbuild 构建时会导致一些其他问题。
需要在第一个 PropertyGroup 的末尾添加以下行
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<RestorePackages>true</RestorePackages>
</PropertyGroup>
下面一行 EnsureNuGetPackageBuildImports 目标:
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
有关详细信息,请参阅随附的屏幕截图:
我能够通过清理我的整个解决方案并尝试 运行 重建来解决这个问题,然后成功重建项目。
也许你应该试试。
可能听起来很傻,但对我来说,我需要做的就是将 Fody nuget 升级到另一个版本并切换回原始版本,我的代码再次编译成功。可能不是你的情况,但值得尝试这个 2 分钟的解决方案。
我有 Visual Studio 超过 100 个项目的解决方案。其中五个安装了 Fody 的 nuget 包(版本 6.0.3)。当我尝试构建解决方案时出现以下错误:
Fody.6.3.0\build\Fody.targets(38,12): error MSB4086: A numeric comparison was attempted on "$(MsBuildMajorVersion)" that evaluates to "" instead of a number, in condition "($(MsBuildMajorVersion) < 16)"
在这次失败的构建之后,我尝试反复构建,并在多次尝试(有时一次,有时五次)后成功完成构建。我试图重新安装所有 nuget 包,清除 nuget 缓存,重新安装 Visual Studio,设置 MSBUILDDISABLENODEREUSE
变量,但没有任何帮助。
Visual Studio 2019 是 16.8.4 版本,所有项目都有 .NET Framework 4.8 版本。
更新:
这个问题只存在于我的机器上。在同事的工作站上,一切正常。我发现构建不成功后 Visual Studio 应该重新启动并且构建过程成功的提示。这个提示对我来说是一个足够的解决方法。
尝试在这五个项目上另外安装最新的 Costura.Fody
nuget 包,并尝试将 Fody
nuget 包更新到最新的 6.3.0
版本。
然后重建您的项目以检查问题是否发生。
问题的解决方案是从 packages.config
迁移到 PackageReference
。您可以在 Visual Studio 2019 中执行此操作:在 Solution Explorer 中展开您的项目,然后在 References 上单击鼠标右键并选择 Migrate packages.config to PackageReference...
.
我能够通过添加到 .csproj 代码来恢复 nugets(刚从 VS 2017 中创建的项目复制)来解决这个问题。 将 packages.config 转换为 PackageReference 也对我有用,但在通过 msbuild 构建时会导致一些其他问题。
需要在第一个 PropertyGroup 的末尾添加以下行
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<RestorePackages>true</RestorePackages>
</PropertyGroup>
下面一行 EnsureNuGetPackageBuildImports 目标:
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
有关详细信息,请参阅随附的屏幕截图:
我能够通过清理我的整个解决方案并尝试 运行 重建来解决这个问题,然后成功重建项目。
也许你应该试试。
可能听起来很傻,但对我来说,我需要做的就是将 Fody nuget 升级到另一个版本并切换回原始版本,我的代码再次编译成功。可能不是你的情况,但值得尝试这个 2 分钟的解决方案。