Я только что обновился с VS 2015 до VS 2019 (и с Windows 7 до Windows 10). Мой проект использует SQLMetal.exe и msxsl.exe в пакетном файле для создания и изменения DBML в три этапа:
- Создание файла DataModel.dbml с помощью SQLMetal.exe.
- Добавление базы данных преобразуется с помощью msxsl.exe.
- Создайте файл DataModel.cs с помощью SQLMetal.exe.
Когда я запустил это в новой среде, он выдал мне странную ошибку:
DataModel.dbml(0) : Error: DBML1112: Element 'Column" must be empty, but contains a node of type Whitespace named ''.
После долгих проб и ошибок я понял, что msxls.exe (который я только что скачал) добавляет возврат каретки перед закрывающим столбцом и теги ассоциации в файле DBML. Похоже, именно это вызывает ошибку на последнем шаге SQLMetal.exe.
<Column Name="SortOrder" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false">
</Column>
Я действительно могу открыть файл DataModel.dbml после шага 2 и заменить все в "\ r \ n " на "" и "\ r \ n " на "< / Ассоциация> ", а затем Шаг 3, кажется, работает. Очевидно, я не хочу делать это каждый раз, хотя.
Итак, что мне нужно сделать, чтобы запустить msxsl.exe, чтобы он не добавлял возврат каретки до закрывающих тегов Column и Association?
Команда msxls выглядит следующим образом:
"C:\VSBuild\msxsl.exe" "%~dp0DataModel.dbml" "%~dp0ModifyDbml.xslt" -o "%~dp0DataModel.dbml"
Имеет ли значение версия msxsl?