3

Unity ゲームでライブラリとして扱う多数のアセンブリがあります。ゲームが開始したら、すべてのファイルのマニフェストだけをすばやく読み取ります (将来的には 50 以上になる可能性があります)。メモリ内にリストを作成します。

著作権と製品情報のフィールドには、読むのに十分な有用な情報をいくつか詰め込みましたが、アセンブリ全体を自分のアプリ ドメインや他のアプリ ドメインにロードしたくはありません。

AssemblyName.GetAssemblyName が最も軽量のようです

AssemblyName myAssemblyName = AssemblyName.GetAssemblyName("E:/Code/Projects/MyUtilities/bin/Debug/MyUtilities.dll");

ただし、アセンブリ名、バージョン、およびカルチャ情報のみを提供するため、役に立ちません。とにかく、これらにカスタム文字列を含めることはできません(AssemblyInfo.csのコードを使用してカスタム文字列を強制すると、アセンブリはコンパイルに失敗します)

それで、最後のオプションである Assembly.ReflectionOnlyLoadFrom に行き着きます。

Assembly myAssembly = Assembly.ReflectionOnlyLoadFrom("E:/Code/Projects/MyUtilities/bin/Debug/MyUtilities.dll");

object[] map = myAssembly.GetCustomAttributes(false);

これは実際にファイル全体をロードしますか? 属性だけが欲しいので、それは私には多すぎます。

その場合、オプションはありませんが、アセンブリファイルに余分なバイトを自分で追加し、バイト配列を渡す前にバイトを削除する必要があります

Assembly.Load(bytes);
4

0 に答える 0