我有许多程序集,我在 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);