我们正在从10.4升级到Delphi 11.1.
我们有一些构建和部署Android项目的脚本.他们组装了一个msbuild
命令,如下所示:
msbuild someproject.dproj /v:q /p:Platform=Android /t:Build;Deploy /p:Config=Release /p:BT_BuildType=AppStore
对于11.1,这会抛出一条错误消息:
C: \程序文件(x86)\Embarcadero\Studio\22.0\bin\CodeGear.常见的目标(940,7):错误MSB4036:未找到"XmlPeek"任务.判断以下内容:1.)项目文件中任务的名称与任务类的名称相同.2.)任务类是"公共"的,并实现了Microsoft.建筑框架ITask接口.3)使用<;使用任务(&T);在项目文件中,或在*中.任务文件位于"C:\Windows\Microsoft.NET\Framework\v2.0.50727"目录中.[someproject.dproj]
现在,我们所有的构建脚本都使用了C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\rsvars.bat
,它显式地设置了.NET框架,如下所示:
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v4.0.30319
@SET FrameworkVersion=v4.5
经过一些研究,我突然想到了在msbuild
命令中添加toolsversion
个参数的 idea ,如下所示,这很管用:
msbuild someproject.dproj /v:q /p:Platform=Android /t:Build;Deploy /p:Config=Release /p:BT_BuildType=AppStore /toolsversion:4.0
这一切都很好,但我不愿意硬编码脚本中的toolsversion
个数字.
有没有一种方法可以通过编程获得Delphi生成构建时使用的toolsversion
的正确值,等等.?
我假设只是找到最高点.安装的NET版本还不够(即使这样,也必须将其"翻译"为toolsversion
).它必须与Delphi正在做的任何事情相结合(例如,在原始错误消息中引用的CodeGear.Common.Targets
文件中).