这个是可能的吗?
我想在内部建立一个公共课程。
谢谢
发布于 2011-10-25 19:36:04
可能吗?当然了!它可以简单到:
( 1)装填装配;
2)找出类型;
3)改变可见性;
4)保存程序集
然而,您可能最终会有一个非常坏的程序集。例如,如果T类型现在是内部的,但在公共字段、属性、方法中使用.然后会验证不会喜欢它。
对于(开源) 月光项目,我们使用了一个基于Cecil的调谐器,它删除了(在您的例子中)内化了大量的,这样Mono (匹配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;
}
}这将使(已经加载的)公共类型成为internal类型(包括所有非构造器方法)。您只需要筛选您自己类型的(例如,基于它的FullName属性)并将其保存回。
https://stackoverflow.com/questions/7878318
复制相似问题