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

标签 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() 调用,而是注释掉新的具体对象所在的行。

有道理吗?

最佳答案

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

关于c# - 如何使用反射调试从 app.config 加载的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1710262/

相关文章:

.net - 无法从 .NET 应用程序连接到 Heroku Postgres (Npgsql)

.net - 如何运行代理 POCO?

c# - 在 C# 中返回对 double 的引用?

c# - GridView 中的 Row_DataBound 或 Row_Created 事件

c# - 为什么在使用 Entity Framework 6.x 通过 SqlQuery 从 View 中获取数据时不使用我的 ColumnAttribute?

python - 使用 Wing IDE 调试多线程 Python

debugging - 如何使用 PDB 文件

windows - 如何调试 .BAT 脚本?

c# - 如何将文本框数据绑定(bind)到列表<>中的特定索引

c# - 了解MVVM Cross Nuget软件包