And*_*ock 2 .net command-line-interface mono.cecil class-visibility
这可能吗?
我想在公共课内部.
谢谢
有可能?当然!它可以很简单:
1)装载组件;
2)找到类型;
3)改变它的可见度;
4)保存组件
但是你最终可能会遇到一个非常破碎的装配.例如,如果类型T现在是内部的,但在公共字段,属性,方法中使用...那么peverify将不喜欢它.
对于(开源)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;
}
}
Run Code Online (Sandbox Code Playgroud)
这将使每个公共类型(已经加载)_assembly成为一种internal类型(包括所有非构造方法).您只需要过滤自己的类型(例如,基于它的FullName属性)并将其保存回来.
| 归档时间: |
|
| 查看次数: |
992 次 |
| 最近记录: |