我们正在从Delphi 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)\商场\工作室\22.0\bin\代码齿轮.公用.目标(940,7):错误MSB4036:找不到“XmlPeek”工作。请检查下列项目:1.)项目文件中的任务名称与任务类的名称相同。2.)任务类为“public”,并实现Microsoft.Build.Framework.ITask接口。3.)在项目文件中或在“C:\Windows\Microsoft.NET\Framework\v2.0.50727”目录下的 *.tasks文件中正确声明了任务。[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
参数的想法,如下所示,并且成功了:
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
文件中)。
2条答案
按热度按时间avwztpqn1#
这是 Delphi 11.1中的一个错误,至少有3个错误报告:抗肿瘤药物
您可以将
/tv:4.0
加入至MSBuild命令列,或将.dproj
档案中的第一行修改为:mbzjlibv2#
假设已经运行了
rsvars.bat
,变量
frameworkdir
将由rsvars.bat
设置。for
命令解析其值(例如,将C:\Windows\Microsoft.NET\Framework\v4.0.30319
当作文件名,并选择v4.0
作为“文件名”(元变量%%v
的~n
修饰符[文件名])然后使用指定给
toolsversion
的值,从字符1开始(其中第一个字符是“字符0”)---在注解中提供更多信息
哦,你们的小信仰:)