Проекты.NET в Visual Studio всегда компилируют в единственный файл?

Определенный да.

, Даже если Вы - единственный программист, Вам нужно управление версиями. Простота, с которой можно сравнить код с любым снимком вовремя, является бесценной.

Мой совет - идут для него!

[Как только я жил без управления версиями. Теперь я больше не могу.]

7
задан Peter Mortensen 15 January 2010 в 18:57
поделиться

5 ответов

Каждый проект компилируется в один файл. (За исключением проектов веб-сайтов)

Однако, если вы установите действие сборки для любого файла в проекте на «Копировать всегда» или «Копировать, если новее», проект скопирует этот файл в папку вывода.
Кроме того, если в проекте EXE есть файл App.config, он также будет скопирован в папку вывода.

Если ваш проект ссылается на DLL (вашу собственную или чужую), которая не является частью основной структуры, он скопирует эту DLL в папку вывода проекта, в результате чего появятся два файла (хотя только один из них будет содержать код из самого проекта)

Кроме того, помимо DLL и EXE, Visual Studio также создаст файл .pdb файл, содержащий символы отладки в выходной папке. Этот файл используется отладчиком и не должен распространяться среди ваших пользователей. (Если вы не хотите, чтобы они отладили ваш код за вас)

3
ответ дан 7 December 2019 в 03:16
поделиться

Пример создания нескольких модулей и связывания темы в одну dll:

csc /t:module RarelyUsedTypes.cs
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs 

Для получения дополнительной информации см. Книгу Рихтера CLR через C # .

Вы можете автоматизировать это процесс для Visual Studio.

Для каждого из ваших проектов создайте сетевой модуль или сборку и скомпилируйте / объедините их все в одну сборку.

Первая альтернатива. Это было предложено Джеем Р. Реном :

Это симпатичный хакер, но оба CSC и VBC поддерживают / target: module и / addmodule , вы могли бы сделать это без ILMerge, просто используя сценарий оболочки или файл make.

Visual Studio не поддерживает тип «netmodule», но MSBuild поддерживает.

Добавьте проект VB в свое решение. . Выгрузите проект и отредактируйте файл проекта.

Измените OutputType на module:

<OutputType>module</OutputType>

Вместо добавления ссылки на желаемый проект мы добавляем модуль. К сожалению, здесь снова VStudio терпит неудачу, но MSBUILD работает нормально. Выгрузите проект и отредактируйте файл проекта. Добавьте группу элементов с помощью директив AddModules include.

<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup>

Это скажет msbuild указать CSC использовать директивы / addmodule , точно так же, как эталонная группа элементов, которой Studio управляет.

Главный недостаток: отсутствие визуализации Studio Intellisense для добавленного модуля. У нас уже есть ссылки, жаль, что у нас нет модулей. [ОБНОВЛЕНИЕ: как указал @ Ark-kun, Visual Studio может ссылаться на проекты .netmodule и иметь Intellisense. Просто добавьте ссылку на проект ПЕРЕД изменением типа вывода.]

SharpDevelop имеет первый шаг, но второй шаг - «Добавить модуль» gui был открыт как элемент с низким приоритетом, начиная с SD 2.0.

Вторая альтернатива. В этой замечательной статье (написанной Скоттом Хансельманом) описывается, как автоматически преобразовывать сборки, если вы используете Visual Studio. Он предоставляет поддержку IntelliSense , в отличие от первой альтернативы .

2
ответ дан 7 December 2019 в 03:16
поделиться

Для Visual Studio - да. Поищите в Интернете "netmodule", и вы найдете документацию, которую ищете. Я случайно встретил их сегодня, когда мы хотели собрать несколько проектов в одну DLL.

MSDN: https://docs.microsoft.com/en-us/dotnet/framework/app-domains/ how-to-build-a-multifile-assembly

1
ответ дан 7 December 2019 в 03:16
поделиться

Не обязательно. Если в вашем проекте есть ресурсы, ориентированные на культуру, они обычно компилируются в отдельные сборки (dll). Кроме того, проекты ASP.Net не компилируются в единую сборку, у вас всегда будут либо файлы aspx / ascx, либо их маркерные эквиваленты, оставленные отдельно от скомпилированного кода.

1
ответ дан 7 December 2019 в 03:16
поделиться

Для ваших простых проектов, да, вы всегда получите одну сборку на проект. Однако, если вы перейдете к более готовому к производству ПО, ответ будет другим. Допустим, вы хотите доставить DLL, но она содержит текст, который должен отображаться пользователю. Вы, вероятно, захотите локализовать этот текст (предоставьте английскую и немецкую версии или даже английский (США) и английский (Великобритания) [подумайте, программа против программы]). Вы поместите свой текст в ресурсы, а затем скомпилируете эти ресурсы в так называемые вспомогательные сборки. Вы получите по одной вспомогательной сборке для каждой локали, которую вы выберете для поддержки.

Вот краткое описание того, как создавать и использовать вспомогательные сборки: http://sanjaysainitech.blogspot.com/2007/08/ Satellite -assemblies.html

Я вижу, что люди говорят о сетевых модулях и ILMerge. Я думаю, что если вы беспокоитесь о сетевых модулях, значит, вы делаете что-то не так, потому что не используете инструменты, предоставленные вам Microsoft (или вы находитесь в стране Mono, и в этом случае у вас нет инструментов от Microsoft). Я не использовал ILMerge, но, прочитав об этом, я не уверен, что доверяю этому. Этот человек говорит, что все работает нормально, за исключением кода WPF / XAML; у этого человека были проблемы с доступом к встроенным ресурсам после запуска ILMerge; этот человек увидел оптимизированный код, который нельзя было пошагово выполнить с помощью отладчика после запуска ILMerge. Этой информации достаточно, чтобы сказать мне, что ILMerge - не готовый инструмент для всех сценариев. Часть разработки программного обеспечения - это выяснить, как вы его развернете. Если вы хотите развернуть меньшее количество сборок, вам следует разрабатывать свое программное обеспечение таким образом, а не копаться в IL после его компиляции. Как говорили картографы: «Вот драконы»

у этого человека были проблемы с доступом к встроенным ресурсам после запуска ILMerge; этот человек увидел оптимизированный код, который нельзя было пошагово выполнить с помощью отладчика после запуска ILMerge. Этой информации достаточно, чтобы сказать мне, что ILMerge - не готовый инструмент для всех сценариев. Часть разработки программного обеспечения - это выяснить, как вы его развернете. Если вы хотите развернуть меньшее количество сборок, вам следует спроектировать свое программное обеспечение таким образом, а не копаться в IL после его компиляции. Как говорили картографы: «Вот драконы»

у этого человека были проблемы с доступом к встроенным ресурсам после запуска ILMerge; этот человек видел оптимизированный код, который нельзя было пошагово выполнить с помощью отладчика после запуска ILMerge. Этой информации достаточно, чтобы сказать мне, что ILMerge - не готовый инструмент для всех сценариев. Часть разработки программного обеспечения - это выяснить, как вы его развернете. Если вы хотите развернуть меньшее количество сборок, вам следует спроектировать свое программное обеспечение таким образом, а не копаться в IL после его компиляции. Как говорили картографы: «Вот драконы»

Достаточно информации, чтобы сказать мне, что ILMerge не является готовым к работе инструментом для всех сценариев. Часть разработки программного обеспечения - это выяснить, как вы его развернете. Если вы хотите развернуть меньшее количество сборок, вам следует спроектировать свое программное обеспечение таким образом, а не копаться в IL после его компиляции. Как говорили картографы: «Вот драконы»

Достаточно информации, чтобы сказать мне, что ILMerge не является готовым к работе инструментом для всех сценариев. Часть разработки программного обеспечения - это выяснить, как вы его развернете. Если вы хотите развернуть меньшее количество сборок, вам следует спроектировать свое программное обеспечение таким образом, а не копаться в IL после его компиляции. Как говорили картографы: «Вот драконы»

2
ответ дан 7 December 2019 в 03:16
поделиться