有时候写好的小程序发给别人使用时,对方经常性的按目录,会把程序依赖的相关dll丢失。
为减少这种错误,直接把相关的dll全部嵌入到exe程序中,可以避免以上问题
1.点击Resources.resx文件添加资源文件
2添加资源文件
3设置资源文件属性
4将dll文件属性中的生成操作 设置为 嵌入的资源
5添加引用
6在添加的引用文件上右键-属性
7在引用属性中把复制本地 设置 为false
8在Program.cs中添加代码方法
/// <summary>
/// 构造函数
/// </summary>
static Program()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(delegate (object sender, ResolveEventArgs e)
{
return SetAssembly("TestQieRu", e);//TestQieRu为自己的程序命名空间
});
}
/// <summary>
/// 设置嵌入的资源加载到程序集
/// </summary>
/// <param name="spaceName">调用资源的程序集命名空间</param>
/// <param name="args">对程序集解析失败时参数</param>
/// <returns>返回得到资源程序集</returns>
public static Assembly SetAssembly(string spaceName,ResolveEventArgs args)
{
string resName =spaceName+ ".Resources." + new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resName))
{
byte[] data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
return Assembly.Load(data);
}
}
修改自己的命名空间
生成运行,大功告成