У меня есть набор из нескольких сборок (одна сборка должна использоваться как API, и это зависит от других сборок). Я хотел бы объединить все сборки в одну, но чтобы все сборки, кроме API, не были видны снаружи.
Затем я запутаю эту сборку с помощью Xenocode. Из того, что я видел, невозможно усвоить сборку с помощью Xenocode.
Я видел ILMerge от Microsoft, но не мог понять, может ли он делать то, что я хочу. http://research.microsoft.com/~mbarnett/ILMerge.aspx





Я знаю, что Xenocode может объединять сборки в одну, но я не уверен, будет ли он усваивать другие непервичные сборки.
Я нашел переключатель / internalize в ILMerge, который «усваивает» все сборки, кроме основной. Довольно полезно!
Я использовал ILMerge от Microsoft для включения DLL в единую собранную библиотеку. Существует полезный графический интерфейс для использования ILMerge под названием NuGenUnify. Вы можете найти его здесь.
Предлагаю вам взглянуть на атрибут InternalsVisibleTo на MSDN.
Вы можете пометить все во всех сборках (кроме сборки API) как internal вместо public, а затем повторно отобразить их только для своей сборки API.
После этого использование ILMerge должно дать вам единую сборку с видимыми только классами API.
Есть некоторые проблемы с ILMerge, но я думаю, что если вы добавите оптимизацию + слияние + обфускацию, вы, вероятно, создадите очень сложную ситуацию с небольшой пользой.
Почему бы не создать только одну сборку и сделать общедоступным только ваш API?
Если вы всегда распространяете их как одну сборку, нет причин не компилировать их просто так. Вы получите больше преимуществ от оптимизации компилятора, и он также будет быстрее компилироваться.