我们正在从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文件中).

推荐答案

假设已经运行了rsvars.bat次,

FOR %%v IN ("%frameworkdir%") DO SET "toolsversion=%%~nv"
ECHO msbuild ...blah...  /toolsversion:%toolsversion:~1%

变量frameworkdir将由rsvars.bat设置.for命令解析其值(例如,C:\Windows\Microsoft.NET\Framework\v4.0.30319就像它是文件名一样,并 Select v4.0作为"文件名"(元变量%%v~n修饰符[文件名])

然后使用指定给toolsversion的值,从字符1开始(其中第一个字符是"字符0")

Android相关问答推荐

在Android Studio Iguana上运行示例代码时,Gradle Build错误

如何使用Jetpack Compose使水平pager 显示离屏页面?

从未设置实时数据值

我正在创建一个简单的连接四个游戏,我需要一个弹出式窗口当你赢了

Jetpack Compose:带芯片的Textfield

如何制作安卓';s FileProvider在Android 11上使用外部存储+

制作圆形SupportMapFragment

参数化类RecyclerView.Adapter的原始使用

为什么 Android Studio 中的 theme.xml 目录没有任何原色

来自位图的 WearOS 图标不显示 colored颜色

为什么我的应用程序使用这些信息?

每次在 Jetpack Compose 中调用导航

如何解决 compose 中material 图标的由于接收器类型不匹配,以下候选者都不适用

如何在 BottomBar jetpack compose 中删除选定的椭圆项目 colored颜色

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

如何为具有不同屏幕尺寸但相同密度的手机创建响应式布局?

对话框中的内容不可见

jetpack compose 中的可点击指示是什么?

操作系统会终止已启动的服务并调用Service.onDestroy吗?

单个用户可以在 Firebase 身份验证中将多个电话号码链接到他的帐户吗?