如何将DLL依赖项移动到另一个文件夹

时间:2015-07-04 10:09:07

标签: wpf vb.net dll dependencies mahapps.metro

我的WPF应用程序正在使用MahApps.Metro,它需要MahApps.Metro.dllsystem.windows.interactivity.dll。如何将它们移动到文件夹,例如文件夹bin并仍然使它们工作?如果我只是转移它们,应用程序根本不会启动。请帮忙!

1 个答案:

答案 0 :(得分:1)

如果你单独留下所有这些DLL文件并让.NET Framework对它进行排序,那可能是最好的。如果必须移动它们,可以编辑引用的属性并将Copy Local属性设置为false,这样在编译时就不会输出DLL文件。

在App.cs文件中(假设您正在使用C#)添加以下内容:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name.StartsWith("MahApps.Metro"))
    {
        System.IO.BinaryReader stream = new BinaryReader(new FileStream("bin/MahApps.Metro.dll", FileMode.Open));
        byte[] assembly = stream.ReadBytes((int)stream.BaseStream.Length);
        return Assembly.Load(assembly);
    }
    return null;
}

编辑上面的代码以满足您的需求,以便它能够按照您希望的方式运行。

您必须验证您使用的所有DLL文件与目标文件的版本相同,否则.NET将引发异常。此外,DLL文件可能不存在,如果在网络位置使用它,加载流可能会引发一些问题。总而言之,它可能会起作用,但它可能不值得这么麻烦。