Можно ли назвать сборку многомодульной

Могу ли я назвать сборку многомодульной если в ней несколько пространств имен или я подключаю другую сборку.Если нет то могли привести примеры


Ответы (1 шт):

Автор решения: MSDN.WhiteKnight

Нет, несколько пространств имен тут ни о чем не говорит, и подключение других сборок тоже. По спецификации CLI понятие "модуль" имеет строго определенное значение - это файл, содержащий исполняемый код (ECMA-335 I.5)

module: A single file containing content that can be executed by the VES.

Но вот понятие "многомодульная сборка" является многозначным. Под этим могут понимать:

  1. Сборку, состоящую из нескольких физических файлов (такую сборку также называют многофайловой)
  2. Сборку, полученную компоновкой нескольких файлов .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, без компоновки, то она не может быть ни многомодульной, ни многофайловой.

→ Ссылка