Instantiate an .aspx that is an embedded resource of an assembly
Posted
by asbjornu
on Stack Overflow
See other posts from Stack Overflow
or by asbjornu
Published on 2010-04-16T10:51:22Z
Indexed on
2010/04/16
11:03 UTC
Read the original article
Hit count: 912
I have an ASP.NET (MVC) application in which I would like to load WebForms .aspx
files that are embedded as resources in 3rd party assemblies. The reason I want to do this is to make a sort of "plug-in" system where a .dll
file can be dropped in a folder and then picked up at runtime to provide additional functionality to the base application.
I've gotten the plugin system to work (I'm using MEF) with plugins written in ASP.NET MVC (Views and Controllers), but for plain old ASP.NET (Pages), I've got myself into a bit of a problem.
For the execution of the embedded .aspx
file (which, in the usual WebForm way Inherits="My.BasePage"
) I've created a custom VirtualPathProvider
, ResourceFile
ControllerFactory
and PageController
. Within the PageController
I've overridden the Execute(RequestContext)
method and within it I'm trying to compile the .aspx
with BuildManager.CreateInstanceFromVirtualPath(virtualPath, type)
.
When doing this, I get the error message "Could not load type 'My.BasePage'", even though I'm giving the BuildManager
the System.Type
of My.BasePage
in the call to CreateInstanceFromVirtualPath
. I seem to be stuck at this point. I've tried to Server.Transfer()
to the custom VirtualPathProvider
handled URL to the same .aspx
file, but that fails with the same error message.
How can I help BuildManager
find out where My.BasePage
is defined and how come the Type requiredBaseType
parameter of CreateInstanceFromVirtualPath
seems to be ignored?
I've tried to call BuildManager.AddReferencedAssembly()
, but that only fails with "This method can only be called during the application's pre-start initialization stage". MSDN says: "The method must be called during the Application_PreStartInit stage of the application", but I have no such event in my HttpApplication
object and find absolutely zero information about it on the internet.
Either way, I don't want to be calling BuildManager.AddReferencedAssembly()
in or before the Application_Start
event, since that makes me have to recycle the whole application to be able to add new plugins to the system.
Does anyone have any clues? Any other ideas on how I can "execute" an .aspx
file that is embedded as a resource within an assembly through reflection? Can I for instance pre-compile the .aspx
file within the same assembly as the base Page
class it inherits?
© Stack Overflow or respective owner