我有超过100个项目的Visual解决方案。其中五个已经安装了Fody的nuget包(版本6.0.3)。当我试图构建解决方案时,我会得到以下错误:
Fody.6.3.0\build\Fody.targets(38,12):error MSB4086:尝试对"$(MsBuildMajorVersion)“进行数值比较,其计算结果为"”,而不是“条件下的数字"($(MsBuildMajorVersion) <16)。
在这个失败的构建之后,我试图反复构建,经过几次尝试(有时是一次,有时是五次),构建就成功了。我试图重新安装所有nuget包,清除nuget缓存,重新安装Visual,设置MSBUILDDISABLENODEREUSE
变量,但没有任何帮助。
VisualStudio2019的版本为16.8.4,所有项目都有4.8版的.NET框架。
更新:
这个问题只存在于我的机器上。在同事的工作站上,一切正常。我发现了这样的提示:在不成功的构建之后,应该重新启动Visual,并且生成过程是成功的。这个小贴士对我来说是个很好的解决办法。
发布于 2021-02-09 21:05:16
解决这个问题的方法是从packages.config
迁移到PackageReference
。您可以在VisualStudio2019中这样做:在解决方案资源管理器中展开项目,而不是单击引用上的鼠标右键并选择Migrate packages.config to PackageReference...
。
发布于 2021-01-14 03:13:14
另外,尝试在这五个项目上安装最新的Costura.Fody
nuget包,并尝试将Fody
nuget包更新为最新的6.3.0
版本。
然后,和重新构建您的项目,以检查问题是否发生。
发布于 2021-04-01 12:49:36
我通过添加.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">
有关更多细节,请参见所附屏幕截图:
https://stackoverflow.com/questions/65704910
复制相似问题