日本語のテーブル、フィールド名を含む、型指定DataSetをVS2003からVS2005へ変換するとビルドができない


質問

VS2005のソースコード変換?に関するバグ報告です。
 元はVS2003にて作成した、C#のASP.NET、WEBアプリケーションを、VS2005に変換しようとしています。
日本語でテーブル名、またはフィールド名を指定した、型指定DataSetを利用していた場合、変換後のソースを元にビルドを行うと、自動変換された型指定XMLでエラーが出てビルドが通りません。
xsdファイルをデザイナで表示したときは、普通に表示され問題はありません。
エラーは、「入力 xml ファイルの内容を DataSet に変換できませんでした。」と表示された後、下記の3パターンがあります。
1.'<'(16進数値0x3C)は無効な属性文字です。
2.'xs'は予期しないトークンです。有効なトークンはスペースです。
3.'(化けたカラム名の一部)'は予期しないトークンです。有効なトークンはスペースです。
どのパターンでもxssファイルを開き、日本語のテーブル名、フィールド名を書き換えてしまえば問題なくなります。
確認ください。

Microsoftの回答

残念ながら私どもは既知の問題として認識しています。
これはデザイナー上ではxsd(即ちxml)ファイルのエンコーディングを正しく解析出来ているので問題なく日本語を表示出来ますが、xsdファイルをDataSetに変換するビルド時にはXMLの解析エラーとなってしまう問題のようです。XMLファイルを解析する際のプロセスはデザイン時と実行時では異なるという事です。
ASP.NETの実行時では残念ながらBOMなしのUTF-8のXMLファイルは、例えXML宣言にFileエンコーディングが含まれてても既定の設定ではANSIとして読み込まれてしまいます。
従いしまして、下記のようにWeb.Configファイルの globalizationセクションに fileEncoding="utf-8" を追加して頂く事で、この問題が回避できると思われます。

<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>

あるいは.xsdファイルをBOM付きUTF-8又はAnsi Shft_JISとして保存しても正しく動作します。

今後の対応に関しましては現在調査しています。
貴重なレポートありがとうございました。


追記

  • アプリ全体のweb.configファイルに書き込んでしまうと、プロジェクト全体にわたって日本語を含む変数名などが認識されなくなる?
  • APP_CODE配下にフォルダ(xsd files)を作成し、その中に構成ファイルを書き込んで対策。


Partialクラスによるコードでの不具合

  • 日本語を含むDatasetを返すTableAdapterにおいて、Partialクラスを記述するコード(.vbファイル)を書くと、xsdファイルと同じフォルダに配置した場合、TableAdapterを認識できなくなる。
  • TableAdapter名に日本語を含めないようにし、さらにvbファイルは一つ親のフォルダに配置するようにすると、うまく認識されるようだ。

UpdatePanel(ASP.NET AJAX)配下のオブジェクト(LinkButtonだけ?)と同IDのものが同じページに存在すると、クリック時に正しく動作しない現象あり。

  • バグと思われる。(07/4/24)
最終更新:2007年08月07日 23:51