.NET Standard Class .NET Framework 4.7 项目中的库

.NET Standard Class Library in .NET Framework 4.7 project

我想在 .NET Framework 4.7 解决方案和 .NET Core 解决方案之间共享代码以用于 AWS Lambda。

我已经创建了一个 .NET Standard 1.6 class 库项目,并将一些代码从 .NET Framework 4.7 解决方案移到了这个项目中以便共享它。

除一件事外一切正常 - 代码用于 DTO class,由 .NET 解决方案中的 BinaryFormatter 序列化。

例如:

[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 解决方案中,我(非常正确地)收到此错误:

Error CS0433 The type 'SerializableAttribute' exists in both 'AutoGuru.Shared.Quoting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

有没有办法在 .NET Standard 1.6 class 库中的 class 上使用 BinaryFormatter?

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

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

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