Я генерирую исходный код C #, который создается как VS2010, так и Monu's xbuild (2.10.2.0). Обычно это работает очень хорошо, у меня до сих пор была только одна проблема совместимости, и в этом случае я использовал «функцию», которая явно указана как неопределенное поведение (так что я виноват).
Теперь я столкнулся с проблемой, когда у меня есть специальные символы в строковом литерале в исходном коде C #. Я генерирую исходные файлы в UTF-8, символ, с которым я тестирую, это Немецкий диез s: 0xC39F . Это записывается в файл в латинице 1 кодом, где он заканчивается как 0xDF
, когда исполняемый файл собран с VS (это тот, который я хочу) и как 0xC33F
, когда собран с xbuild.
Насколько я вижу, не имеет значения, запускаю ли я исполняемый файл с .NET или с Mono CLR.
В настоящее время я подозреваю, что xbuild не читает исходный код как UTF-8, поэтому скомпилированный код уже содержит неправильный символ в строковом литерале. Есть ли способ явно сказать это? Я ничего не смог найти в xbuild /?
, а документация xbuild не совсем исчерпывающая. Если я просто пропустил нужную страницу, где это задокументировано, конечно, достаточно просто ссылки.
Все эксперименты были выполнены на Win7 x64.
РЕДАКТИРОВАТЬ 1: Чтобы уточнить, я использовал шестнадцатеричный редактор, чтобы подтвердить, что символ в файле исходного кода действительно 0xC39F
, символ, записанный при компиляции с VS2010, - 0xDF
и символ, написанный при компиляции с xbuild 0xC33F
.