【发布时间】:2009-04-29 08:27:11
【问题描述】:
我有一个引用外部程序集的 ASP.net 应用程序,我需要动态加载和发现实现已知接口的任何类型。我遇到的问题是我反映的类型与正在运行的接口不匹配,所以我无法转换它。
例子:
此代码在 ASP.net 应用程序中运行。
var assembly = Assembly.LoadFile(Path.Combine(HttpRuntime.BinDirectory, "ExternalAssembly.dll"));
var type = assembly.GetExportedTypes().First<Type>(x => x.Name == "AClass"); // AClass implements IAInterface
var reflectedInterface = type.GetInterface(typeof(IAmAInterface).ToString());
if (reflectedInterface != typeof(IAmAInterface))
throw new Exception("This makes me sad"); // This code gets run
我可以看到从 bin 加载的反射接口和从 typeof 返回的接口之间的唯一区别是 typeof 程序集在临时 ASP.net 路径(C:\WINDOWS\Microsoft.NET\Framework \v2.0.50727\Temporary ASP.NET Files\root\08c43c8b\3adac8cf\assembly\dl3\eb7a4127\0235ea60_a3c8c901\ReflectionTest.DLL)
感谢 Paul Alexander,我已将代码更改为使用 Assembly.Load 方法,而不是解决问题的 Assembly.LoadFile。
wwilden:我也尝试将接口提取到它自己的程序集中,这也解决了问题。
【问题讨论】:
标签: asp.net reflection