gpt4 book ai didi

c# - Visual Studio 2015 - EnvDTE 读取错误列表

转载 作者:行者123 更新时间:2023-11-30 17:38:19 26 4
gpt4 key购买 nike

我要创建一个小型构建工具。它应该做的唯一事情:尝试构建解决方案并输出错误。但不是我有以下问题:如果构建失败,我无法读取 ErrorList。程序卡住了,一直等到永远。

我创建了一个小型测试类,它除了创建 Visual Studio 2015 的实例之外什么都不做,构建给定的解决方案并在构建失败时读出 ErrorList。

class Class1
{
DTE2 dte = (DTE2)System.Activator.CreateInstance(System.Type.GetTypeFromProgID("VisualStudio.DTE.14.0", true));

public void Test()
{
int id = dte.LocaleID;
//dte.MainWindow.Visible = true;

dte.Events.BuildEvents.OnBuildDone += new _dispBuildEvents_OnBuildDoneEventHandler(BuildEvents_OnBuildDone);

string solutionFile = @"C:\MyProjects\SolutionWithBuildErrors.sln";

dte.Solution.Open(solutionFile);

while (!dte.Solution.IsOpen)
System.Threading.Thread.Sleep(100);

Console.WriteLine("Start Build");
dte.Solution.SolutionBuild.Build(true);
Console.WriteLine("Finished Build");

dte.Quit();
}

private void BuildEvents_OnBuildDone(vsBuildScope Scope, vsBuildAction Action)
{
Console.WriteLine("BuildEvents_OnBuildDone Called");

int buildInfo = dte.Solution.SolutionBuild.LastBuildInfo;
switch (buildInfo)
{
case 0:
Console.WriteLine("Build erfolgreich");
break;
case 1:
Console.WriteLine("Build fehlerhaft");

getErrorList();
break;
}
}

private void getErrorList()
{
//dte.ExecuteCommand("View.ErrorList", " ");

Console.WriteLine("Lade Tool Windows");
ToolWindows tw = dte.ToolWindows;
Console.WriteLine("Geladen, Tool Windows");

Console.WriteLine("Lade ErrorList");
ErrorList el = tw.ErrorList;
Console.WriteLine("Geladen, ErrorList");

el.ShowErrors = true;

Console.WriteLine("Lese Error Liste");

//dte.ExecuteCommand("View.ErrorList", " ");
//ErrorItems errors = dte.ToolWindows.ErrorList.ErrorItems;
Console.WriteLine("#Errors: " + dte.ToolWindows.ErrorList.ErrorItems.Count);
for (int i = 1; i <= dte.ToolWindows.ErrorList.ErrorItems.Count; i++)
{
ErrorItem ei = dte.ToolWindows.ErrorList.ErrorItems.Item(i);
string errorLevel = "N/A";
errorLevel = ei.ErrorLevel.ToString();

string desc = "N/A";
if (ei.Description != null)
desc = ei.Description.ToString();

string file = "N/A";
if (ei.FileName != null)
file = ei.FileName.ToString();

string line = "N/A";
line = ei.Line.ToString();

string error = string.Format("{0}: {1}, File: {2}, Line: {3}", errorLevel, desc, file, line);

Console.WriteLine(error);
}
}
}

出于测试目的,只需创建一个控制台应用程序。主要是:

Class1 c1 = new Class1();
c1.Test();

Console.ReadLine();

必要的进口:环境DTE环境DTE80

我已经尝试在可见模式下运行 Visual Studio,以防 Visual Studio 实例在“等待 ErrorList Read”中获得焦点时可以读取 ErrorList。如果 Visual Studio 永远不会获得焦点(因为运行不可见或运行可见时从不点击)它不可能接收到 ErrorList。

也许还有另一种方法可以读出ErrorList?刚找到我正在使用的解决方案 =(

也许你可以帮我解决或验证 ErrorList 是否真的有问题。

最佳答案

这是获取 ErrorList 的另一种方法 - 如果这确实是您的问题:

        EnvDTE.Window window = this.dte.Windows.Item(EnvDTE80.WindowKinds.vsWindowKindErrorList);
EnvDTE80.ErrorList sel = (EnvDTE80.ErrorList)window.Selection;

但这两种方式应该是相当等价的。 Microsoft 确实为 VS 2015 重新编写了错误列表窗口实现 - 在此过程中引入了一些问题,因此我建议针对早期版本尝试您的代码。

关于c# - Visual Studio 2015 - EnvDTE 读取错误列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36834038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com