我正在生成由VS2010和Mono的xbuild (2.10.2.0)构建的C#源代码。这通常工作得很好,到目前为止,我只有一个兼容性问题,在这种情况下,我使用的是一个明确指定为未定义行为的“功能”(所以我要道歉)。
现在我遇到了一个问题,在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。
发布于 2011-06-30 18:57:32
您需要修改.csproj文件并向该部分添加一个元素。
您也应该能够使用Visual Studio或MonoDevelop来为您完成此操作。
在MonoDevelop中,如果你右击一个项目并选择"Options“菜单项,你就可以转到Build/General部分,会有一个"Compiler Code Page”字段,你可以用它来选择"UTF-8“。
FWIW,这是MD在我选择UTF-8时的输出:
65001
因此,您只需将其复制/粘贴到
https://stackoverflow.com/questions/6520919
复制相似问题