Wie kann man mit Roslyn kompilierten Code in einer Visual Studio-Erweiterung innerhalb des aktuellen Visual Studio-Hosts debuggen?

Ich habe eine Visual Studio-Erweiterung, die Roslyn verwendet, um ein Projekt in der aktuell geöffneten Lösung abzurufen, zu kompilieren und Methoden daraus auszuführen. Das Projekt kann vom Programmierer geändert werden.

ch habe erfolgreich ein Projekt in einer Visual Studio-Erweiterung aus dem aktuellen VisualStudioWorkspace kompilier

    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());

            }
        }
    }

Dann kann ich die Assembly in der aktuellen Domäne laden, ihre Typen abrufen und Methoden aufrufen.

Das Problem ist, dass ich dem Programmierer erlauben muss, Haltepunkte zu setzen, wenn die aktuelle Konfiguration der geladenen Lösung debuggt.

Ich muss Code auf dem aktuellen Visual Studio-Host über eine Erweiterung ausführen und das Debuggen in der aktuellen Visual Studio-Instanz zulassen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage