Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何使用DTE编辑外接程序项目中的.cs文件_Visual Studio_Visual Studio 2010_Add In_Envdte - Fatal编程技术网

Visual studio 如何使用DTE编辑外接程序项目中的.cs文件

Visual studio 如何使用DTE编辑外接程序项目中的.cs文件,visual-studio,visual-studio-2010,add-in,envdte,Visual Studio,Visual Studio 2010,Add In,Envdte,我正试图为vs2010编写我的第一个外接程序,但我正在努力 我有一个生成大量cs文件的程序集。我希望我的插件将新文件添加到所选项目中,或者如果文件存在,则覆盖它们 我有两个问题: 添加新文件时,如何将其添加到项目内的子文件夹中?我似乎只能添加到项目的根 如果存在cs文件,如何清除其内容?Im使用EnvDTE.TextDocument和EnvDTE.EditPoint接口。但每次我尝试遍历文档清除行时,都会收到一个COM错误“Exception from HRESULT:0x80041001”。

我正试图为vs2010编写我的第一个外接程序,但我正在努力

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

我有两个问题:

  • 添加新文件时,如何将其添加到项目内的子文件夹中?我似乎只能添加到项目的根
  • 如果存在cs文件,如何清除其内容?Im使用EnvDTE.TextDocument和EnvDTE.EditPoint接口。但每次我尝试遍历文档清除行时,都会收到一个COM错误“Exception from HRESULT:0x80041001”。 我不想删除文件,并添加一个新的文件,如果我可以帮助它。由于源代码管理上的日志记录

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

     
    // 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);   
        }
    }
    
    无需循环,编辑点从不从第一个位置移动

    textDoc = (TextDocument) document.Object("TextDocument");
    EditPoint editPoint = (EditPoint)textDoc.StartPoint.CreateEditPoint();
    EditPoint endPoint = (EditPoint)textDoc.EndPoint.CreateEditPoint();
    editPoint.Delete(endPoint);