Dll 리소스 포함해서 exe 배포
참조에서는 디렉토리 복사 false
리소스에 DLL을 포함 시키던가
아니면 밑의 사진처럼 폴더 만들고 기존파일 추가로 프로젝트에 추가한 후 이벤트로 로딩하면 된다.
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);
ApplicationStart();
}
private static void ApplicationStart()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var frmMain = new FrmMain();
Application.Run(frmMain);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
{
//Assembly thisAssembly = Assembly.GetExecutingAssembly();
//var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
//foreach (var r in thisAssembly.GetManifestResourceNames())
//{
// if (r.EndsWith(name))
// {
// using (Stream stream = thisAssembly.GetManifestResourceStream(r))
// {
// if (stream != null)
// {
// byte[] assembly = new byte[stream.Length];
// stream.Read(assembly, 0, assembly.Length);
// Console.WriteLine("Dll file load : " + r);
// return Assembly.Load(assembly);
// }
// }
// }
//}
//return null;
//Lamda
Assembly thisAssembly = Assembly.GetExecutingAssembly();
var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
if (resources.Count() > 0)
{
string resourceName = resources.First();
using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
{
if (stream != null)
{
byte[] assembly = new byte[stream.Length];
stream.Read(assembly, 0, assembly.Length);
Console.WriteLine("Dll file load : " + resourceName);
return Assembly.Load(assembly);
}
}
}
return null;
}