我有一个.NET(框架)项目,其中包含一个解决方案文件,其中包含许多csproj文件。
假设我的一个csproj中有一个类,它是一个简单的模型类,但是有一些注释。我想加载包含此类的DLL,然后使用反射来检索有关该类的信息。我需要检索的信息是字段列表(模型变量)以及对象上的注释。
我希望我可以只为包含我的模型类的名称空间加载DLL,找到类型,然后使用反射来发现我需要的东西。
我使用的是点网核心应用程序,但是我正在使用的DLL是点网框架。不确定是否会有所不同,如果可以,我可以切换到这个新项目的框架。
这是到目前为止我要加载DLL的代码:
var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(@"url to single dll");
var types = myAssembly.GetTypes();
第二行给我这个例外:
System.Reflection.ReflectionTypeLoadException -无法加载一个或 更多要求的类型。检索LoaderExceptions属性 有关更多信息。
如果进入LoaderExceptions,我会看到80个子异常,这对我来说意味着我需要进一步加载DLL才能获得任何类型。
System.IO.FileNotFoundException:无法加载文件或程序集 'System.Web.Mvc,版本= 5.2.3.0,文化=中性, PublicKeyToken = 31bf3856ad364e35'。系统找不到文件 指定。文件名:'System.Web.Mvc,版本= 5.2.3.0, 文化=中立...
要解决此问题,我尝试将项目中的System.Web.Mvc dll添加到新的应用程序bin文件夹中,希望dot net能够找到有问题的dll,并删除一些子异常。将dll直接放入bin或“ bin \ Debug \ netcoreapp2.0”中无效。
那么问题是:我是否需要显式加载我加载的dll所依赖的所有dll,以便能够对所需dll中的类型使用反射?请记住,我只想加载在编译时可用的信息(对象上的字段,加上注释的字符串值)。还是有一种方法可以通过加载单个dll(或可能是sln)来实现。