Источник, скомпилированный с vs2008, создает двоичный файл, который отличается от того же источника, скомпилированного непосредственно csc из командной строки. - PullRequest
1 голос
/ 13 июня 2009

Я не могу понять, почему, если я скомпилирую тот же источник с Visual Studio 2008 (MSBuild), а затем с помощью csc (или NANT) в командной строке, я не могу получить точно такой же двоичный файл той же сборки).

Командная строка является той же, что вызывается Visual Studio, потому что я копирую команду из окна вывода, а затем вставляю команду в командную строку vs2008.

Я знаю, что если я скомпилирую один и тот же источник в разное время, я получу другой двоичный файл из-за временных меток в метаданных сборки. Фактически, если я сравниваю два двоичных файла, выпущенных vs2008 в разное время, я замечаю небольшую разницу между двоичными данными.

Но если я скомпилирую с vs, а затем с csc, двоичные файлы будут очень сильно отличаться! Ты знаешь почему? Что не так?

Ответы [ 4 ]

1 голос
/ 27 июня 2009

Нет гарантии какого-либо конкретного порядка метаданных, созданных компилятором. Тем не менее, нет ничего преднамеренно вызывающего другой порядок между компилятором in-proc и csc.exe.

0 голосов
/ 14 июня 2009

Вы не сказали, используете ли вы отладочную или двоичную сборки в Visual Studio. Я не уверен, что значение командной строки по умолчанию совпадает с или из них.

Попробуйте построить с явными переключателями /debug и /o (установите их так, как вы хотите) и сопоставьте их в Visual Studio. Также определите символы DEBUG и / или TRACE, если они определены в конфигурации сборки Visual Studio.

0 голосов
/ 14 июня 2009

@ Марк Гравелл, Диво, Джон: Я пытался разобрать две сборки с помощью ILDASM. После глубокого анализа и сравнения я вижу, что содержимое IL точно такое же, но все классы и методы, свойства getter, setter и т. Д. Находятся в совершенно другом порядке в сборке! Так что, если я сравниваю две сборки с hex-редактором и компаратором, я вижу совершенно другое двоичное тело!

Теперь мне нужно понять, почему VS и Csc взаимодействуют с компилятором по-другому!

У вас есть ссылка на документ, который объясняет два подхода?

0 голосов
/ 13 июня 2009

Очень смелое предположение, но, возможно, переменные среды не одинаковы в VS IDE и вашем терминале. В худшем случае, возможно, ваша версия терминала связана с другой платформой .NET или, по крайней мере, с парой других библиотек / файлов кода или переключателей компилятора?

...