ILMerge: переименовать пространства имен внутренних сборок?

Например, предположим, что я хочу использовать Bouncy Castle в своей DLL. Поскольку я хочу упростить развертывание, я использую ILMerge для объединения MyDll.dll и BouncyCastle.Crypto.dll для создания MyDllMerged.dll. Я использую флаг /internalize в ILMerge, чтобы клиенты не использовали мой Bouncy Castle.

Если мой потребитель EndUser.exe также использует Bouncy Castle, он увидит, что "Org.BouncyCastle...TypeFoo уже определено в MyDllMerged.dll". Поэтому он обречен и не может сам пользоваться своей той библиотекой.

Можно ли в любом случае указать ILMerge переименовать все пространство имен в сборке в дополнение к его интернализации? Или есть другие способы решить эту проблему? (Я бы не хотел, чтобы не распространял отдельно "объединенную" и "необъединенную" версии.)


person kizzx2    schedule 28.01.2011    source источник
comment
Не уверен, что понимаю, /internalize существует, чтобы гарантировать, что пользователь не обречен. TypeFoo он не видит, он внутренний.   -  person Hans Passant    schedule 28.01.2011
comment
@Hans Passant: Я так и думал, но провел простой эксперимент, чтобы доказать это. Оказывается, даже если пользователь не видит TypeFoo, он на самом деле там и вызовет возможную ошибку коллизии пространства имен во время компиляции.   -  person kizzx2    schedule 28.01.2011


Ответы (1)


Одним из способов может быть использование обфускатора (SmartAssembly, Dotfuscator и т. д.), чтобы запутать только пространство имен Org.BouncyCastle созданной сборки.

person Jason Crease    schedule 28.01.2011