Character encoding 为Mono的xbuild设置源文件字符编码

Character encoding 为Mono的xbuild设置源文件字符编码,character-encoding,mono,xbuild,Character Encoding,Mono,Xbuild,我正在生成由VS2010和Mono的xbuild 2.10.2.0构建的C源代码。这通常效果很好,到目前为止,我只遇到了一个兼容性问题,在这种情况下,我使用了一个“特性”,它被明确指定为未定义的行为,因此我是罪过 现在我遇到了一个问题,在C源代码中字符串文字中有特殊字符。我正在UTF-8中生成源文件,我测试的角色是一个。代码将其写入拉丁文1中的一个文件中,当使用我想要的VS构建可执行文件时,它将以0xDF结束,当使用xbuild构建可执行文件时,它将以0xC33F结束 就我所见,我是用.NET还

我正在生成由VS2010和Mono的xbuild 2.10.2.0构建的C源代码。这通常效果很好,到目前为止,我只遇到了一个兼容性问题,在这种情况下,我使用了一个“特性”,它被明确指定为未定义的行为,因此我是罪过

现在我遇到了一个问题,在C源代码中字符串文字中有特殊字符。我正在UTF-8中生成源文件,我测试的角色是一个。代码将其写入拉丁文1中的一个文件中,当使用我想要的VS构建可执行文件时,它将以0xDF结束,当使用xbuild构建可执行文件时,它将以0xC33F结束

就我所见,我是用.NET还是用Mono CLR运行可执行文件似乎并不重要

我目前的怀疑是xbuild没有将源代码读取为UTF-8,因此编译后的代码的字符串文本中已经有错误的字符。有没有办法明确地告诉他?我在xbuild/上找不到任何内容?而且这个问题也不是特别全面。如果我只是错过了记录这一点的正确页面,当然,只要一个链接就足够了

所有实验都是在Win7 x64上进行的


编辑1:为了澄清,我使用了一个十六进制编辑器来确认源代码文件中的字符确实是0xC39F,使用VS2010编译时写入的字符是0xDF,使用xbuild编译时写入的字符是0xC33F。

您需要修改.csproj文件并向节中添加一个元素

您也应该能够使用VisualStudio或MonoDevelop来完成这项工作

在MonoDevelop中,如果右键单击一个项目并选择Options菜单项,那么可以转到Build/General部分,那里将有一个编译器代码页字段,您可以使用该字段选择UTF-8

FWIW,这是我选择UTF-8时MD的输出:

65001


因此,您可以将其复制/粘贴到

-代码页:utf8在mcs上听起来很有希望,但我还没有弄清楚如何将其传递到xbuild。谢谢,我明天会尝试,但听起来不错。这不应该影响VS的行为,对吗?它会保留这个设置吗?还是每次我用VS编辑项目时都要这样做?这似乎很好,谢谢!Windows上的xbuild现在似乎像Linux上的UTF-8 xbuild一样读取源代码,我后来发现,甚至在VS中打开项目,更改一些其他属性并再次保存它会保留条目。我认为这不是理想的解决方案。我刚才越过了那个问题。添加CodePage属性修复了给定msbuild文件的问题,但是如果您的项目包含来自nuget引用的目标文件,则这将不起作用。我认为修改这些文件是不合适的。还有更好的主意吗?