在点网核心中使用反射来加载静态类信息

时间:2018-07-26 09:34:26

标签: c# .net dll reflection .net-core

我有一个.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)来实现。

0 个答案:

没有答案