【发布时间】:2015-11-12 19:05:45
【问题描述】:
我目前正在将我们的 .net 业务对象库转换为 PCL 文件,以便它可以与 Xamarin IOS/Android 一起使用,虽然它主要包含 POCO 对象,但它也包含自定义异常,但这会引发错误。
采用典型的自定义异常:
[Serializable]
public class EncryptKeyNotFoundException : Exception
{
public EncryptKeyNotFoundException()
: base() { }
public EncryptKeyNotFoundException(string message)
: base(message) { }
public EncryptKeyNotFoundException(string format, params object[] args)
: base(string.Format(format, args)) { }
public EncryptKeyNotFoundException(string message, Exception innerException)
: base(message, innerException) { }
public EncryptKeyNotFoundException(string format, Exception innerException, params object[] args)
: base(string.Format(format, args), innerException) { }
protected EncryptKeyNotFoundException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}
正如预期的那样,PCL 不喜欢[Serializable] 和SerializationInfo。虽然我可能会坚持 [DataContract] 而不是使用[Serialiable],但它仍然无法解决SerializationInfo 的问题。
有没有办法规避这个问题?
谢谢。
更新:
我按照建议查看了Implementing custom exceptions in a Portable Class Library,但无法识别以下 2 个属性:
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
我一定是缺少一个引用,但是是哪个程序集?
我目前正在寻找Portable class library: recommended replacement for [Serializable] 中提供的替代解决方案
希望这会奏效。一旦我有更多信息可以提供,我会更新我的答案。
更新:
ClassInterfaceAttribute 是 System.RunTime.InteroServices 的一部分,但我无法将其添加到我的 PCL 项目中,至少它不可见。我错过了什么吗?
另一篇文章提供了额外的信息,看起来在使用条件编译时,这应该可以工作,但同样,虽然 json 库中的示例代码似乎可以工作,但我必须遗漏一些东西,因为我无法添加参考所以[Serializable] 不会引发错误,但我似乎无法这样做。
我尝试过的一件事是简单地注释掉:
protected EncryptKeyNotFoundException(SerializationInfo info,
StreamingContext context) : base(info, context) { }
我可以编译我的 pcl 项目了,所以问题是我需要这个吗?
谢谢。
【问题讨论】:
-
我找到了这篇文章,但认为它不相关。完成后我会试一试并更新。谢谢。
-
我已经更新了我的答案,但不幸的是,它没有帮助。我错过了什么吗?
-
从您的更新看来,您误解了建议的答案。我不能在评论中添加太多解释,所以在答案中添加。
标签: c# xamarin xamarin.ios xamarin.android portable-class-library