整个思路:将外部dll增加到项目资源文件里面,从资源文件加载外部dll;使用AppDomain.CurrentDomain.AssemblyResolve事件实现;
1. 将外部dll增加到项目资源文件里面
2.程序启动时,从资源文件加载外部dll
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
string resourceName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace +"."+ new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
3.测试结果
namespace DllOne
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.label1.Text = JsonConvert.SerializeObject(new Test());
}
}
public class Test
{
public string Id { get; set; } = "XS000001";
public string Name { get; set; } = "梦想";
}
}