Генерация схемы с помощью xsd.exe - PullRequest
6 голосов
/ 17 июня 2010

Я пытаюсь сгенерировать схему для некоторого типа из сборки с xsd.exe вот командная строка:

xsd.exe TestAssemby.dll /t:TestType

Вот ошибка, которую я получил:

Ошибка: при обработке TestAssemby.dll произошла ошибка. Невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации

Я скопировал ссылочную DLL в папку, где находится в соответствии с это .

но все равно появляется та же ошибка

У меня есть вопросы:

  • Какие могут быть возможные причины такой ошибки?
  • Как должно использоваться свойство LoaderExceptions? (пример будет очень полезным)

Ответы [ 4 ]

2 голосов
/ 09 октября 2013

Мне нравится расширять ответ ardave.Вот как можно определить, что 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.

2 голосов
/ 11 апреля 2012

Я боролся и боролся и боролся с этой проблемой и не смог успешно получить xsd.exe для генерации схемы из класса в dll, из командной строки, на моей машине.

В конечном итоге я развернул виртуальную машину Windows XP для запуска 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);
        }
    }
}

.,,и я получаю вывод "запись файла schema0.xsd. Немного странный обходной путь, но гораздо проще, чем раскрутить виртуальную машину, если у вас еще нет одной удобной.

Я предполагаю, что не всевозникла эта проблема из-за нехватки справочной информации, которую я нашел в Интернете.

1 голос
/ 21 апреля 2015

Вместо копирования вашей dll в другое место, запустите xsd.exe из встроенной выходной папки.

  1. Запустите командную строку разработчика.
  2. Перейдите в выходную папку "cd c: \ myproject \ bin"
  3. Запустите xsd.exe "xsd myproject.dll / t: MyClass"
0 голосов
/ 15 марта 2018

Для меня ответ в конце концов был довольно прост: мне не хватало зависимых сборок в одной папке. xsd.exe должен иметь возможность загружать все зависимые классы и т. Д. Для построения XSD.

В качестве теста, чтобы увидеть, так ли это в вашей ситуации, вы можете создать новый проект в Visual Studio (или IDE по выбору) и ссылаться на сборку класса, для которого вы генерируете XSD. Обязательно укажите конкретный файл библиотеки, который используется xsd.exe. Если ваш недавно созданный проект может использовать его и видеть класс, то зависимости хороши, и вы можете исключить это, по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...