我必须将插件DLL加载到WebAPI应用程序中。所以我创建了一个自定义IPlugin接口,它公开了插件可以对现有控制器内部做出反应的操作,而且我想允许插件DLL提供更多路由。所以我无法将DLL添加到References列表中,我必须根据配置文件条目动态加载它。
因此,我将ExamplePlugin.DLL添加到我的WebAPI的bin目录(C:\users\Alexander\Source\Repos\Testbed\WebAPI\bin
)并从web config的AppSettings中引用它:
<add key="ExamplePlugin" value="ExamplePlugin.dll" />
并尝试加载它:
string dllRelativePath = ConfigurationManager.AppSettings[possiblePlugin];
FileInfo dllFileInfo = new FileInfo(dllRelativePath);
Assembly dllAssembly = Assembly.LoadFile(dllFileInfo.FullName);
foreach (Type type in dllAssembly.GetExportedTypes())
{
if (typeof(IPlugin).IsAssignableFrom(type))
{
IPlugin i = (IPlugin)Activator.CreateInstance(type);
PluginManager.Add(i);
}
}
但是,错误消息显示:
System.IO.FileNotFoundException:找不到
无法加载文件 c:\ windows \ system32 \ inetsrv \ ExamplePlugin.dll : Das System kann die angegebene Datei nicht finden。 (Ausnahme von HRESULT:0x80070002)
为什么我的WebAPI DLL在错误的文件夹中搜索,我该如何解决?
答案 0 :(得分:1)
您需要将路径映射到应用程序文件夹,否则它将假定该文件位于System32中。
string dllPlugin = "ExamplePlugin.dll";
FileInfo dllFileInfo = new FileInfo(MapPath("~/bin/" + dllPlugin));
Assembly dllAssembly = Assembly.LoadFile(dllFileInfo.FullName);