【发布时间】:2026-01-22 17:00:02
【问题描述】:
我有一个 Visual Studio 扩展,它使用 Roslyn 在当前打开的解决方案中获取一个项目,编译它并从中运行方法。项目可以由程序员修改。
我已经从当前的 VisualStudioWorkspace 成功地在 Visual Studio 扩展中编译了一个项目。
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 实例中对其进行调试。
【问题讨论】:
标签: c# debugging roslyn visual-studio-extensions