我有一个.NET解决方案,我写的最终结果是一个类库(我应该给客户端一个他可以在他的项目中引用和使用的DLL文件)。
我的解决方案包括:
当我按预期发布时,我会看到DLL文件 - 一个用于MyClassLib,另一个用于工具。
我只想给客户端一个DLL文件(MyClassLib),并且该DLL将知道如何使用Tools,即使它没有与它一起复制。
我想知道是否有任何方法可以在MyClassLib中嵌入Tools参考。如果是这样,怎么样?如果没有,在这种情况下你会做什么?
由于
答案 0 :(得分:3)
This post向您展示了如何做到这一点。
基本上,您使用AppDomain.CurrentDomain.AssemblyResolve
事件拦截程序集加载并从资源返回程序集。
或者,您可以使用ILMerge,这是一个可以将多个程序集组合到一个文件中的实用程序。
答案 1 :(得分:3)
陈旧,但会为未来的寻求者发布。
像这样建立一个类:
class Extractor
{
public static void ExtractResourceToFile(string resourceName, string filename)
{
if (!System.IO.File.Exists(filename))
using (System.IO.Stream s = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
using (System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Create))
{
byte[] b = new byte[s.Length];
s.Read(b, 0, b.Length);
fs.Write(b, 0, b.Length);
}
}
}
然后,添加
Extractor.ExtractResourceToFile("NAMESPACE.YOURDLL.dll", "YOURDLL.dll");
到您的主文件。
为了实现这一点,只需添加为现有文件,然后使用构建操作嵌入式资源。
适用于任何第三方dll,您当然可以同时使用dll导入或引用。
答案 2 :(得分:0)
我在LibZ获得了惊人的成绩。你可以把所有东西合并在一起。我用它将所有东西合并到一个安装程序.exe中,但它也适用于.dll。