gpt4 book ai didi

linker - xamarin.ios/monotouch、mvvmcross 和链接问题

转载 作者:行者123 更新时间:2023-12-04 17:10:36 24 4
gpt4 key购买 nike

我有一个恼人的问题,如果我只在 xamarin studio 中使用 Link SDK Assemblies,我会得到一个异常,如果我使用不链接,则不会发生异常。我已将问题定位为我正在使用的第三方 dll(视频流服务的 api)的一部分。我相信链接器正在剥离这个 dll 使用的一些方法。
是否可以跳过某些库的链接,是否可以从该堆栈跟踪中查看哪些库。

    2013-05-08 14:40:54.688 AppsfabrikkenTouch[5662:907] mvx: Diagnostic:  18,23 Exception masked NullReferenceException: Object reference not set to an instance of an object
at System.Delegate.Combine (System.Delegate a, System.Delegate b) [0x00018] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System/Delegate.cs:473
at Cirrious.MvvmCross.ViewModels.MvxNotifyPropertyChanged.add_PropertyChanged (System.ComponentModel.PropertyChangedEventHandler value) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Bindings.Source.MvxBasePropertyInfoSourceBinding..ctor (System.Object source, System.String propertyName) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Bindings.Source.MvxPropertyInfoSourceBinding..ctor (System.Object source, System.String propertyName) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Bindings.Source.Construction.MvxSourceBindingFactory.CreateBinding (System.Object source, IEnumerable`1 childPropertyNames) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Bindings.Source.Construction.MvxSourceBindingFactory.CreateBinding (System.Object source, System.String combinedPropertyName) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Binders.MvxFullBinding.CreateSourceBinding (System.Object source) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Binders.MvxFullBinding..ctor (Cirrious.MvvmCross.Binding.Interfaces.MvxBindingRequest bindingRequest) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Binders.MvxFromTextBinder.BindSingle (Cirrious.MvvmCross.Binding.Interfaces.MvxBindingRequest bindingRequest) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Binders.MvxFromTextBinder+<>c__DisplayClass1.<Bind>b__0 (Cirrious.MvvmCross.Binding.Interfaces.MvxBindingDescription description) [0x00000] in <filename unknown>:0
at System.Linq.Enumerable+<CreateSelectIterator>c__Iterator1D`2[Cirrious.MvvmCross.Binding.Interfaces.MvxBindingDescription,Cirrious.MvvmCross.Binding.Interfaces.IMvxUpdateableBinding].MoveNext () [0x00000] in <filename unknown>:0
at System.Collections.Generic.List`1[Cirrious.MvvmCross.Binding.Interfaces.IMvxUpdateableBinding].AddEnumerable (IEnumerable`1 enumerable) [0x00000] in <filename unknown>:0
at System.Collections.Generic.List`1[Cirrious.MvvmCross.Binding.Interfaces.IMvxUpdateableBinding].AddRange (IEnumerable`1 collection) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, IEnumerable`1 bindings) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, System.Object source, System.Object target, System.String bindingText) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, System.Object source, IDictionary`2 bindingMap) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Touch.ExtensionMethods.MvxBindingTouchExtensions.AddBindings (IMvxBindingTouchView view, IDictionary`2 bindingMap) [0x00000] in <filename unknown>:0
at CmsApp.Touch.TabTextView.ViewDidLoad () [0x00074] in /Volumes/2end HDD/Dropbox/AppProjects/Appsfabrikken/CmsApp.Touch/Views/UmbracoViews/TabTextView.cs:45
at MonoTouch.UIKit.UINavigationController.PushViewController (MonoTouch.UIKit.UIViewController viewController, Boolean animated) [0x00019] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UINavigationController.g.cs:178
at CmsApp.Touch.AppPhonePresenter.Show (IMvxTouchView view) [0x0007b] in /Volumes/2end HDD/Dropbox/AppProjects/Appsfabrikken/CmsApp.Touch/AppPhonePresenter.cs:62
at Cirrious.MvvmCross.Touch.Views.Presenters.MvxTouchViewPresenter.Show (Cirrious.MvvmCross.Views.MvxShowViewModelRequest request) [0x00000] in <filename unknown>:0
at CmsApp.Touch.AppPhonePresenter.Show (Cirrious.MvvmCross.Views.MvxShowViewModelRequest request) [0x00000] in /Volumes/2end HDD/Dropbox/AppProjects/Appsfabrikken/CmsApp.Touch/AppPhonePresenter.cs:37
at Cirrious.MvvmCross.Touch.Views.MvxTouchViewDispatcher+<>c__DisplayClass1.<RequestNavigate>b__0 () [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Touch.Views.MvxTouchUIThreadDispatcher+<>c__DisplayClass1.<InvokeOrBeginInvoke>b__0 () [0x00000] in <filename unknown>:0

任何帮助表示赞赏。

更新:
正如斯图尔特(感谢斯图尔特)所建议的,我添加了一个 LinkerPleaseInclude 文件,其中包含以下内容:但它仍然出现异常。
class LinkerIncludePlease
{
private void DelegateCombine(Delegate a, Delegate b)
{
var d = Delegate.Combine(a,b);
}

private void DelegateCombine(params Delegate[] delegates)
{
var d = Delegate.Combine(delegates);
}

private void DelegateCombine()
{
var d = Delegate.Combine();
}

}

我的想法是它必须与堆栈跟踪有关
Exception masked NullReferenceException: Object reference not set to an instance of an object
at System.Delegate.Combine (System.Delegate a, System.Delegate b) [0x00018]

但似乎并没有做到这一点 - 有什么指示可以找到被剥离的内容吗?

最佳答案

Is it possible skip link of some libraries



是的。您可以使用 --linkskip=ASSEMBLY 将问题(并 100% 确定其来源)隔离到您的第 3 方。选项(在项目选项中的 其他 mtouch 参数 中)。它也可以用作发布解决方法(但您最好找到更精确的解决方案来从链接器中获得全部好处)。

例如。 --linkskip=mscorlib会跳过 mscorlib.dll(即没有文件扩展名)

is it possible to see which from this stacktrace ?



不完全的。问题不在于 System.Delegate.Combine .由于它在堆栈跟踪中命名,因此您知道它不会被链接器删除。

OTOH 它的一个论点(一个代表)可能会被删除。如果它是使用反射创建的(因为链接器使用静态分析),则可能(最有可能)发生这种情况。您可以使用堆栈跟踪查看 Combine 中应该使用什么(类型)。调用并从那里向后工作,例如找到它是如何创建的。

一旦找到它,您就会希望链接器保留它。您可以通过添加额外的、不需要的代码(如@Stuart 建议的)来实现。我个人的建议是:
  • 使用 [Preserve]拥有源代码时的属性;
  • 使用 XML file (和 --xml=file )当您没有源代码时;
  • 关于linker - xamarin.ios/monotouch、mvvmcross 和链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441506/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com