C# 在项目中包含外部DLL';s内置VS 2013

C# 在项目中包含外部DLL';s内置VS 2013,c#,.net,visual-studio,dll,build,C#,.net,Visual Studio,Dll,Build,我在VS 2013中有2个解决方案(c#),SolutionA包含网站等,SolutionB包含常见逻辑,如密码生成器等(我也用于其他解决方案) SolutionB使用外部Bcrypt dll(除其他外)。但是,当我在SolutionA中包含对SolutionB中的Project/dll的引用时,我需要手动引用SolutionB中使用的dll。因此,我的SolutionA仍然需要对Bcrypt DLL的引用…即使这只在SolutionB代码中使用 如何将此外部Bcrypt dll包含到从Solu

我在VS 2013中有2个解决方案(c#),SolutionA包含网站等,SolutionB包含常见逻辑,如密码生成器等(我也用于其他解决方案)

SolutionB使用外部Bcrypt dll(除其他外)。但是,当我在SolutionA中包含对SolutionB中的Project/dll的引用时,我需要手动引用SolutionB中使用的dll。因此,我的SolutionA仍然需要对Bcrypt DLL的引用…即使这只在SolutionB代码中使用

如何将此外部Bcrypt dll包含到从SolutionB构建的dll中,这样我就不需要引用SolutionA中的任何其他内容,只需要引用我自己的SolutionB dll


谢谢,希望不要太混乱:)

有各种选项,如ILMerge/自定义工具等,可以将一个DLL嵌入到另一个DLL中。以下是一种代码方式:

  • 在解决方案B中,转到BCrypt.dll并在属性中执行
    'copy local'=false
  • 将DLL添加为解决方案的一部分。(如果还没有)
  • 将BCrypt.dll的生成操作设置为
    嵌入式资源
  • 现在,在解决方案B DLL的入口点/启动代码中,订阅
    AssemblyResolve
    事件,如下所示:
  • 五,

  • 基本上,我们所做的是将Bcrypt.dll嵌入到解决方案B的dll中,这样当引用解决方案B的dll时,我们也可以使用Bcrypt.dll
  • 当.NET程序集解析失败时,任何自定义程序集加载都会引发上述事件,我们会向流提供BCrypt的地址
  • 如果上面的
    Assembly.getExecutionGassembly()
    不起作用,它可能正在尝试在解决方案A的资源流中搜索BCrypt

    试一试


    thx使用ILmerge并尝试创建最终有效的后期构建脚本。
    AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
    {
     string dllName = args.Name + ".dll";    
    
     using (var stream= Assembly.GetExecutingAssembly().GetManifestResourceStream(dllName))
     {
      byte[] assemblyData = new byte[stream.Length];
      stream.Read(assemblyData, 0, stream.Length);
    
      return Assembly.Load(assemblyData);
     }
    };
    
    Assembly.Load("SolutionBDLL")