我有一些引用外部 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/