Пример как создать несколько модулей и ссылку темы в одну DLL:
csc /t:module RarelyUsedTypes.cs
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs
Для получения дополнительной информации см книгу Рихтера CLR via C#.
Вы можете автоматизировать этот процесс для Visual Studio.
Для каждого из ваших проектов создайте netmodule или сборку и скомпилируйте/объедините их все в единую сборку.
Первый вариант. Это было предложено Jay R. Wren:
Это мило хак, но с CSC и VBC и поддерживая /target:module
и /addmodule
варианты, вы могли бы на самом деле сделать это без ILMerge только с помощью сценария оболочки или сделать файл.
Visual Studio не поддерживает тип «netmodule», но MSBuild делает это.
Добавьте проект VB в свое решение. Выгрузите проект и отредактируйте файл проекта.
Изменение OutputType к модулю:
<OutputType>module</OutputType>
Вместо того, чтобы добавить ссылку на желаемый проект, мы добавим модуль. К сожалению, снова VStudio здесь не работает, но MSBUILD работает отлично. Выгрузите проект и отредактируйте файл проекта. Добавьте группу элементов с директивами AddModules include.
<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup>
Это скажет MSBuild сказать CSC использовать /addmodule
директивы, так же, как Reference Item Group, который студия делает управление.
Основной недостаток: нет Visual Studio Intellisense для добавленного модуля. У нас уже есть ссылки, слишком плохо, что у нас нет модулей.
[ОБНОВЛЕНИЕ: Как отметил Арк-кун, Visual Studio может ссылаться на проекты и иметь Intellisense. Просто добавьте ссылку на проект ПЕРЕД заменой типа вывода.]
SharpDevelop имеет первый шаг, но на втором этапе GUI «Добавить модуль» был открыт как элемент с низким приоритетом с SD 2.0.
Вторая альтернатива. Это great article (автор Scott Hanselman) описывает, как сборка megre автоматически, если вы используете Visual Studio.Это делает дает вам поддержку IntelliSense
, в отличие от первого варианта
.
Netmodules - противоположные. Меня тоже обманули. Netmodules позволяют разделить сборку на несколько файлов (чтобы, например, загрузить их отдельно). Они очень похожи на нормальные ссылочные dll. Поскольку ваша ссылка указывает, что netmodules позволяют вам создать «многосетевую сборку». –