Можно ли назвать сборку многомодульной
Могу ли я назвать сборку многомодульной если в ней несколько пространств имен или я подключаю другую сборку.Если нет то могли привести примеры
Ответы (1 шт):
Нет, несколько пространств имен тут ни о чем не говорит, и подключение других сборок тоже. По спецификации CLI понятие "модуль" имеет строго определенное значение - это файл, содержащий исполняемый код (ECMA-335 I.5)
module: A single file containing content that can be executed by the VES.
Но вот понятие "многомодульная сборка" является многозначным. Под этим могут понимать:
- Сборку, состоящую из нескольких физических файлов (такую сборку также называют многофайловой)
- Сборку, полученную компоновкой нескольких файлов .netmodule в один физический файл
Многофайловые сборки получают, подавая на вход программы Assembly Linker (al.exe) нескольких файлов .netmodule. В результате получается сборка, которая содержит манифест примерно такого вида:
.module extern Client.netmodule
(...)
.assembly myAssembly
{
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.file Client.netmodule
.hash = (03 DB 59 BE DA B5 E9 DB 7E 0E D3 E5 2E AB 76 2A // ..Y.....~.....v*
73 C6 99 82 ) // s...
.file Stringer.netmodule
.hash = (95 BF 9C ED 5F 64 B5 66 5A D3 2F 7D 6A EF E9 76 // ...._d.fZ./}j..v
B3 E0 B8 67 ) // ...g
.class extern public myStringer.Stringer
{
.file Stringer.netmodule
.class 0x02000002
}
(...)
То есть здесь сборка myAssembly.exe сама не содержит кода, а ссылается на два внешних файла модулей, Client.netmodule и Stringer.netmodule. Чтобы ее запустить и выполнить код из файла .netmodule, этот файл должен лежать с ней в одном месте, в противном случае будет ошибка.
Сборки второго вида получают, подавая на вход обычного компоновщика Visual C++ (link.exe) несколько файлов .netmodule. В результате получается один физический файл, содержащий объединенный код из всех этих модулей. При этом на уровне метаданных не будет никаких признаков, что сборка собиралась из нескольких модулей. Практический смысл тут в том, чтобы сочетать в одной сборке код на разных языках программирования. По слухам, PresentationCore в WPF сделана именно таким образом, из одного модуля на C# и второго - на С++/CLI.
Если же вы получили сборку с помощью обычной компиляции C# в Visual Studio или командной строке MSBuild, без компоновки, то она не может быть ни многомодульной, ни многофайловой.