好,因此构建了这个应用程序,它是一项任务,因此我想在其中嵌入一些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
///
}