1

VS2010とMonoのxbuild(2.10.2.0)の両方でビルドされているC#ソースコードを生成しています。これは一般的に非常にうまく機能します。これまでのところ、互換性の問題は1つしかありません。その場合、未定義動作(mea culpa)として明確に指定されている「機能」を使用していました。

現在、C#ソースコードの文字列リテラルに特殊文字が含まれているという問題が発生しています。UTF-8でソースファイルを生成しています。テストしている文字はドイツ語のシャープs:0xC39Fです。これは、コードによってlatin1のファイルに書き込まれ0xDF、実行可能ファイルがVS(これが必要なもの)でビルドされ0xC33Fたときとxbuildでビルドされたときのようになります。

私が見る限り、実行可能ファイルを.NETで実行するか、MonoCLRで実行するかは問題ではないようです。

私の現在の疑いは、xbuildがソースコードをUTF-8として読み取っていないため、コンパイルされたコードの文字列リテラルにすでに間違った文字が含まれていることです。明示的に伝える方法はありますか?何も見つかりませんでしxbuild /?。xbuildのドキュメントは特に包括的ではありません。これが文書化されている正しいページを見逃した場合は、もちろんリンクだけで十分です。

すべての実験はWin7x64で実行されました。

編集1:明確にするために、16進エディターを使用して、ソースコードファイル内0xC39Fの文字が実際に、VS2010でコンパイルされたときに0xDF書き込まれた文字が、xbuildでコンパイルされたときに書き込まれた文字がであることを確認しました0xC33F

4

1 に答える 1

2

.csprojファイルを変更し、<CodePage>要素を<PropertyGroup>セクションに追加する必要があります。

Visual StudioまたはMonoDevelopを使用して、これを行うこともできます。

MonoDevelopで、プロジェクトを右クリックして「オプション」メニュー項目を選択すると、「ビルド/一般」セクションに移動でき、「UTF-」を選択するために使用できる「コンパイラー・コード・ページ」フィールドが表示されます。 8"。

FWIW、これは、UTF-8を選択したときにMDが出力するものです。

<CodePage> 65001 </ CodePage>

したがって、それをコピーして<PropertyGroup>に貼り付けることができます。

于 2011-06-30T10:57:32.373 に答える