Сведения о вопросе

LARVION

23:37, 11th August, 2020

Теги

c#   .net   vb.net   assemblies    

Интернализация класса и методов в .NET Assembly

Просмотров: 508   Ответов: 4

У меня есть набор из нескольких сборок (один assembly должен использоваться как API, и это зависит от других сборок). Я хотел бы объединить все сборки в одну единственную assembly, но запретить всем сборкам, кроме API, быть видимыми снаружи.

Затем я буду запутывать этот assembly с помощью Ксенокода. Из того, что я видел, невозможно интернализовать assembly с помощью Ксенокода.

Я видел ILMerge от Microsoft, но не смог понять, может ли он делать то, что я хочу. http://research.microsoft.com / ~mbarnett/ILMerge.aspx



  Сведения об ответе

ITSME

12:44, 7th August, 2020

Я использовал ILMerge от microsoft для интернализации DLL в единую собранную библиотеку. Существует полезный GUI для использования ILMerge называется NuGenUnify. Вы можете найти его здесь .


  Сведения об ответе

+-*/

18:10, 14th August, 2020

Я знаю, что Xenocode может объединять сборки в одну, но я не уверен, что он будет интернализировать другие неосновные сборки.

Я нашел переключатель /internalize в ILMerge, что "internalize" все сборки, кроме основной. Довольно полезно!


  Сведения об ответе

fo_I_K

21:12, 7th August, 2020

Я предлагаю вам посмотреть на атрибут InternalsVisibleTo на MSDN .

Вы можете пометить все во всех сборках (кроме API assembly) как internal вместо public , а затем изменить их только на ваш API assembly.

Сделав это, использование ILMerge должно дать вам один assembly с только API классы видны.


  Сведения об ответе

PAGE

05:16, 13th August, 2020

Есть некоторые проблемы с ILMerge, но я думаю, что если вы добавите оптимизацию + слияние + обфускацию, вы, вероятно, создадите очень сложную ситуацию для небольшой выгоды.

Почему бы не иметь только один assembly, и сделать только ваш API общественности?

Если вы всегда распространяете их как один assembly, нет причин не просто скомпилировать их так. Вы получите больше преимуществ от оптимизации компилятора, и это будет быстрее компилироваться тоже.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться