これは可能ですか?
パブリッククラスを内部にしたい。
ありがとう
可能 ?もちろん!次のように簡単にできます。
1) アセンブリをロードします。
2) タイプを見つけます。
3) 可視性を変更します。
4) アセンブリを保存します
ただし、非常に壊れたアセンブリになる可能性があります。たとえば、タイプT
が現在内部であるが、パブリックフィールド、プロパティ、メソッドで使用されている場合... peverifyはそれを好まないでしょう。
(オープン ソースの) Moonlightプロジェクトでは、Mono BCL (MS フル フレームワークに一致) が Silverlight BCL のように見えるように、多くのものを削除して (あなたの場合は)内部化した Cecil ベースのチューナーを使用しました。
以下のリンクから (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