【问题标题】:XSD.EXE to generate F# Classes off of XSDXSD.EXE 从 XSD 生成 F# 类
【发布时间】:2011-05-18 15:55:27
【问题描述】:

我正在尝试使用工具 XSD.EXE 从 XSD 生成一些类文件。是否可以从生成的文件中获得任何东西是另一个问题,但我想看看生成了什么。我找到了这个reference,其中注释:

感谢 Luke 在 F# Visual Studio 团队,意味着我能做到 这个:

xsd.exe fpml-asset-4-z.xsd /classes /l:”Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider, FSharp.Compiler.CodeDom, Version=1.9.9.9, Culture=neutral, PublicKeyToken=a19089b1c74d0809″

这太棒了。我没有相同版本的代码 dom - 所以查看 GAC 我将行更改为:

xsd.exe RIXML-datatypes-2_3_1.xsd /classes /l:"Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider, FSharp.Compiler.CodeDom, Version=2.0.0,0, Culture=neutral, PublicKeyToken=a19089b1c74d0809"

产量:

C:\Users\Desktop\CSharpSamples\ResearchUploader\Fc-RixmlLib>xsd.exe RIXML-datatypes-2_3_1.xsd /classes /l:"Microsoft.FSharp.Compiler.CodeDom.FSharpCodePr ovider, FSharp.Compiler.CodeDom, 版本=2.0.0,0,文化=中性, PublicKeyToken=a19089b1c74d0809" Microsoft (R) Xml 架构/数据类型 支持实用程序 [Microsoft (R) .NET 框架,版本 4.0.30319.1] 版权所有 (C) 微软公司。 版权所有。错误:给定的 程序集名称或代码库无效。 (HRESULT 异常:0x80131047)

如果您需要更多帮助,请 输入“xsd /?”。

想法?

【问题讨论】:

  • 你解决了这个问题吗?

标签: f# xsd.exe


【解决方案1】:

我遇到了同样的问题“HRESULT 异常:0x80131047” - 没有设法解决它,但有一个丑陋的解决方法:

  1. 创建一个新的 C# 控制台应用程序
  2. 请参阅this post,了解如何以编程方式执行与 xsd.exe 相同的操作
  3. 添加对 F# powerpack 的 CodeDom dll 的引用
  4. 使用 Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider 而不是 CSharpCodeProvider

花了一个小时试图让 xsd.exe 工作,我只用了 5 分钟就以这种方式强制它..

这可以很容易地制作成xsdfs.exe或其他东西,以省去人们制作xsd.exe使用f#代码dom的麻烦:)

【讨论】:

    【解决方案2】:

    这对我来说是正确的。您能否再次检查该程序集是否已安装在 GAC 中?
    这是您可以在“Visual Studio 命令提示符”中输入的命令:

    > gacutil -l | find "FSharp.Compiler.CodeDom"
    

    我明白了:

    FSharp.Compiler.CodeDom, Version=2.0.0.0, Culture=neutral, 
    PublicKeyToken=a19089b1c74d0809, processorArchitecture=MSIL
    

    【讨论】:

    • Y - 这似乎产生了同样的事情。我尝试生成 C# 并且 XSD.exe 给了我一个不同的错误 - 架构缺少顶级元素。如果错误在 f# 下没有正确冒泡,我不会感到惊讶,但在这种情况下,我不相信这是导致我最初错误的原因。
    • 这里有同样的问题 - 仔细检查 GAC 中是否存在程序集。
    【解决方案3】:

    省略Microsoft 部分,安装到 GAC 后,它应该可以工作。他们不久前改名了。

    在安装(反汇编和汇编 - ildasm,gacutil fun)之后,我可以同时使用xsd.exe 和编辑器内 C# 方法(重写为 F#)。谢谢:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2016-11-15
      • 2010-11-07
      • 1970-01-01
      相关资源
      最近更新 更多