如何使用反射调试从app.config加载的对象?

时间:2009-11-10 18:46:25

标签: c# .net debugging reflection

我有一些代码引用了一个外部DLL,它将在生产中由工厂加载。 DLL不应该直接由我的程序集引用,它将在运行时使用Assembly.Load()加载。

这一切都很好,但是当涉及到调试时,我希望能够单步执行库,就好像我使用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()调用,而是注释掉新的具体对象的行。

有意义吗?

1 个答案:

答案 0 :(得分:2)

您无需在VS中使用引用来调试任何内容。只要你有动态加载模块的pdbs(无论是在原始构建位置还是在你正在调试的代码的目录中),它都可以正常调试。只需在VS中正常设置断点 - 如果它正在工作,你应该看到在加载有问题的模块的pdb时,断点在VS中变为固定。如果没有,请检查模块窗口。