我正在生成由VS2010和Mono的xbuild(2.10.2.0)构建的C#源代码。这通常效果很好,到目前为止我只有一个兼容性问题,在这种情况下,我使用的是一个明确指定为未定义行为的“特征”(所以mea culpa)。
现在我遇到了一个问题,我在C#源代码中的字符串文字中有特殊字符。我正在使用UTF-8生成源文件,我正在测试的字符是German sharp s: 0xC39F。这是通过代码写入latin1中的文件,当使用VS(我想要的那个)构建可执行文件时,它最终为0xDF
,当使用xbuild构建时,它0xC33F
。
就我所见,我是否使用.NET或Mono CLR运行可执行文件似乎并不重要。
我当前的怀疑是xbuild没有将源代码读取为UTF-8,因此编译后的代码在字符串文字中已经有了错误的字符。有没有办法明确告诉它?我在xbuild /?
上找不到任何内容,xbuild documentation并不是特别全面。如果我错过了记录这一点的正确页面,当然只需要一个链接即可。
所有实验均在Win7 x64上进行。
编辑1:为了澄清,我使用十六进制编辑器确认源代码文件中的字符是真的0xC39F
,用VS2010编译时写的字符是0xDF
和字符使用xbuild编译时写的是0xC33F
。
答案 0 :(得分:2)
您需要修改.csproj文件并添加< CodePage>元素到< PropertyGroup>部分。
您也应该能够使用Visual Studio或MonoDevelop为您执行此操作。
在MonoDevelop中,如果右键单击项目并选择“选项”菜单项,则可以转到“构建/常规”部分,然后会出现“编译器代码页”字段,您可以使用该字段进行选择“UTF-8”。
FWIW,这是当我选择UTF-8时输出的MD:
<代码页与GT; 65001< /代码页与GT;
因此,您只需将其复制/粘贴到< PropertyGroup>
即可