.NET Framework 4.7项目中的.NET标准类库

时间:2017-06-09 03:44:02

标签: c# .net asp.net-core .net-standard-1.6

我希望在.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?

1 个答案:

答案 0 :(得分:2)

您无法使用.NET Core运行时使用BinaryFormatter进行序列化,但您至少可以使用此nuget包进行交叉编译

https://www.nuget.org/packages/System.Runtime.Serialization.Formatters/

请注意,虽然与.NET Standard的程序集绑定完全混乱,并且没有大量的程序集重定向,您的代码将编译正常但在运行时抛出程序集未找到的异常。据说.NET Standard 2.0会解决这个问题,但我并没有屏住呼吸。