Как я могу использовать Visual Studio `Immediate Window` для вызова метода внешней сборки? - PullRequest
0 голосов
/ 02 октября 2018

Как развернуть сборку, чтобы можно было вызывать методы в служебной библиотеке из «Немедленное окно» , не добавляя ссылки на проект решения в MyCompany.DebuggingTools.dll?

КОНТЕКСТ

Я написал служебную библиотеку (назовем ее: MyCompany.DebuggingTools.dll), которая включает методы, которые полезны для отладки приложений в процессе разработки.

В идеале я хотел бы иметь возможность:

  1. использовать "Немедленное окно" для вызова методов в моей служебной библиотеке
    • itподразумевается, что отладчик Visual Studio будет присоединен к тестируемому приложению
  2. тестируемое приложение не будет иметь какие-либо ссылки на проект решениядо MyCompany.DebuggingTools.dll
    • По сути, я пытаюсь расширить возможности "Немедленное окно" .

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

  • Visual Studio 2017
  • Windows 10
  • проект ...
    • isпростая библиотека классов C #
    • была подписана с использованием ключевого файла, сгенерированного Visual Studio
  • сценариев:
    1. MyCompany.DebuggingTools.dll добавлено в качестве ссылки на тестируемый проект
      • Я могу вызвать библиотеку инструментов из "Immediate Window" .Это работает.
      • Тестируемый проект не должен иметь ссылку на сборку инструментов.
    2. MyCompany.DebuggingTools.dll не был добавлен какссылка на проект
      • Когда я пытаюсь вызвать один из инструментов из "Немедленное окно" , появляется следующая ошибка:
        • error CS0246: The type or namespace name 'MyCompany' could not be found (are you missing a using directive or an assembly reference?)

1 Ответ

0 голосов
/ 19 января 2019

Я искал что-то похожее - это полный и полный взлом, но он работает в Visual Studio 2017 Немедленном окне и, возможно, стоит его использовать, если вы используете его для особенно тяжелой отладочной сессии.:

dynamic xx = System.Activator.CreateInstance(System.Reflection.Assembly.LoadFile(@"C:\dev\ImmediateWindowHelpers.dll").GetType("FullyQualifiedNamespace.Helpers"));

Где класс помощников нестатический .Теперь я могу вызывать методы для него:

xx.PrintParameters(sqlParameterList);

Так как это вернет строку, она просто отобразится в ближайшем окне.Я проверил это, и это работает для меня.Опять же, этот экземпляр будет жить только для сеанса отладки и должен будет загружаться каждый раз.Не так уж сложно, когда вы привыкнете, это одна строка.

Я бы предположил, что расширение Visual Studio какого-то рода было бы немного более идеальной ситуацией, если бы оно загружало сборку длявы каждый раз, когда отлаживаете, или что, если во время сборки была включена сборка в домен приложения?Я никогда не разбирался в этом, но, похоже, стоит потратить много времени на отладку.

...