我希望在.NET Framework 4.7解决方案和.NET Core解决方案之间共享代码,以便在AWS Lambda中使用。
我创建了一个.NET Standard 1.6类库项目,并已将.NET Framework 4.7解决方案中的一些代码移动到此项目中,以便共享它。
一切正常,除了一件事 - 该代码适用于由.NET解决方案中的BinaryFormatter序列化的DTO类。
例如:
[Serializable]
public class BillableOptionalOperationDto
{
public string OperationDescription { get; set; }
public string Note { get; set; }
public decimal UnitPriceIncGst { get; set; }
}
我创建了一个polyfill,以便代码在.NET Standard项目中编译。
namespace System
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate)]
public class SerializableAttribute : Attribute
{
}
}
.NET Standard项目作为Nuget包发布到TeamCity中的Nuget服务器。
在.NET Framework解决方案中,我(非常正确地)得到了这个错误:
错误CS0433类型' SerializableAttribute'存在于两者中 ' AutoGuru.Shared.Quoting,Version = 1.0.0.0,Culture = neutral, 公钥=空'和' mscorlib,版本= 4.0.0.0,文化=中立, 公钥= b77a5c561934e089'
有没有办法在.NET Standard 1.6类库中的类上使用BinaryFormatter?
答案 0 :(得分:2)
您无法使用.NET Core运行时使用BinaryFormatter进行序列化,但您至少可以使用此nuget包进行交叉编译
https://www.nuget.org/packages/System.Runtime.Serialization.Formatters/
请注意,虽然与.NET Standard的程序集绑定完全混乱,并且没有大量的程序集重定向,您的代码将编译正常但在运行时抛出程序集未找到的异常。据说.NET Standard 2.0会解决这个问题,但我并没有屏住呼吸。