2014-04-13 52 views
0

我在VS 2013(c#)中有2個解決方案,SolutionA包含網站等,SolutionB包含像密碼生成器等常用邏輯(我也用於其他解決方案)。在VS 2013項目的內部包含外部DLL

SolutionB使用外部Bcrypt DLL(等)。但是,當我在SolutionA中包含來自SolutionB的項目/ dll的引用時,我需要手動引用SolutionB中使用的dll。所以我的SolutionA仍然需要對Bcrypt DLL的引用......儘管這隻用於SolutionB代碼。

如何將此外部Bcrypt dll包含到由SolutionB構建的dll中,因此我不需要在SolutionA中引用其他任何內容,但我自己的SolutionB dll是?

謝謝,希望這不是太混亂:)

+0

http://blogs.msdn.com/b/saurabh_singh/archive/2009/04/08/unable-to-load-dll-bcrypt-dll-the-specified-module -could-not-found-exception-from-hresult-0x8007007e.aspx –

回答

-1

有像ILMerge /自定義工具等各種選項中嵌入一個DLL到另一個。這裏是一個CODE的方式:

  1. 在解決方案B中,轉到BCrypt.dll並在屬性中執行'copy local' = false
  2. 添加DLL作爲解決方案的一部分。 (如果還沒有)
  3. 將BCrypt.dll的生成操作設置爲Embedded Resource
  4. 現在在入口點/啓動B溶液DLL的代碼,訂閱AssemblyResolve事件如下:

5.

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); 
} 
}; 
  1. 基本上我們所做的是嵌入式Bcrypt.dll到解決方案B的DLL中,這樣當解決方案B的dll被引用時,我們也有可用的BCrypt.dll。
  2. 而當.NET程序集解析失敗,上述事件引發任何自定義程序集加載,我們提供我們的BCrypt的地址到流程。

如果Assembly.GetExecutingAssembly()不起作用,它可能試圖在解決方案A的資源流中搜索BCrypt。

嘗試

​​
+0

thx,使用ILmerge並試圖創建一個最終能夠工作的postbuild腳本。 – user2713516

相關問題