Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从.NET标准库中的类生成XML模式?_C#_Xml_Xsd.exe_.net Standard 2.1 - Fatal编程技术网

C# 如何从.NET标准库中的类生成XML模式?

C# 如何从.NET标准库中的类生成XML模式?,c#,xml,xsd.exe,.net-standard-2.1,C#,Xml,Xsd.exe,.net Standard 2.1,在过去,我一直使用xsd.exe从.NETFramework库中的类生成XML模式 现在,我想对.NET标准2.1库中的某些类执行相同的操作,但我得到了一个错误 运行 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\xsd.exe $(BinDir)$(TargetName).dll /type:$(ItemFileName) 从Package Manager控制台,我可以看到: Microsof

在过去,我一直使用xsd.exe从.NETFramework库中的类生成XML模式

现在,我想对.NET标准2.1库中的某些类执行相同的操作,但我得到了一个错误

运行

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\xsd.exe $(BinDir)$(TargetName).dll /type:$(ItemFileName)
从Package Manager控制台,我可以看到:

Microsoft(R)Xml架构/数据类型支持实用程序[Microsoft(R) .NET Framework,版本4.8.3928.0]版权所有(C)Microsoft 公司版权所有。错误:处理时出错 ''

  • 无法加载一个或多个请求的类型。有关详细信息,请检索LoaderExceptions属性
也许,这并不奇怪,但我找不到更新版本的xsd.exe的文档,也找不到生成XML模式的替代方法的文档。在.NET核心SDK中找不到xsd.exe。而且,事实上,目前开放的票证表明,对于.NETCore没有支持。对于.NET标准来说,情况可能也是如此


如果将类复制到.NETFramework项目中,我可能会工作,但这感觉很愚蠢。尽管如此,我还是可以回到这一点。

为什么不在.NET旧项目中使用.NET标准库呢?这就是.NET标准的目的。创建可在项目之间共享的库。看起来真正的问题是.NET标准库太大了,它包含需要在项目之间共享的DTO和其他只与其中一个项目相关的内容。我怀疑真正的解决方案是将DTO提取到它们自己的库中,并在所有项目中使用。在任何情况下,
xsd.exe
都是一个遗留工具。2006年WCF问世时,它被
svcutil
取代,使用了更好的序列化程序,并且与(当时新的)模式和互操作性标准的一致性更好。在.NET Core中,等效的工具是全局工具。为什么要使用
xsd
而不是
svcuti
svcutil
xsd
更严格,因此如果您不能使用
svcutil
生成模式,这意味着该类有问题,而不是工具,它使用了无法轻松转换的结构,如choice或匿名类型
xsd
将通过使用像
XmlItem
这样的泛型类型来解决这些问题,这使得生成的模式毫无用处。在这两种工具中,您都可以使用attributes@PanagiotisKanavos我不确定我是否正确理解你。NET旧项目本身不存在。你是说解决方案吗?我目前不在解决方案之间共享此代码。我认为实际的代码库不是问题所在,而是.NET framework和.NET标准程序集的结构之间的差异。@PanagiotisKanavos我没有使用
svcutil
,因为我不知道它的存在。我试试看。谢谢