Как отладить код, скомпилированный с Roslyn в расширении Visual Studio внутри текущего хоста Visual Studio?
У меня есть расширения Visual Studio, которые используют Roslyn, чтобы получить проект в текущем открытом решении, скомпилировать его и запустить из него методы. Проект может быть изменен программистом.
Я успешно скомпилировал проект в расширении Visual Studio из текущего VisualStudioWorkspace.
private static Assembly CompileAndLoad(Compilation compilation)
{
using (MemoryStream dllStream = new MemoryStream())
using (MemoryStream pdbStream = new MemoryStream())
{
EmitResult result = compilation.Emit(dllStream, pdbStream);
if (!result.Success)
{
IEnumerable<Diagnostic> failures = result.Diagnostics.Where(diagnostic =>
diagnostic.IsWarningAsError ||
diagnostic.Severity == DiagnosticSeverity.Error);
string failuresException = "Failed to compile code generation project : \r\n";
foreach (Diagnostic diagnostic in failures)
{
failuresException += $"{diagnostic.Id} : {diagnostic.GetMessage()}\r\n";
}
throw new Exception(failuresException);
}
else
{
dllStream.Seek(0, SeekOrigin.Begin);
return AppDomain.CurrentDomain.Load(dllStream.ToArray(), pdbStream.ToArray());
}
}
}
Затем я могу загрузить сборку в текущем домене, получить ее типы и вызвать методы.
Проблема в том, что мне нужно разрешить программисту устанавливать точки останова, если текущая конфигурация загруженного решения отлажена.
Мне нужно запустить некоторый код в текущем хосте Visual Studio из расширения и разрешить его отладку в текущем экземпляре Visual Studio.