Xamarin/MonoTouch:由于缺少符号而无法在“仅链接 SDK”模式下编译

2023-11-22

我正在尝试在仅 Link SDK 模式下使用 MonoTouch 编译我的 iOS 应用程序。如果我完全关闭链接,它可以完全编译,但它也会生成一个不适合发布模式的巨大二进制文件。

不幸的是,我需要的库之一以某种方式调用了 Expression.Visit,并且我无法弄清楚如何指示链接器不将其删除。这会导致以下编译错误:

错误 MT2002:无法解析来自“System.Core,Version=2.0.5.0,Culture=neutral”的“System.Linq.Expressions.Expression System.Linq.Expressions.ExpressionVisitor::Visit(System.Linq.Expressions.Expression)”引用, PublicKeyToken=7cec85d7bea7798e" (MT2002) (MyApp)

As per 有关自定义链接的文档,我设置了一个链接器文件来尝试阻止这种情况发生:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="System.Linq.Expressions.ExpressionVisitor">
      <method signature="System.Linq.Expressions.Expression Visit(System.Linq.Expressions.Expression)" />
    </type>
  </assembly>
</linker>

不幸的是,这没有任何效果 - 错误就像以前一样发生。

该文档提到了一个preserve="fields"我可以提供的参数<type>,所以我尝试了:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="System.Linq.Expressions.ExpressionVisitor" preserve="methods" />
  </assembly>
</linker>

那也没用。

然后,我在文件中引入了 XML 语法错误,并且构建失败,表示无法解析链接器文件,因此我至少知道该文件正在被读取。

但后来我尝试在程序集名称中引入错误:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="NonexistentAssembly">
  </assembly>
</linker>

这导致了一个错误,抱怨程序集无法解析。

然后我尝试修改类型名称:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="NonExistentType" preserve="methods" />
  </assembly>
</linker>

现在,刚刚开始显示我之前看到的相同的“无法解析 expressionvisitor::visit”错误。似乎没有检查类型名称。

此外,签名名称也不是,因为这也出现了相同的编译错误。

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="System.Linq.Expressions.ExpressionVisitor">
      <method signature="jg98j23890rj2390erk90fk3ew!]['##'#'[" />
    </type>
  </assembly>
</linker>

因此,似乎只要指定程序集名称并具有有效的 XML 结构,链接器文件就不会引发任何异常。不过,对于如此复杂的主题,链接器文件的文档并不是特别详细,并且包含许多语法错误,即:

<type fullname="Foo" preserve="fields" />
    <method name=".ctor" />
</type>

另外,它没有给出链接器文件格式的技术描述,因此我的定义完全有可能是完全错误的。

我也尝试过完全跳过 System.Core 的链接--linkskip=System.Core但这没有效果。我已经尝试过使用和不使用这个标志--xml.

在 MvvmCross 项目中,我尝试指定一个新类来调用 Visit 方法,其风格与 MvvmCross NuGet 包添加到每个 iOS 项目的 LinkerPleaseInclude.cs 文件相同:

[Preserve]
public class PleaseIncludeVisitor : ExpressionVisitor
{
    public PleaseIncludeVisitor()
    {
        this.Visit(null);
    }
}

不幸的是,这也没有效果。

我目前使用 Mono 3.2.6 ((no/9b58377) 和 Xamarin.iOS v7.0.7.2。


主要问题是在 iOS 上不可能在运行时生成代码。

这意味着很大一部分System.Linq.Expressions would,通常情况下是不可能提供的(就像System.Refection.Emit无法提供)。

为了解决这个问题,Xamarin.iOS 提供了一种替代实现(可以解释最常见的表达式)。

但是,那current代码与 .NET 框架的 API 不 100% 兼容(已修复但尚未发布)。例如。

System.Linq.Expressions.Expression System.Linq.Expressions.ExpressionVisitor::Visit(System.Linq.Expressions.Expression)

以上返回void在当前的 Xamarin.iOS (7.0.x) 版本中。这就是链接器抱怨的原因(这不是错误),因为它找不到此成员引用(如果找不到它,则无法重新创建较小的链接程序集)。这是不可能的preserve不存在的成员(这就是为什么您尝试使用 XML 文件或属性没有帮助)。

The current解决方法是确定哪个程序集正在使用此 API 并重建它(从源代码)以使用现有的System.Core.dll随 Xamarin.iOS 一起提供。

Notes

我不知道如何指示链接器不将其删除。

链接器不会尝试把它去掉它试图保留它(即它必须加载引用才能将其保存回来)。但是它找不到该成员System.Core.dll使得无法提供valid程序集的链接版本。

<method signature="System.Linq.Expressions.Expression Visit(System.Linq.Expressions.Expression)" />

这是要求保留不存在的东西。它将被忽略,即当void-发现返回的版本与 XML 描述不匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin/MonoTouch:由于缺少符号而无法在“仅链接 SDK”模式下编译 的相关文章

  • 不支持使用 JDK 版本“11.0.1”进行构建。请安装 JDK 版本 `1.8.0`

    我已经下载了 Visual Studio for Mac 并尝试开始学习 Xamarin iOS 和 Android 问题是当我尝试运行 android 项目时出现以下错误 Building with JDK Version 11 0 1
  • 为什么 UIGraphics.GetCurrentContext 返回 null?

    我有一个 UIViewController 其中包含 2 个子视图 从 UIView 派生的类 它们使用 UIGraphics GetCurrentContext 进行自定义绘图 该绘图在应用程序启动时工作正常 我像这样连接视图控制器的 V
  • 预览 Xamarin 表单页面

    有没有办法在不先部署到设备 模拟器的情况下预览 Xamarin 表单页面 或者有什么方法可以实时编辑页面并查看某处的更改 有点像 WPF 的史努比 我尝试了 Xamarin Studio Visual Studio 但没有看到设计器 201
  • 在 Xamarin.Forms 上的图像顶部叠加标签、列表和按钮

    我想制作一个页面 其中有一张图片 基本上页面上的其他所有内容都位于图像之上 与此类似的东西 XAML 代码如下
  • UIImage 数据始终处于横向模式

    似乎当我用相机以肖像模式拍照时 UIImage具有正确的尺寸 长宽比 1536x2048 3 4 和方向 右 导出到文件 带有UIImage AsPNG Save 它始终以横向模式显示 2048x1536 4 3 这是真的吗 还是我做错了什
  • GetAsync 请求返回空内容

    我想知道为什么当我在邮递员中尝试它有数据返回时它返回 null 这是我的代码 public async Task
  • Xamarin - 未找到类(Android 支持库)

    我正在尝试使用 AppCompat 实现具有向后兼容性的 Material Design 继tutorial https blog xamarin com android tips hello material design v7 appc
  • Xamarin.Forms 绘图[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为客户构建一个 Xamarin Forms 项目 我们需要一个图形库它将处理实时流式传输的数据连
  • Xamarin.iOS 目标 iOS 6 SDK

    我们已升级到 XCode 5 和 Xamarin iOS 7 x 但有一个应用程序尚未准备好支持 iOS 7 有没有办法以 iOS 6 0 SDK 为目标 并编译应用程序 使其具有旧的 iOS 6 键盘等 我们尝试更改 iOS Build
  • iPhone 相当于 Application.DoEvents();

    iPHone 我们使用 MonoTouch 但 Obj C 答案还可以 我的单例域对象需要一段时间才能获取所有数据 因此它在线程中内部运行部分获取数据 我需要通知 UI 域已完成 目前我正在这样做 有没有更好的办法 在 WinForms 中
  • Xamarin.forms 长时间运行的后台工作

    我是 Xamarin 平台的新手 我正在使用 Xamarin forms 为所有三个主要平台 WP iOS Android 开发应用程序 如何在后台与我的服务器同步数据 gt 我需要类似于 Android Service 的东西 即使用户转
  • 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

    我正在使用 Xamarin Forms 构建 iOS Android 应用程序 并有一个 TabbedPage 如果用户已经在选项卡 2 上 并且单击了选项卡 2 并且我希望刷新选项卡 2 或者运行我自己的函数 以便我可以自己刷新它 有没有
  • Xamarin Android Webview Javascript

    我正在尝试通过 Xamarin for Android 创建一个移动应用程序 它有一个显示网站的 WebView 问题是正常按钮会触发 但 javascript 事件不会触发 我已经启用了 Javascript 但没有运气 如何在 Andr
  • 警告:在 Visual Studio 2015 中创建跨平台 Xamarin 空白应用程序(Xamarin.Form 便携式)

    每当我尝试创建上述类型的新项目时 我都会收到以下 4 个警告 预更新 Nuget 1 Warning IDE0006 Error encountered while loading the project Some project feat
  • 为什么 LambdaExpression.Compile() 在 iOS (Xamarin) 上工作?

    由于 Xamarin iOS 不支持在运行时生成代码 为什么 Compile 和 DynamicInvoke 按预期工作 例如 以下代码可以正常工作 var lambda Expression Lambda Expression Add E
  • UIRotationGesture 之后重置视图

    我在 UIImageView 上有一个 UIRotationRecognizer 旋转视图后 我想提交更改 以便下次旋转图像时它会自然旋转 目前 使用下面的代码 释放触摸并尝试再次旋转后 原点似乎已关闭 Export RotationSel
  • 如何知道我安装的是哪个版本的 monotouch?

    如何知道我安装的是哪个版本的 monotouch 有多种方法可以获取版本号 从终端您可以执行以下操作 Developer MonoTouch usr bin mtouch version mtouch 5 3 5 1340204820 or
  • 加载图像时出现 OutOfMemoryError

    我有一个显示图像的简单页面 来源是一个 URL var img new Image var source new UriImageSource Uri new Uri string Format http xxxx com imagem 0
  • async/await 可以了解 Android Activity 生命周期吗?

    我一直想知道如何使用 async await 在 Android 上生成响应式 UI 我一直在围绕异步函数使用一个简单的 pub sub 包装服务 这是相当多的样板文件 但可以工作 但我对此感到很痒 这告诉我应该有更好的方法 对包装服务的需
  • 用于页面之间导航的自定义动画 Xamarin.forms?

    我使用 Xamarin Forms 创建简单的应用程序 需要将导航设置为上下左右状态 如果你想要上下动画 不是自定义动画 你可以简单地使用Navigation PushModalAsync page 来呈现页面 此外 我刚刚编写了一个自定义

随机推荐

  • SQL Server - Guid VS。长的

    到目前为止 我一直在使用 C Guid Guid NewGuid 方法生成一个唯一的 ID 该 ID 可以使用 Linq to SQL 作为 ID 字段存储在我的一些 SQL Server 数据库表中 我被告知 出于索引原因 使用 GUID
  • 在SQLite UPDATE中模拟ORDER BY来处理唯一性约束

    我在 SQLite 3 中有一个表 sqlite gt schema CREATE TABLE table1 id INTEGER PRIMARY KEY NOT NULL title TEXT UNIQUE NOT NULL priori
  • 解决ReferenceError:Next.js中未定义localStorage [重复]

    这个问题在这里已经有答案了 我构建了一个 React 现在我尝试从 React Router dom 迁移到 Next js 我进行了重大更改并重构了代码 pages routes 和 store js 但后来我收到此错误 Referenc
  • 为什么在数据库设计中使用一对一关系?

    我很难弄清楚何时在数据库设计中使用一对一关系或者是否有必要 如果您只能选择查询中所需的列 是否有必要将表分解为一对一的关系 我想更新一个大表比更新一个小表对性能有更大的影响 我确信这取决于表用于某些操作 读 写 的程度 那么 在设计数据库模
  • Ninject 支持 Func(自动生成工厂)吗?

    Autofac 自动生成工厂Func
  • 什么是单一定义规则?

    C 中的单一定义规则到底说了什么 我能找到的唯一值得信赖的事件是C 编程语言 第三 编辑 第 9 2 3 页 除此之外 该规则还有其他官方定义吗 真相就在标准中 3 2 一个定义规则 任何翻译单元均不得包含更多内容 比任何变量的一个定义 函
  • 带有 dnx 项目的 EF 6

    我有一个新的 ASP net 5 dnx 类库 用于实体框架 我需要以 EF 6 为目标 因为我需要的某些功能在 EF 7 中没有 首先 EF 工具 如启用迁移 不存在 我添加了一个旧式类库并安装了 EF 6 现在命令就在那里 当我运行启用
  • 我无法从 Erlang shell 中输入一行得到结果

    I typed erl启动 erlang shell Eshell V5 7 4 外壳启动 但是 如果我在 shell 中输入一些表达式 例如 20 30 并按 Enter 键 我会回到 1 gt 并且不会显示表达式的结果 什么可能导致这个
  • FFT 高斯模糊

    我正在尝试使用 FFT 来实现高斯模糊 并且可以在这里找到以下方法 这意味着您可以采取 图像的傅里叶变换和 过滤 乘以 复数 结果 然后取逆 傅里叶变换 我有一个内核 K 一个 7x7 矩阵 和一个图像输入 一个 512x512 矩阵 我不
  • 如何在 MATLAB 中将日期转换为数字并再转换回来

    我有日期 2010年1月11日 并使用该功能 日期 年 A1 月 A1 日 A1 使用 Excel 将日期转换为数字 40189 我可以使用 MATLAB 将数字 40189 再次转换回日期吗 Use DATESTR gt gt dates
  • 此 iPhone 6 运行的是 iOS 12.4.1 (16G102),该版本的 Xcode 可能不支持

    收到错误 这款 iPhone 6 运行的是 iOS 12 4 1 16G102 可能不是 此版本的 Xcode 支持 更新 iPhone 后尝试在 iPhone 上运行该应用程序时 我知道我可以更新 Xcode 和系统 问题就会得到解决 但
  • Jasper 报告缺少第一行

    我正在使用生成报告贾斯珀报告并假设将其导出为多种格式 但目前我只使用 Excel 报告 这是我的控制器代码 InputStream in reportTemplate getTemplate reportInquery getTemplat
  • Android 从视频中去除音频

    在我的程序中 它获取 MP4 视频 我希望它输出 MP3 没有任何服务器端内容 由于 Android 和我的应用程序 需要在许多不同的硬件配置上运行 这意味着我可能无法使用 FFMPEG 我知道这可能非常消耗电池和处理能力 尤其是对于手机而
  • PHP XSS 问题/澄清

    之前已经有人问过这个问题 但我需要 100 清楚地了解这个问题 因为正确解决这个问题对我来说非常重要 情况 网站上的消息系统 用户在文本框中输入消息 提交表单并将其输入数据库 然后可以从数据库中调用该数据并在其中显示 span 标签到另一个
  • 如何使用 Zend Framework 2 使用 Rest API

    有人可以提供一个在 Zend Framework 2 中使用第三方 Rest API 例如 someurl 的示例吗 在 ZF1 中使用 Zend Rest 非常简单 我不想在我的应用程序中创建其余 api 只是使用第三方 API Than
  • 带文件附件的 PHP Curl 帖子;自定义内容类型标头

    我必须将文件连同一些发布参数一起发布到服务器 我从该服务器管理员收到的文档显示了发布请求应该是什么样子的示例 请注意 POST multipart x api remote integration 的自定义内容类型 POST gateway
  • 通过Java程序禁用Ctrl-Alt-Delete事件

    I am creating a desktop application using the JDesktopPane I m almost complete but when I press ctrl alt del it leaves m
  • 我尝试使用 ajax 和 symfony 上传文件

    我正在使用 Symfony 2 7 我收到了这个表格
  • 将 QNetworkReply 写入文件

    我正在使用 QNetworkAccessManager get 下载文件 但与 QHttp get 不同 没有内置方法可以直接将响应写入不同的 QIODevice 最简单的方法是做这样的事情 QIODevice device QNetwor
  • Xamarin/MonoTouch:由于缺少符号而无法在“仅链接 SDK”模式下编译

    我正在尝试在仅 Link SDK 模式下使用 MonoTouch 编译我的 iOS 应用程序 如果我完全关闭链接 它可以完全编译 但它也会生成一个不适合发布模式的巨大二进制文件 不幸的是 我需要的库之一以某种方式调用了 Expression