我想要实现的是通过反射从解决方案中获取所有程序集,然后获取它们的类型,这样我就可以使用 .NET Core 2.0 将它们放入集合 Type[]
中。
我能用的是
AppDomain.CurrentDomain.GetAssemblies();
- 问题是这将获取所有引用和使用的程序集。在我的例子中,我想获取所有被引用但没有必要使用的程序集。所以问题是 JIT 编译正在删除未使用的项目的引用,所以在那种情况下这是行不通的。- 其他选项是使用
Assembly.GetExecutingAssembly().Location
获取 DLL 的位置,然后加载所有程序集。这里的问题是,当后者我想使用.GetTypes()
这个从类型System.Reflection.ReflectionTypeLoadException
抛出异常然后加载器异常我有System .IO.FileNotFoundException:无法加载文件或程序集 Microsoft.EntityFrameworkCore
。问题是,它正在尝试使用无法找到的库,显然使用Assembly.LoadFrom(dll)
加载 DLL 似乎也不会加载依赖项(库)。
我找到的是 BuildManager.GetReferencedAssemblies ,从我目前读到的内容来看,它说这可以工作并且它正在获取所有引用,即使它们没有被使用,所以我也在 MsBuild 库中找到它,但不包含该方法,所以我可能正在引用包错了。
我愿意接受任何建议,如何从 .NET Core 2.0 项目加载所有解决方案程序集及其类型。
提前致谢!
最佳答案
我有一个非常相似的问题。我不确定这是否适合您的情况,但是 List<Assembly> usedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select((item) => Assembly.Load(item)).ToList();
可能是一个解决方案。
关于C# - 通过反射获取所有程序集及其类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46586063/