我想要实现的是从解决方案中获取带有反射的所有程序集,然后使用它们的类型,因此我可以使用.NET Core 2.0将它们放在集合Type[]
中。
我可以使用的是
AppDomain.CurrentDomain.GetAssemblies();
- 问题是这将获得所有引用和使用的程序集。在我的情况下,我想获得所有引用的程序集,但不是必需的。所以问题是JIT编译正在删除未使用的项目的引用,因此在这种情况下,这将无法正常工作。Assembly.GetExecutingAssembly().Location
获取DLL的位置,然后加载所有程序集。这里的问题是,当后者我想使用.GetTypes()
时抛出类型System.Reflection.ReflectionTypeLoadException
的异常然后加载异常我有System.IO.FileNotFoundException: Could not load file or assembly Microsoft.EntityFrameworkCore
。问题是,它试图使用无法找到的库,使用Assembly.LoadFrom(dll)
显然加载DLL似乎也不会加载依赖项(库)。我发现的是BuildManager.GetReferencedAssemblies,根据我到目前为止所读到的内容,它说这可行,并且即使它们未被使用,它也能获得所有参考资料,所以我也在MsBuild库中找到它,但是不包含该方法,所以我可能引用了错误的包。
我愿意接受任何建议,如何从.NET Core 2.0项目加载所有解决方案程序集及其类型。
提前致谢!
答案 0 :(得分:2)
我有一个非常类似的问题。我不确定这是否适用于您的案例,但List<Assembly> usedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select((item) => Assembly.Load(item)).ToList();
可能是一个解决方案。