代码之家  ›  专栏  ›  技术社区  ›  BenAlabaster

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

  •  2
  • BenAlabaster  · 技术社区  · 15 年前

    我有一些代码引用了一个外部的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()调用的注释,而不是注释掉new在具体对象上的行。

    有道理?

    1 回复  |  直到 15 年前
        1
  •  2
  •   nitzmahone    15 年前

    您不需要在vs中有一个引用来调试任何东西。只要动态加载模块的PDB可用(在原始构建位置或在包含调试代码的目录中),它就可以进行调试。只需在vs中正常设置断点-如果它正常工作,那么在加载相关模块的pdb时,应该会看到断点在vs中变为实心。如果没有,请检查模块窗口。