【发布时间】:2018-11-16 12:01:14
【问题描述】:
我正在针对我的 Mac 构建主机从 Visual Studio 构建我的 Xamarin.iOS 应用,并使用 PostSharp 对输出执行 AOP,然后将二进制文件发送到我的 Mac 构建主机以进行 AOT/本机编译。
PostSharp 将一些隐藏的实现类型注入到我的应用程序未引用的目标程序集中,因此 AOT 编译器将它们从生成的二进制文件中删除,因为我使用的是“链接全部”选项。
将“Link All”选项更改为“Link SDK”或“None”可以解决问题,但会产生非常大的二进制文件,因此无法用于发布应用程序。
由于代码是由工具生成的,我不能直接在代码上使用 [Preserve] 属性,而且因为它是内部/私有的,我无法在我的应用程序代码中手动引用它。
根据以下文档,我可以指定一个链接器 xml 文件来手动指定类型名称:
https://developer.xamarin.com/guides/cross-platform/advanced/custom_linking/
我已成功地将这种技术用于我的 Xamarin.Android 应用程序,并且在 Mac 上的 Xamarin Studio 中编译我的 Xamarin.iOS 应用程序时也可以成功地使用这种技术。
但是,在从 Visual Studio 2015 编译 Xamarin.iOS 应用程序时,我无法弄清楚如何实现这一点。虽然我可以在 .csproj 文件中添加必要的 mtouch 参数,但我无法弄清楚如何将 xml 文件传递到构建过程中的 Mac 构建主机。
【问题讨论】:
-
链接器 XML 是否被复制到构建主机?您应该在构建输出中看到它。要检查的一件事是在项目中以正确的类型引用了该文件。我遇到了未将未引用的资产复制到 mac 构建主机的问题。它们在 Xamarin Studio 中运行良好,因为它们不需要被引用来工作,而是将 Visual Studio 与它们丢失的远程主机一起使用。
标签: xamarin visual-studio-2015 xamarin.ios