1

我正在生成由 VS2010 和 Mono 的 xbuild (2.10.2.0) 构建的 C# 源代码。这通常工作得很好,到目前为止我只有一个兼容性问题,在那种情况下,我使用了一个明确指定为未定义行为的“功能”(所以是过失)。

现在我遇到了一个问题,在 C# 源代码中的字符串文字中有特殊字符。我正在以 UTF-8 生成源文件,我正在测试的字符是德语锐利 s: 0xC39F。这是由代码写入 latin1 中的一个文件,0xDF当使用 VS 构建可执行文件(这是我想要的)和0xC33F使用 xbuild 构建时,它最终会结束。

据我所知,使用 .NET 还是使用 Mono CLR 运行可执行文件似乎并不重要。

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

所有实验均在 Win7 x64 上进行。

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

4

1 回答 1

2

您需要修改 .csproj 文件并将 <CodePage> 元素添加到 <PropertyGroup> 部分。

您也应该能够使用 Visual Studio 或 MonoDevelop 为您执行此操作。

在 MonoDevelop 中,如果您右键单击一个项目并选择“选项”菜单项,然后您可以转到“构建/常规”部分,将有一个“编译器代码页”字段,您可以使用它来选择“UTF- 8"。

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

<代码页>65001</代码页>

所以你可以把它复制/粘贴到 <PropertyGroup>

于 2011-06-30T10:57:32.373 回答