Como depurar código compilado com Roslyn em uma extensão do Visual Studio dentro do host atual do Visual Studio?
Eu tenho extensões do Visual Studio que usam o Roslyn para obter um projeto na solução aberta atual, compilá-lo e executar métodos a partir dele. O projeto pode ser modificado pelo programador.
Eu compilei com êxito um projeto em uma extensão do Visual Studio do VisualStudioWorkspace atual.
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());
}
}
}
Então eu posso carregar o assembly no domínio atual, obter seus tipos e chamar métodos.
O problema é que eu preciso permitir que o programador coloque pontos de interrupção se a configuração atual da solução carregada for depurada.
Preciso executar algum código no Host do Visual Studio atual a partir de uma extensão e permitir que ele seja depurado na instância atual do Visual Studio.