Running a particular function from same assembly in a difference application domain than the default one is pretty straightforward. I guess the code below is self explainatory.
class RemoteClass : MarshalByRefObject
{
public void Action()
{
Console.WriteLine("Running From Appplication Domain :- {0}",AppDomain.CurrentDomain.FriendlyName);
}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
string ClassFullName =typeof(RemoteClass).FullName ;
string AssemblyName = Assembly.GetExecutingAssembly().FullName;
AppDomain TempDomain = AppDomain.CreateDomain("secondDomain");
TempDomain.Load(Assembly.GetExecutingAssembly().FullName);
RemoteClass objSecondDomain = TempDomain.CreateInstanceAndUnwrap( AssemblyName , ClassFullName ) as RemoteClass;
objSecondDomain.Action();
RemoteClass objMainDomain = new RemoteClass();
objMainDomain.Action();
AppDomain.Unload(TempDomain);
Console.ReadLine();
}
}
Output
------
Running From Appplication Domain :- secondDomain
Running From Appplication Domain :- ConsoleApplication1.vshost.exe
PS: Point to be noted here is that the Class whose instance is being created should inherit from MarshalByRefObject.