Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用反射调试从app.config加载的对象?_C#_.net_Debugging_Reflection - Fatal编程技术网

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

C# 如何使用反射调试从app.config加载的对象?,c#,.net,debugging,reflection,C#,.net,Debugging,Reflection,我有一些代码引用了一个外部DLL,在生产中将由工厂加载。我的程序集不应直接引用DLL,它将在运行时使用assembly.Load()加载 这一切都很好,但在调试时,我希望能够像使用new MyConcreteObject() 我知道我可以使用#if#endif在debug/release中以不同的方式编译代码-但是我还可以拥有一个仅附加在debug/release中的引用吗 如果我可以,我应该这样做,我该怎么做?如果没有,我应该怎么做 目前我有: public class ObjectFacto

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

这一切都很好,但在调试时,我希望能够像使用
new MyConcreteObject()

我知道我可以使用#if#endif在debug/release中以不同的方式编译代码-但是我还可以拥有一个仅附加在debug/release中的引用吗

如果我可以,我应该这样做,我该怎么做?如果没有,我应该怎么做

目前我有:

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行


有意义吗?

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

只要PDB文件可用,我就不必做任何调试工作。