Как я могу отлаживать объекты, загруженные из app.config, используя отражение? - PullRequest
2 голосов
/ 10 ноября 2009

У меня есть некоторый код, который ссылается на внешнюю 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();

Для этого требуется ссылка на проект, указывающая на DLL-библиотеку MyObjectLibrary, которая потребует, чтобы я удалил ссылку и раскомментировал вызов CreateObject (), а вместо этого закомментировал строку, в которой указано new, для конкретного объекта.

Имеет смысл?

1 Ответ

2 голосов
/ 10 ноября 2009

Вам не нужно иметь ссылку в VS, чтобы что-то отлаживать. Если у вас есть pdbs для динамически загружаемого модуля (либо в исходном месте сборки, либо в каталоге с отлаживаемым кодом), он будет отлажен очень хорошо. Просто установите точки останова обычно в VS - если он работает, вы должны увидеть, что точка останова становится твердой в VS, когда загружена pdb для рассматриваемого модуля. Проверьте окно модулей, если нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...