2009-11-10 23 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

相关问题