System.Runtime.Serialization.Json .NetStandard 上的 nuget 包错误
System.Runtime.Serialization.Json nuget package error on .NetStandard
我在 .NetStandard repository but they just didn't care for 12 days for now.. So, I wanted to try Whosebug. Here is 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
class 没有继承 System.Runtime.Serialization.Xml nuget 包中的 XmlObjectSerializer
class。我可以看到,一般来说,这两个 nuget 包之间没有依赖关系;但是,如果您检查 .Net Framework 4 和更高版本 DataContractJsonSerializer
总是继承自 XmlObjectSerializer
,因为据我所知,每个 DataContractSerializer 都继承自 XmlObjectSerializer
。即使在这个存储库中,这种继承也存在:
https://github.com/dotnet/standard/blob/master/netstandard/ref/System.Runtime.Serialization.cs#L332
关于这种情况,你能给我什么建议?我做错了什么吗?
不要使用基于 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 项目,使用实际支持 .NET Standard 2.0 的工具(VS 2017,CLI 2.0.0)。
请注意,在 .NET Standard < 2.0 中,DataContractJsonSerializer
并未继承自 XmlObjectSerializer
- 这是您通过引用的 NuGet 包获得的包(因为您缺少的工具删除此包并添加正确的 .NET Standard 参考程序集)。
我在 .NetStandard repository but they just didn't care for 12 days for now.. So, I wanted to try Whosebug. Here is 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
class 没有继承 System.Runtime.Serialization.Xml nuget 包中的 XmlObjectSerializer
class。我可以看到,一般来说,这两个 nuget 包之间没有依赖关系;但是,如果您检查 .Net Framework 4 和更高版本 DataContractJsonSerializer
总是继承自 XmlObjectSerializer
,因为据我所知,每个 DataContractSerializer 都继承自 XmlObjectSerializer
。即使在这个存储库中,这种继承也存在:
https://github.com/dotnet/standard/blob/master/netstandard/ref/System.Runtime.Serialization.cs#L332
关于这种情况,你能给我什么建议?我做错了什么吗?
不要使用基于 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 项目,使用实际支持 .NET Standard 2.0 的工具(VS 2017,CLI 2.0.0)。
请注意,在 .NET Standard < 2.0 中,DataContractJsonSerializer
并未继承自 XmlObjectSerializer
- 这是您通过引用的 NuGet 包获得的包(因为您缺少的工具删除此包并添加正确的 .NET Standard 参考程序集)。