Возможно?Конечно!Это может быть просто:
1) загрузить сборку;
2) найти тип;
3) изменить его видимость;
4) сохранить сборку
Однако вы можете получить очень сломанную сборку.Например, если тип T
теперь является внутренним, но используется в открытых полях, свойствах, методах ... тогда peverify не понравится.
Для (с открытым исходным кодом) *В проекте 1016 * Moonlight мы использовали тюнер на основе Cecil, который удалил и (в вашем случае) усвоил много вещей, чтобы Mono BCL (соответствующий полной структуре MS) мог выглядеть как Silverlight BCL.
Полагаю, вы прочитали исходный код (лицензированный MIT.X11) по ссылке ниже, чтобы получить полностью работающую реализацию интернализации типа.
https://github.com/mono/mono/tree/master/mcs/tools/tuner
https://github.com/mono/moon/tree/master/class/tuning
РЕДАКТИРОВАТЬ сведения о режиме (копировать / вставлять / адаптировать) из MoonlightA11yProcessor.cs
void MakeApiInternal ()
{
foreach (TypeDefinition type in _assembly.MainModule.Types) {
if (type.IsPublic)
type.IsPublic = false;
if (type.HasMethods)
foreach (MethodDefinition method in type.Methods.Where (m => !m.IsConstructor))
if (method.IsPublic)
method.IsAssembly = true;
}
}
Это сделает каждый общедоступный тип ввода (уже загруженным) _assembly
типом internal
(включая все неконструкторные методы).Вам просто нужно отфильтровать свой собственный тип (например, на основе его свойства FullName
) и сохранить его обратно.