2010-06-17 3 views
4

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

xsd.exe TestAssemby.dll /t:TestType 

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

Error: There was an error processing 'TestAssemby.dll'. Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information

Я скопировал ссылку dll в папку, где находится в соответствии с this.

, но все еще получаю ту же ошибку

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

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

ответ

2

Я боролся и боролся с этой проблемой и не смог успешно получить 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); 
     } 
    } 
} 

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

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

1

Я хотел бы выразить ответ 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.

+0

Это сделал это для меня. Я получил ошибку, заявив, что метод Swagger не может быть найден (IOperationFilter.Apply), хотя он был явно реализован. Поэтому я прокомментировал весь класс, и это сработало. Я расколол его после создания схемы, чтобы, конечно, вернуться обратно. –

1

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

  1. Запустить командную строку разработчика.
  2. Изменение в выходном папке "CD C: \ MyProject \ Bin"
  3. Run xsd.exe "XSD myproject.dll/т: MyClass"
Смежные вопросы