c# - 为什么我们在使用 Microsoft.Build 库时会收到这个 InvalidProjectFileException 异常?
问题描述
我被要求调查为什么我们的构建过程在安装了 Visual Studio 2022(版本 17.0.0 预览版 3.1)的机器上运行时失败。我对 C#、MSBuild 或 NuGet 包不是很熟悉,所以我可能会问一个无意义的问题!请耐心等待。
我们的 C# 构建应用程序尝试创建 的实例Microsoft.Build.Execution.ProjectInstance
,如下所示:
var pi = new ProjectInstance(projectFile, BuildProperties, null);
其中“projectFile”是 MSBuild 的 XML 脚本的位置。但是这个调用会导致以下异常:
Microsoft.Build.Exceptions.InvalidProjectFileException: 'The tools version "Current" is unrecognized. Available tools versions are "2.0", "3.5", "4.0".
如果我尝试将 null 参数更改为“16.0”、“17.0”或“Current”,我会得到相同异常的变化。
(如果我尝试直接使用 msbuild.exe,它会说它是“Microsoft (R) Build Engine version 17.0.0-preview-21380-01+b6e7d6051 for .NET Framework”,尽管我接受这可能是一个红鲱鱼因为我们正在自动化 MSBuild,而不是直接运行 msbuild.exe,所以如果这无关紧要,我们深表歉意。)
我有从构建应用程序项目引用的最新 NuGet Microsoft.Build 包 (v16.11.0)。我注意到没有 v17 包(还)。
我们在这里做一些根本错误的事情吗?为什么我们会得到这个异常?异常消息说唯一的工具是非常低的版本号似乎不寻常。我原以为它会说工具版本更像 16、17 等,但不是“2.0”!构造函数中的 ToolsVersion 参数是ProjectInstance
与 NuGet 包的版本(16.11)相关,还是与随 VS2022(17.0 预览版)一起安装的 MSBuild 版本相关,还是完全与其他相关!?
非常感谢所有帮助。如果我的问题措辞不好,或者您需要更多信息来提供帮助,请询问。
解决方案
推荐阅读
- javascript - 用另一个数组过滤数组对象
- python - 烧瓶中的 Http PUT 方法在断言中失败
- python - 使用第二个元素从元组列表创建字典
- workflow - Jbpm中如何识别多实例子流程并与主流程区分开来?
- apache-spark - 熊猫数据帧的 PySpark rdd
- nginx - 在 set_by_lua OpenResty 中添加换行符
- opencv - 生成具有预测深度的 3D 点云
- r - 在 geom_line() 图表中控制日期(x 轴)间隔
- java - 我如何控制 Perfino 代理日志记录行为
- python - SUMY Text Summarizer 无法汇总并返回原始文本