обновление от Visual Studio 2005 до Visual Studio 2008 - PullRequest
1 голос
/ 19 апреля 2010

Я обновил один из своих проектов на c # с Visual Studio 2005 до Visual Studio 2008 и сгенерировал DLL. Но размер DLL после апгрейда Visual Studio составляет 6 КБ, что до обновления составляло 16 КБ. Почему размер уменьшился ?? Это даст какую-то проблему ??

У меня есть еще один вопрос, в чем разница между ч / б папками bin и obj ?? который дает правильный DLL в 2008 году

Ответы [ 3 ]

4 голосов
/ 19 апреля 2010

Размер файла:

По умолчанию компилятор .NET 3.5 использует выравнивание файла в 512 байт, где более ранние версии используют больший размер (4096). Помимо возможности использования различных директив препроцессора в больших разделах кода, это наиболее вероятное объяснение. Более точное выравнивание создает меньшие двоичные файлы и не вызывает никаких проблем.

Редактировать: По запросу дополнительная информация об этой опции. От MSDN (/ filealign (Параметры компилятора C #)) . Эта ссылка содержит инструкции по настройке свойства в Visual Studio.

Каждый раздел будет выровнен по границе, кратной значению / filealign . Там нет фиксированного по умолчанию. Если / filealign не указан, общеязыковая среда выполнения выбирает значение по умолчанию во время компиляции.

Указывая размер раздела, вы влияете на размер выходного файла. Изменение размера раздела может быть полезно для программ, которые будут работать на небольших устройствах.

Папки bin и obj:

Папка bin является выходной папкой, а папка obj - промежуточной выходной папкой. Ваши встроенные исполняемые файлы будут помещены в каталог bin (конечно, все это можно настроить, но это по умолчанию).

1 голос
/ 19 апреля 2010

Даже если вы ориентируетесь на .NET 2.0 при использовании Visual Studio 2008 (как это делала Visual Studio 2005), вы все равно используете новый компилятор, который поставляется с Visual Studio 2008. Размеры файлов будут разными из-за разного компилятора.

В качестве примера некоторых отличий версия msbuild, поставляемая с Visual Studio 2008, теперь предлагает параметр / m, который позволяет компилятору оптимизировать время сборки, используя несколько ядер ЦП.

Как ответил Даниэль Роуз, новый компилятор предложит больше оптимизаций. Вы по-прежнему можете использовать такой инструмент, как Reflector, чтобы убедиться, что IL одинаков между библиотеками DLL.

0 голосов
/ 19 апреля 2010

VS 2005 использует .NET 2.0, а VS 2008 позволяет использовать .NET 3.5. Возможно, Microsoft оптимизировала генерацию кода?

РЕДАКТИРОВАТЬ: Как для bin & obj:

Все промежуточные файлы во время компиляции помещаются в промежуточный каталог (обычно obj \ ConfigurationName). В C # это могут быть манифесты, кеши, ресурсы, сгенерированные файлы, ... В C / C ++ также имеется файл .obj для каждого скомпилированного файла.

Фактические выходные данные (DLL / EXE и PDB) затем копируются в выходной каталог (обычно bin \ ConfigurationName).

...