String 生成后将转义nonascii字符串文字

String 生成后将转义nonascii字符串文字,string,msbuild,escaping,c#-3.0,String,Msbuild,Escaping,C# 3.0,请帮我解决最近出现的一个问题 在生成计算机上生成发布项目(使用msbuild)时,代码中的所有字符串文本将使用\x00NN转义,其中nn是两个数字。问题是,如果这些值以表单(winforms)的形式显示,它们将显示为已断开的编码(如www中的断开的代码页) 在源代码中,它看起来像 str = " Без ПДВ" 但反射器显示 str = " \x00c1\x00e5\x00e7 \x00cf\x00c4\x00c2"; 这将以字符串的形式出现,并在表单中使用中断编码,如 ò÷。Ï 是什么

请帮我解决最近出现的一个问题

在生成计算机上生成发布项目(使用msbuild)时,代码中的所有字符串文本将使用\x00NN转义,其中nn是两个数字。问题是,如果这些值以表单(winforms)的形式显示,它们将显示为已断开的编码(如www中的断开的代码页)

在源代码中,它看起来像

str = " Без ПДВ"
但反射器显示

str = " \x00c1\x00e5\x00e7 \x00cf\x00c4\x00c2";
这将以字符串的形式出现,并在表单中使用中断编码,如

ò÷。Ï

是什么导致msbuild将非ascii字符串文字转换为转义符号?对于开发人员机器上的开发构建,不存在这样的问题

对运行ms build的用户检查区域设置,并将其从德语更改为乌克兰语,对非unicode语言程序也进行了同样的检查。它在重新启动后没有帮助

MsBuild已经在同一台机器上运行了一年,没有出现这样的问题,但最新版本在代码中使用了字符串文本

命令行看起来像

MSBuild {LocalPath}{Solution} /property:DefineConstants="{Defines}{DefinesExtra}" /t:{Target} /property:Configuration={Configuration} {Platform} /clp:NoItemAndPropertyList
目标是构建(或重建不重要),配置是发布,平台是x86


PS我知道在代码中存储本地化字符串是不好的(但会发生狗屎)。

如果你能展示一个简短但完整的程序来演示这个问题,那将非常有帮助。请注意,编译后的代码不包含“转义符号”-它只包含Reflector碰巧使用
\u..
显示的Unicode字符串。我强烈建议使用
\u
而不是
\x
。@JonSkeet抱歉,所有代码都已经在这里了。问题在于,字符串
str=“БББзППБС”
在构建后(在dll中)进行转义编码。这只发生在一台机器上(生成机器)。构建之后在开发人员机器上是可以的(在开发人员机器上构建之后,字符串不是在dll中进行转义编码的,正如我们在reflector中看到的那样)
str=“\x00c1\x00e5\x00e7\x00cf\x00c4\x00c2”
仅在一台机器上生成后出现,因此我不能使用
\u
或任何其他内容。看起来您的源文件是CP-1251编码的,编译器需要Unicode编码。不,源代码还没有。您声称“代码中的所有字符串文字都是用
\x00NN
转义的……但不提供该格式的任何源代码。不,同样,strnig不是“构建后转义编码的”——它在生成的代码中与Unicode一样,由Reflector按照自己的意愿呈现。(它真的是用
\x
而不是
\u
?这很奇怪。)你的源代码是什么编码,你是如何告诉编译器的?@pwd请让我检查一下