我刚刚从 VS 2015 升级到 VS 2019(以及 Windows 7 到 Windows 10)。我的项目是在批处理文件中使用 SQLMetal.exe 和 msxsl.exe分三个步骤创建和修改 DBML:
- 使用 SQLMetal.exe 生成 DataModel.dbml 文件。
- 使用 msxsl.exe 添加数据库转换。
- 使用 SQLMetal.exe 生成 DataModel.cs 文件。
当我在新环境中运行它时,它给了我一个奇怪的错误:
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>
我实际上可以在第 2 步之后打开 DataModel.dbml 文件,并将 "\r\n < /Column>" 上的所有内容替换为 "< /Column>" 和 "\r\n< /Assocation>" 到 "< /Association> ",然后第 3 步似乎有效。显然,我不想每次都这样做。
那么,我需要做什么才能运行 msxsl.exe 并且不让它在结束 Column 和 Association 标签之前添加回车符?
msxls 命令如下:
"C:\VSBuild\msxsl.exe" "%~dp0DataModel.dbml" "%~dp0ModifyDbml.xslt" -o "%~dp0DataModel.dbml"
msxsl 的版本是否重要?