Интернализация класса и методов в .NET Assembly
-
09-06-2019 - |
Вопрос
У меня есть набор из нескольких сборок (одна сборка должна использоваться как API, и это зависит от других сборок).Я хотел бы объединить все сборки в одну сборку, но не допускать, чтобы все сборки, кроме API, были видны снаружи.
Затем я запутаю эту сборку с помощью Xenocode.Из того, что я видел, невозможно интернализировать сборку с помощью Xenocode.
Я видел ILMerge от Microsoft, но не смог понять, может ли он делать то, что я хочу.http://research.microsoft.com /~мбарнетт/ILMerge.aspx
Решение 2
Я знаю, что Xenocode может объединять сборки в одну, но я не уверен, будет ли он интернализировать другие неосновные сборки.
Я нашел переключатель /internalize в ILMerge, который "интернализует" все сборки, кроме основной.Очень полезно!
Другие советы
Я использовал ILMerge от Microsoft для интернализации DLL-файлов в единую собранную библиотеку.Существует полезный графический интерфейс для использования ILMerge под названием NuGenUnify.Вы можете найти его здесь.
Я предлагаю вам взглянуть на InternalsVisibleTo
атрибут на MSDN.
Вы можете пометить все во всех сборках (кроме сборки API) как internal
вместо того, чтобы public
, затем измените их только на вашу сборку API.
Сделав это, использование ILMerge должно предоставить вам единую сборку с видимыми только классами API.
Есть некоторые проблемы с ILMerge, но я думаю, что если вы добавите оптимизацию + слияние + обфускацию, вы, скорее всего, создадите очень сложную ситуацию с небольшой выгодой.
Почему бы не создать только одну сборку и не сделать общедоступным только ваш API?
Если вы всегда распространяете их как единую сборку, нет причин просто не скомпилировать их таким образом.Вы получите больше пользы от оптимизации компилятора, а также он будет быстрее компилироваться.