Определенный да.
, Даже если Вы - единственный программист, Вам нужно управление версиями. Простота, с которой можно сравнить код с любым снимком вовремя, является бесценной.
Мой совет - идут для него!
[Как только я жил без управления версиями. Теперь я больше не могу.]
Каждый проект компилируется в один файл. (За исключением проектов веб-сайтов)
Однако, если вы установите действие сборки для любого файла в проекте на «Копировать всегда» или «Копировать, если новее», проект скопирует этот файл в папку вывода.
Кроме того, если в проекте EXE есть файл App.config, он также будет скопирован в папку вывода.
Если ваш проект ссылается на DLL (вашу собственную или чужую), которая не является частью основной структуры, он скопирует эту DLL в папку вывода проекта, в результате чего появятся два файла (хотя только один из них будет содержать код из самого проекта)
Кроме того, помимо DLL и EXE, Visual Studio также создаст файл .pdb файл, содержащий символы отладки в выходной папке. Этот файл используется отладчиком и не должен распространяться среди ваших пользователей. (Если вы не хотите, чтобы они отладили ваш код за вас)
Пример создания нескольких модулей и связывания темы в одну 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 , в отличие от первой альтернативы .
Для Visual Studio - да. Поищите в Интернете "netmodule", и вы найдете документацию, которую ищете. Я случайно встретил их сегодня, когда мы хотели собрать несколько проектов в одну DLL.
MSDN: https://docs.microsoft.com/en-us/dotnet/framework/app-domains/ how-to-build-a-multifile-assembly
Не обязательно. Если в вашем проекте есть ресурсы, ориентированные на культуру, они обычно компилируются в отдельные сборки (dll). Кроме того, проекты ASP.Net не компилируются в единую сборку, у вас всегда будут либо файлы aspx / ascx, либо их маркерные эквиваленты, оставленные отдельно от скомпилированного кода.
Для ваших простых проектов, да, вы всегда получите одну сборку на проект. Однако, если вы перейдете к более готовому к производству ПО, ответ будет другим. Допустим, вы хотите доставить 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 после его компиляции. Как говорили картографы: «Вот драконы»