using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Security.Policy; using System.Text; using System.Threading; using System.Windows.Forms; using Xylem.Common.Utils.AssemblyLoader; namespace DllLoadTest { public partial class FrmHost : Form { public FrmHost() { InitializeComponent(); var assemblyPath = "c:\\Users\\Thomas\\Downloads\\ServiceFwUpdateSw\\"; var appDomainName = "AppDomainServiceFwUpdateSw"; var assemblyName = "Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.dll"; var className = "Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.FrmServiceFwUpdateSw"; //var domainSetup = new AppDomainSetup //{ // ApplicationBase = assemblyPath //}; //var appDomainEvidence = AppDomain.CurrentDomain.Evidence; var appDomain = AppDomain.CreateDomain(appDomainName);//, appDomainEvidence, domainSetup); var hostDomainName = AppDomain.CurrentDomain.FriendlyName; appDomainName = appDomain.FriendlyName; var value = (AppDomainProxy)appDomain.CreateInstanceAndUnwrap(typeof (AppDomainProxy).Assembly.FullName, typeof (AppDomainProxy).FullName ?? string.Empty); var _object = value.LoadAssembly(assemblyPath, assemblyName, className); if (_object is Form formFwUpdate) { formFwUpdate.Show(); } //AppDomain.Unload(appDomain); //alternative //var setup = AppDomain.CurrentDomain.SetupInformation; //setup.ApplicationBase = _basePath; //setup.ShadowCopyFiles = "true"; //var domain = AppDomain.CreateDomain("MyDomainName" + Guid.NewGuid(), null, setup); } } public class AppDomainProxy : MarshalByRefObject { public Object LoadAssembly(String assemblyPath, String assemblyName, String className) { try { var loadedAssembly = Assembly.LoadFrom(Path.Combine(assemblyPath, assemblyName)); // find the method in fully specified class name var type = loadedAssembly.GetType(className); return type == null ? null : Activator.CreateInstance(type); } catch (Exception) { return null; } } } }