【问题标题】:System.Runtime.Serialization.Json nuget package error on .NetStandard.NetStandard 上的 System.Runtime.Serialization.Json nuget 包错误
【发布时间】:2017-11-14 04:56:01
【问题描述】:

我在.NetStandard repository 上发布了一个问题,但他们暂时不关心 12 天。所以,我想试试 Stackoverflow。这里是the link of my issue

我已经开始在 Visual Studio 2015 中使用 .NetCore version=1.0.0-preview2-003121。我的 project.json 文件如下:

{
  "version": "1.0.0-*",
  "frameworks": {
    "netstandard2.0": {
      "dependencies": {
        "System.Runtime.Serialization.Xml": "4.3.0",
        "System.Runtime.Serialization.Json": "4.3.0"
      }
    }
  }
}

我的代码文件如下:

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace NetCoreTests
{
    public class Class1
    {
        public Class1()
        {
            XmlObjectSerializer ser = new DataContractJsonSerializer(typeof(int));
        }
    }
}

这是我在尝试构建解决方案时遇到的错误:

CS0029  Cannot implicitly convert type 'System.Runtime.Serialization.Json.DataContractJsonSerializer' 
to 'System.Runtime.Serialization.XmlObjectSerializer'   NetCoreTests..NETStandard,Version=v2.0

看起来 System.Runtime.Serialization.Json nuget 包中的 DataContractJsonSerializer 类不继承 System.Runtime.Serialization.Xml nuget 包中的 XmlObjectSerializer 类。我可以看到,这两个 nuget 包之间通常没有依赖关系;但是,如果您检查 4 及更高版本的 .Net Framework DataContractJsonSerializer 始终继承自 XmlObjectSerializer,因为据我所知,每个 DataContractSerializer 都继承自 XmlObjectSerializer。即使在这个存储库中,这种继承也存在: https://github.com/dotnet/standard/blob/master/netstandard/ref/System.Runtime.Serialization.cs#L332

您对这种情况有什么建议?我是不是做错了什么?

【问题讨论】:

    标签: .net visual-studio-2015 nuget-package .net-standard


    【解决方案1】:

    不要使用基于 VS 2015 的 .NET Core / .NET Standard 预览工具来尝试构建 .NET Standard 2.0。

    如果您使用 VS 2017 / .NET Core SDK 2.0.0+,那么您将获得要构建的正确参考程序集(从 NETStandard.Library 2.0.0 NuGet 包中提取 - System.* 包由msbuild 逻辑(如果它们被引用)。

    您的代码示例使用实际支持 .NET Standard 2.0(VS 2017,CLI 2.0.0)的工具使用新的 .NET Standard 2.0 项目工作。

    请注意,在 .NET Standard DataContractJsonSerializer 没有从 XmlObjectSerializer 继承 - 这是您通过引用的 NuGet 包获得的那个(因为您缺少修剪此包并添加的工具正确的 .NET Standard 参考程序集)。

    【讨论】:

    • 对于 .NetStandard2.0,您是对的:上面的代码正在运行。但对于其他版本(1.0 - 1.6 之间)它不起作用。看起来它已经在 .NetStandard2.0 中解决了;但问题是它仍然无法在 VS2015 中工作;即使使用 .NetStandard2.0 :)。
    • 在 XmlObjectSerializer。您可以尝试使用 NETStandard.Library 2.0.0 来代替,但又一次 - .net 标准 2.0 有很多重大更改,只有新工具知道如何处理这些
    • 是的。但问题是,即使在带有 .NetStandard1.6 + System.Runtime.Serialization.Json nuget 包 + System.Runtime.Serialization.Xml nuget 包的 vs2017 中,它也会出错。所以它与小于 2.0 的 vs2017、vs2015 或 .netstandard 版本无关。这是关于 nuget 包的。 nuget 包中的程序集强制 DataContractJsonSerializer 不从 XmlObjectSerializer 继承。
    • @martin-ulrich:请检查此配置(vs2017 + .NetStandard1.6 +System.Runtime.Serialization.Json nuget 包 + System.Runtime.Serialization.Xml nuget 包),你会发现可以合理地说“问题出在 nuget 包中”:)
    • 我在上面写过,甚至补充说对于XmlObjectSerializer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多