代码之家  ›  专栏  ›  技术社区  ›  lm.

使用xsd.exe生成架构

xsd
  •  5
  • lm.  · 技术社区  · 15 年前

    我正在用xsd.exe从程序集生成某种类型的架构 以下是命令行:

    xsd.exe TestAssemby.dll /t:TestType
    

    我有个错误:

    错误:处理“testesssemby.dll”时出错。 无法加载一个或多个请求的类型。检索loaderExceptions属性以获取详细信息

    我将引用的dll复制到 this .

    但还是会有同样的错误

    我有问题:

    • 这种错误的可能原因是什么?
    • 应如何使用LoaderExceptions属性?(示例将非常有用)
    4 回复  |  直到 7 年前
        1
  •  2
  •   user74754    13 年前

    我曾与这个问题作过斗争,也曾与之作过斗争,但未能成功地让xsd.exe从我的计算机上的命令行的dll中的类生成模式。

    最后,我构建了一个Windowsxpvm来运行xsd.exe,它运行得很好,但可能不是一个令人满意的答案。

    无论出于什么原因,当我在Visual Studio中创建一个新的控制台(或任何其他类型的)应用程序时,我可以添加对xsd.exe的引用,并以编程方式引用它,例如:

    namespace XsdExeTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                var rgs = new string[]
                              {
                                  @"C:\publish\bin\SoAndSo.Library.dll",
                                  "/type:SoAndSoNamespace.SoAndSoClassName"
                              };
    
                XsdTool.Xsd.Main(rgs);
            }
        }
    }
    

    . …我得到输出“writing file schema0.xsd”。有点奇怪的解决方法,但是如果你还没有一个虚拟机的话,要比旋转虚拟机容易得多。

    我猜想并不是每个人都有这个问题,因为我在网上发现的帮助信息不足。

        2
  •  1
  •   Steven    12 年前

    我喜欢扩大阿尔达夫的回答。这是如何发现wtf与xsd.exe之间出错的方法。

    static void Main(string[] args)
    {
        var rgs = new string[]
        {
            @"{path_to_dll}",
            "/type:{type_name}"
        };
    
        AppDomain.CurrentDomain.FirstChanceException += (s, e) =>
        {
            string error = e.Exception.ToString();
    
            var typeLoadException = e.Exception as ReflectionTypeLoadException;
    
            if (typeLoadException != null)
            {
                foreach (var exception in typeLoadException.LoaderExceptions)
                {
                    error += Environment.NewLine + Environment.NewLine + 
                        exception.ToString();
                }
            }
    
            Console.WriteLine(error);
        };
    
        XsdTool.Xsd.Main(rgs);
    
        Console.ReadLine();
    }
    

    因此,技巧是将xsd.exe作为自己的测试应用程序的一部分运行,并注册一个 AppDomain.CurrentDomain.FirstChanceException 在你打电话之前 XsdTool.Xsd .

        3
  •  1
  •   Brian from state farm    10 年前

    不要将DLL复制到其他位置,而是从生成的输出文件夹中运行xsd.exe。

    1. 启动开发人员命令提示。
    2. 更改为输出文件夹“cd c:\myproject\bin”
    3. 运行xsd.exe“xsd myproject.dll/t:myclass”
        4
  •  0
  •   DiskJunky    7 年前

    对于我自己来说,最后的答案非常简单:我在同一个文件夹中缺少依赖程序集。 xsd.exe 必须能够加载所有依赖类等,才能构建XSD。

    作为测试,您可以在Visual Studio(或选择的IDE)中创建一个新项目,并引用要为其生成XSD的类的程序集。一定要引用特定的库文件 xsd.exe文件 正在使用。如果新创建的项目可以使用它并看到类,那么依赖性是好的,至少可以排除这一点。