2009-11-10 63 views
2

我有一些代碼引用一個外部DLL,它將在工廠加載。該DLL不應該被我的程序集直接引用,它將在運行時使用Assembly.Load()加載。如何調試使用反射從app.config加載的對象?

這一切都很好,但是當涉及到調試時,我希望能夠逐步瀏覽庫,就好像我使用類似new MyConcreteObject()的引用它一樣。

我知道我可以使用#if #endif在調試/發行版中以不同的方式編譯代碼 - 但我是否也可以在調試/發行版中附加引用?

如果我可以,那我該怎麼做,我該怎麼辦呢?如果不是,如何應該我會去做這件事?

目前我有:

public class ObjectFactory 
{ 
    public IObject CreateObject(string objectType) 
    { 
     /* Code to load and return the concrete object specified in the app.config */ 
    } 
} 

public class Program 
{ 
    public void Main(string[] args) 
    { 
     IObject obj = ObjectFactory.CreateObject("MyObject, MyObjectLibrary"); 
     obj.DoYourStuff(); 
    } 
} 

所以現在我想通過代碼步驟爲「DoYourStuff()」方法,我不希望有註釋掉加載我的對象行和其替換爲:

IObject obj = new MyObject(); 

,然後需要的項目引用指向MyObjectLibrary DLL,這將需要我刪除參考,並取消了的CreateObject()調用,而是註釋掉該行新的了具體對象。

有意義嗎?

+0

只要PDB文件可用,我就不必爲調試工作做任何事情。 – David 2009-11-10 18:51:32

回答

2

你不需要在VS中有一個引用來調試任何東西。只要你有可用的動態加載模塊的pdbs(無論是在原始的構建位置還是在你正在調試的代碼的目錄中),它都可以很好地進行調試。只需在VS中正常設置斷點 - 如果它正在工作,當加載相關模塊的pdb時,您會看到VS中的斷點變爲固定。如果不是,請檢查模塊窗口。

+0

我不敢相信我不知道......謝謝 – BenAlabaster 2009-11-10 19:01:34