我使用VirtualPathProvider来加载在编译时不存在的控件(ascx)。因此,当某个路径结构被请求时,VirtualPathProvider会重写路径到ascx,并加载包含该控件代码的dll。
一切工作正常,除了dll加载。我可以载入程序集,但网站找不到它。如果我把它放在bin文件夹里,一切都没问题。
加载程序集,我使用:
System.Reflection.Assembly.LoadFrom(file.FullName);
如何加载此程序集,以便在页面上呈现ascx时可以使用它?
同样,我可以将dll放在站点的bin文件夹中,但由于这是动态内容,我更喜欢将其全部隔离。
调用
System.Reflection.Assembly.LoadFrom(file.FullName);
但是它不会抛出异常这样做,但仍然没有找到你的程序集时,ascx文件呈现?您确定ascx文件引用了完全限定的程序集名称吗?
您可能需要处理AssemblyResolve事件:
AppDomain.CurrentDomain.AssemblyResolve += OnCurrentDomainAssemblyResolve
private static Assembly OnCurrentDomainAssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name == "myDynamicAssemblyName") return _myPreviouslyLoadedDynamicAssemblyObtainedFromAssemblyLoadFrom;
return null;
}