Was ich für mein Programm mal genutzt habe:
Code:
public class AssemblyLoader
{
private static Dictionary<string, Assembly> dic;
static AssemblyLoader()
{
AssemblyLoader.dic = null;
}
public AssemblyLoader()
{
}
public static Assembly Get(string assemblyFullName)
{
Assembly item;
if (!(AssemblyLoader.dic == null ? false : AssemblyLoader.dic.Count != 0))
{
item = null;
}
else if (!AssemblyLoader.dic.ContainsKey(assemblyFullName))
{
item = null;
}
else
{
item = AssemblyLoader.dic[assemblyFullName];
}
return item;
}
public static void Load(string embeddedResource, string fileName)
{
if (AssemblyLoader.dic == null)
{
AssemblyLoader.dic = new Dictionary<string, Assembly>();
}
byte[] numArray = null;
Assembly assembly = null;
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedResource);
try
{
if (manifestResourceStream == null)
{
throw new Exception(string.Concat(embeddedResource, " is not found in Embedded Resources."));
}
numArray = new byte[(int)manifestResourceStream.Length];
manifestResourceStream.Read(numArray, 0, (int)manifestResourceStream.Length);
try
{
assembly = Assembly.Load(numArray);
AssemblyLoader.dic.Add(assembly.FullName, assembly);
return;
}
catch
{
}
}
finally
{
if (manifestResourceStream != null)
{
((IDisposable)manifestResourceStream).Dispose();
}
}
bool flag = false;
string str = "";
SHA1CryptoServiceProvider sHA1CryptoServiceProvider = new SHA1CryptoServiceProvider();
try
{
string str1 = BitConverter.ToString(sHA1CryptoServiceProvider.ComputeHash(numArray)).Replace("-", string.Empty);
str = string.Concat(Path.GetTempPath(), fileName);
if (!File.Exists(str))
{
flag = false;
}
else
{
flag = (str1 != BitConverter.ToString(sHA1CryptoServiceProvider.ComputeHash(File.ReadAllBytes(str))).Replace("-", string.Empty) ? false : true);
}
}
finally
{
if (sHA1CryptoServiceProvider != null)
{
((IDisposable)sHA1CryptoServiceProvider).Dispose();
}
}
if (!flag)
{
File.WriteAllBytes(str, numArray);
}
assembly = Assembly.LoadFile(str);
AssemblyLoader.dic.Add(assembly.FullName, assembly);
}
}
In der Program.cs steht das:
Code:
private static Assembly CurrentDomainAssemblyResolve(object sender, ResolveEventArgs args)
{
return AssemblyLoader.Get(args.Name);
}
[STAThread]
private static void Main()
{
string str = "NAMESPACE.LIBRARY.dll";
AssemblyLoader.Load(str, str);
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(Program.CurrentDomainAssemblyResolve);
/*Standard Code*/
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}