通过EnvDTE AddIn从C ++解决方案中删除项目时,Visual Studio崩溃

时间:2012-12-18 01:14:24

标签: visual-studio-2010 access-violation envdte

我编写了一个加载项,修改了(C ++,最有可能,但可能是包含c ++的点网)解决方案。

加载项似乎成功运行。

有时,保存后,甚至在成功构建使用外接程序修改的解决方案后,VisualStudio会崩溃。如果我不保存它也会崩溃,如果我试图关闭而不保存它会崩溃。只...不是每次都。

代码在确定解决方案中不需要某些项目后,尝试在try-catch中删除它们http://msdn.microsoft.com/en-us/library/envdte._solution.remove(v=vs.100).aspx - 并且删除成功。

就像我说的,我可以保存,然后,解决方案可以保存并正确构建......

唯一的问题是,当我尝试关闭解决方案或Visual Studio时,它崩溃了 - 非常糟糕。在AddIn完成后,它可能也会崩溃,稍后会...未确定。

要进行问题排查,我最终添加了

try
{
  solution.Close(false);
}
catch (System.Exception e)
{
  MessageBox.Show(e.Message);
}

我收到了一个错误:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我不想通过代码关闭解决方案,我只是不希望Visual Studio崩溃。

现在,我已使用MessageBox替换了solution.Remove(projectToRemove) - 我的代码很满意 - 并且无法执行其工作。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

答案 - 不满意,因为它是:我的代码在源代码控制下 - 我有VisualHg - 并且在代码完成后 - 从AddIn返回后 - VisualHg是抛出异常的代码。

据我所知 - 并通过放弃解决了问题 - 我的AddIn最终会告诉用户他应该删除哪些项目 - 但是不要害怕自己删除它们。

也许有一天......