MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Можно ли назвать сборку многомодульной"
Answer 1158636
Нет, несколько пространств имен тут ни о чем не говорит, и подключение других сборок тоже. По спецификации 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, без компоновки, то она не может быть ни многомодульной, ни многофайловой.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.