带有嵌入式dll的应用不会在另一台计算机上运行

时间:2018-10-30 05:52:14

标签: c# dll

好,因此构建了这个应用程序,它是一项任务,因此我想在其中嵌入一些dll,因此提交时我只有一个文件。该dll仅用于某些UI控件和视觉效果,

我经历了必要的步骤,将引用下的Copy Local设置为false,并将Build Action设置为Embedded Resource,但是我遇到的问题是,如果我复制应用程序exe,到另一台电脑,除非我将引用的dll复制到exe的同一目录中,否则它将无法运行,因此在我看来,它没有加载嵌入式dll文件,或者我可能设置了错误的

不过请注意,该应用程序确实可以在我创建的PC上正常运行,而无需在exe文件旁边引用dll。

这是我使用的代码:

//other using statements
using System.Reflection;
using library; //<--- reference to embedded dll

namespace app {
public partial class Form1 : Form1 {
    [DllImport("user32.dll")]
    public static extern int GetAsyncKeyState(int i);

    private string embeddedFile = "app.library.dll";

    public Form1() {
        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        InitializeComponent();
    }

    private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) {
        using(var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedFile)) { //<-- debugging shows a System.IO.UnmanagedMemoryStream exception here
            byte[] assemblyData = new byte[stream.Length];
            stream.Read(assemblyData, 0, assemblyData.Length);
            return Assembly.Load(assemblyData);
        }
    }

    ///
    /// some unrelated code
    ///
}

0 个答案:

没有答案