75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|