【问题标题】:How do I Edit a .cs file in a Add-In Project using DTE如何使用 DTE 在加载项项目中编辑 .cs 文件
【发布时间】:2011-03-31 11:16:45
【问题描述】:

我正在尝试为 vs2010 编写我的第一个插件,但我很挣扎。

我有一个生成大量 cs 文件的程序集。我希望我的插件将新文件添加到选择项目中,或者如果文件存在,则覆盖它们。

我有两个问题:

  1. 添加新文件时,如何将其添加到项目内的子文件夹中?我似乎只能添加到项目的根目录。
  2. 如果存在cs文件,如何清除其内容?我正在使用 EnvDTE.TextDocument 和 EnvDTE.EditPoint 接口。但是每次我尝试遍历文档清除行时,都会收到 COM 错误“HRESULT 异常:0x80041001”。

    如果可以的话,我不想删除该文件并添加一个新文件。由于登录源代码管理。

【问题讨论】:

    标签: visual-studio visual-studio-2010 add-in envdte


    【解决方案1】:
    textDoc = (TextDocument) document.Object("TextDocument");
    EditPoint editPoint = (EditPoint)textDoc.StartPoint.CreateEditPoint();
    EditPoint endPoint = (EditPoint)textDoc.EndPoint.CreateEditPoint();
    editPoint.Delete(endPoint);
    

    无需循环,您的编辑点永远不会从第一个位置移动。

    【讨论】:

      【解决方案2】:

      好吧,我有一种方法可以做到这一点。

       
      // Get an instance of the currently running Visual Studio IDE.
      var dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
      
      //I store the list of projects in dte2.Solution.Projects in a combobox
      
      EnvDTE.Project project = (EnvDTE.Project)projectList.SelectedValue; //I get my projects out of a combobox
      
      foreach (ProjectItem projectItem in project.ProjectItems)
      {
          Document document;
          try
          {
              projectItem.Open();
              document = projectItem.Document;
          }
          catch(Exception)
          {
              Console.WriteLine("failed to load document");
              continue;
          }
          if (document == null)
          {
              continue;
          } 
      
          if (document.Name == "Class1.cs") //whatever file your after
          {
              TextDocument editDoc = (TextDocument) document.Object("TextDocument");
              EditPoint objEditPt = editDoc.CreateEditPoint();
              objEditPt.StartOfDocument();
              document.ReadOnly = false;
      
              while (!objEditPt.AtEndOfDocument)
              {           
                  objEditPt.Delete(objEditPt.LineLength); 
                  objEditPt.LineDown(1);
              }
      
              objEditPt.DeleteWhitespace(vsWhitespaceOptions.vsWhitespaceOptionsHorizontal);
              objEditPt.DeleteWhitespace(vsWhitespaceOptions.vsWhitespaceOptionsVertical);
      
              Console.WriteLine("saving file {0}", document.FullName);
              document.Save(document.FullName);   
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 2014-02-12
        • 2012-03-20
        • 2021-01-30
        • 2017-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多