0

.NET アセンブリに非パブリック型があり、このアセンブリ内からリフレクションを使用してロードしています。

これはデバッグ ビルドではうまく機能しますが、リリース ビルドでは、リンカーは次の理由でこの型を削除します。

  • それは内部です
  • アセンブリのコードで参照されていません

プロジェクト全体でこの動作をオフにするか、タイプを公開することもできますが、それは私が望んでいることではありません。代わりに、どのような場合でも型を追加するようリンカーに指示する方法を探しています。理想的には、 System::Runtime::CompilerServices::DiscardableAttributeの正反対のようなものです。

4

1 に答える 1

1

これを行う最も簡単な方法は、型を参照することです。(型を直接参照するのではなく、型を見つけるためにリフレクションを使用する理由があると思います。) これは、リフレクションを行うメソッド、またはパブリック型の静的コンストラクターで行うことができます。どこでこれを行うにしても、何が起こっているのか、なぜそれを行うのかを文書化する限り、問題ありません。

Type^ keepThis = InternalOnlyClass::typeid;おそらく必要なのはメソッド内だけです。コンパイラがそのステートメントを最適化する場合、internal: static Type^ keepThis = InternalOnlyClass::typeid;そのトリックを実行する必要があります。

于 2012-08-14T17:18:51.233 に答える