2012-05-24 26 views
2

要重新創建我的生產環境我創建以下文件夾結構組件:無法加載管理位於同一文件夾

C:\ TEST \ tested.dll C:測試\ TEST \ \ tools.dll因爲我知道,程序應該尋找它的子文件夾工具文件

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="tested"/> 
     </assemblyBinding> 
    </runtime> 
    </configuration> 

據:

的tested.dll使用以下App.config文件編譯。當我嘗試啓動電臺時,仍然收到文件未找到的錯誤。

爲了讓這裏的一些方面是一個例子tested.dll來源:

namespace ConsoleApplication1 
    { 
     public static class Testable 
     { 
      public static tools.IToolAble usefultool = null; 

      public static void initialisation() 
      { 
       if (usefultool == null) usefultool = new UsefulTest() 
      } 
     } 

     public class UsefulTest : tools.IToolAble 
     { 
     } 
    } 

和tools.dll源的例子:

namespace tools 
    { 
     public interface IToolAble 
     { 
     } 
    } 

的崩潰的代碼是我testcode認爲是這樣的:

private CustomMock controller = new CustomMock(); 
    public void TestFixtureSetUp() 
    { 
     controller.LoadFrom(@"c:\TEST\tested.dll"); 

     //The next line crashes because tools assembly is needet but not found 
     controller.InvokeInitialisation(); 
    } 

我在想什麼? App.config是否正確?


編輯:

下面的答案是正確的,一旦正確的DLL可以選擇的路徑僅是已知的。所以其他團隊在加載之前必須添加一個new ResolveEventHandler。下面是一個簡化版本:

internal void AddResolveEventHandler(string assemblyname, string assemblylocation) 
    { 
     AppDomain.CurrentDomain.AssemblyResolve += 
     new ResolveEventHandler(
      (sender, args) => 
      { 
       Assembly ret = null; 
       if (
        new AssemblyName(args.Name).Name == assemblyname && 
        File.Exists(assemblylocation)) 
       { 
        ret = Assembly.LoadFrom(assemblylocation); 
       } 
       return ret; 
      } 
     ); 
    } 
+1

融合日誌查看器說什麼? Fuslogvw.exe – CodingBarfield

+0

我沒有在我的機器上。它應該在「C:\ Program Files \ Microsoft SDK \ Windows \ v7.0A \ bin」中,但不是。我正在使用VS2010 Express - 也許這就是爲什麼fuslogvw丟失的問題。我會嘗試以某種方式得到它。 – Johannes

+1

只需安裝.Net SDK或將其從Visual Studio安裝中複製粘貼即可。 – CodingBarfield

回答

0

的tested.dll使用以下app.config文件編譯

它需要一個yourapp.exe.config文件,而不是一個DLL的.config文件。 CLR只查找與主進程關聯的.config文件。

並注意app.vshost.exe.config,在啓用主機進程進行調試時需要。

而且使用單元測試運行的時候看出來,另一個.exe文件

一定要考慮這是否真的值得的麻煩。你的用戶不會關心DLL的位置。

+0

我模擬一個exe文件,我不開發(不同的團隊/部門)。我的dll存儲在服務器上,用於不同的問題組合。有一個tools.dll從來沒有參與 - 我想我必須要求其他團隊在運行時改變他們的配置。 – Johannes

相關問題