Практическое руководство. Управление кодом при помощи модели кода Visual C++ (Visual C#)
В Visual Studio 2013 использовать надстройки не рекомендуется. Рекомендуется обновить надстройки до расширений VSPackage. Дополнительные сведения об обновлении см. в разделе Часто задаваемые вопросы. Преобразование надстроек в расширения VSPackage.
Модель кода Visual Studio позволяет клиентам автоматизации находить определения кода в проекте и изменять эти элементы кода. Visual C++ предоставляет расширение базовой модели кода для целевого кода, относящегося к Visual C++.
Например, если свойство Language указывает, что данный элемент кода является объектом модели кода Visual C++ и Kind = vsCMElementClass, то можно использовать CodeClass2 из модели кода Visual Studio или VCCodeClass из модели кода Visual C++.
Следующая процедура демонстрирует проверку и создание кода при помощи модели, которая относится к Visual C++.
Чтобы добавить комментарий к первому файлу в проекте
Создайте проект надстройки Visual Studio в Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET выберите Microsoft.VisualStudio.VCCodeModel и нажмите кнопку ОК.
Добавьте using Microsoft.VisualStudio.VCCodeModel; в начало файла Connect.cs.
Замените код в методе OnConnection следующим кодом:
// Add-in code. using Microsoft.VisualStudio.VCCodeModel; public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) { _applicationObject = (DTE2)application; )addInInstance = (AddIn)addInInst; // Pass the applicationObject member variable to the code example. test((DTE2)_applicationObject); } public void test( DTE2 dte ) { VCCodeModel vcCM = null; VCCodeElement vcCodeElement = null; vcCM = ( ( VCCodeModel )( dte.Solution.Item( 1 ).CodeModel ) ); vcCodeElement = ( ( VCCodeElement ) ( vcCM.CodeElements.Item(1))); AddCommentAtStart( vcCodeElement ); AddCommentAtEnd( vcCodeElement ); } public void AddCommentAtStart( Microsoft.VisualStudio.VCCodeModel.VCCodeElement vcCodeElement ) { TextPoint textPoint = null; textPoint = vcCodeElement.get_StartPointOf( vsCMPart.vsCMPartWhole, 0 ); textPoint.CreateEditPoint().Insert("/*This is a Start Comment*/"); } public void AddCommentAtEnd( Microsoft.VisualStudio.VCCodeModel.VCCodeElement vcCodeElement ) { TextPoint textPoint = null; textPoint = vcCodeElement.get_EndPointOf( vsCMPart.vsCMPartWhole, 0 ); textPoint.CreateEditPoint().Insert( "/*End Comment*/" ); }
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C++ в интегрированной среде разработки (IDE) Visual Studio.
В меню Сервис щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
Просмотрите первый файл в проекте для программного добавления комментариев.
Чтобы добавить новый файл в проект Visual C++
Создайте проект надстройки Visual Studio в Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET выберите Microsoft.VisualStudio.VCCodeModel и нажмите кнопку ОК.
Добавьте using Microsoft.VisualStudio.VCCodeModel; в начало файла Connect.cs.
Замените код в методе OnConnection следующим кодом:
//Add-in code. using Microsoft.VisualStudio.VCCodeModel; public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Pass the applicationObject member variable to the code example. GetVCCodeElement((DTE2)_applicationObject); } // Shows how to get a VCCodeElement. public void GetVCCodeElement( DTE2 dte ) { VCCodeModel vcCM = null; VCCodeElement vcCodeElement = null; vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )( dte.Solution.Item( 1 ).CodeModel ) ); vcCodeElement = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeElement )( vcCM.AddClass( "MyClass2", "MyClass2.h",0,null, null, EnvDTE.vsCMAccess.vsCMAccessDefault ) ) ); }
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C++ в интегрированной среде разработки Visual Studio.
В меню Свойства щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
Примечание
Если MyClass2.h уже существует, код выполнен не будет.
Чтобы добавить функцию в file.h
Создайте проект надстройки Visual Studio в Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET, выберите Microsoft.VisualStudio.VCCodeModel и System.Windows.Forms, а затем нажмите кнопку ОК.
Добавьте в начало файла Connect.cs следующие операторы using.
using System.Windows.Forms; using Microsoft.VisualStudio.VCCodeModel;
Замените код в методе OnConnection следующим кодом:
// Add-in code. using Microsoft.VisualStudio.VCCodeModel; using System.Windows.Forms; public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Pass the applicationObject member variable to the code example. DisplayName((DTE2)_applicationObject); } // DisplayName // Shows the DisplayName of a function which includes the parameter // names. public void DisplayName( DTE2 dte ) { VCCodeModel vcCM = null; VCCodeElement vcCodeElement = null; vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )( dte.Solution.Item( 1 ).CodeModel ) ); vcCodeElement = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeElement ) ( vcCM.AddFunction( "MyFunction", "File.h", vsCMFunction.vsCMFunctionFunction, "void", null, EnvDTE.vsCMAccess.vsCMAccessDefault ) ) ); MessageBox.Show( vcCodeElement.DisplayName); }
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C++ в интегрированной среде разработки Visual Studio и добавьте к нему file.h.
В меню Сервис щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
Проверьте вставленный код в file.h.
Чтобы отобразить файлы с элементами кода верхнего уровня
Создайте проект надстройки Visual Studio в Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET, выберите Microsoft.VisualStudio.VCCodeModel и System.Windows.Forms, а затем нажмите кнопку ОК.
Добавьте в начало файла Connect.cs следующие операторы using.
using System.Windows.Forms; using Microsoft.VisualStudio.VCCodeModel;
Замените код в методе OnConnection следующим кодом.
// Add-in code. using Microsoft.VisualStudio.VCCodeModel; using System.Windows.Forms; public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Pass the applicationObject member variable to the code example. DisplayLocation((DTE2)_applicationObject); } public void DisplayLocation( DTE2 dte ) { VCCodeModel vcCM = null; VCCodeElement vcCodeElement = null; vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )( dte.Solution.Item( 1 ).CodeModel ) ); foreach ( Microsoft.VisualStudio.VCCodeModel.VCCodeElement temp in vcCM.CodeElements ) { vcCodeElement = temp; MessageBox.Show( vcCodeElement.Name + " is declared in " + vcCodeElement.get_Location(vsCMWhere.vsCMWhereDefault)); } }
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C++ в интегрированной среде разработки Visual Studio.
В меню Сервис щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
Имена файлов с элементами кода верхнего уровня будут выведены в окнах с сообщениями.
Чтобы отобразить все элементы кода верхнего уровня
Создайте проект надстройки Visual Studio в Visual C#.
В меню Проект щелкните Добавить ссылку, перейдите на вкладку .NET, выберите Microsoft.VisualStudio.VCCodeModel и System.Windows.Forms, а затем нажмите кнопку ОК.
Добавьте в начало файла Connect.cs следующие операторы using.
using System.Windows.Forms; using Microsoft.VisualStudio.VCCodeModel;
Замените код в методе OnConnection следующим кодом.
// Add-in code. using Microsoft.VisualStudio.VCCodeModel; using System.Windows.Forms; public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Pass the applicationObject member variable to the code example. FindItem((DTE2)_applicationObject); } public void FindItem( DTE2 dte ) { VCCodeModel vcCM = null; VCCodeElements vcCodeElements = null; vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )( dte.Solution.Item( 1 ).CodeModel ) ); vcCodeElements = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeElements ) ( vcCM.CodeElements ) ); int i = 0; for ( i=1; i<=vcCodeElements.Count; i++ ) { MessageBox.Show( vcCodeElements.Item( i ).Name); } }
Чтобы построить надстройку, в меню Построение щелкните Построить решение.
Откройте проект Visual C++ в интегрированной среде разработки Visual Studio.
В меню Сервис щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.
В окнах сообщений отображаются имена элементов кода верхнего уровня.
См. также
Задачи
Практическое руководство. Управление кодом при помощи модели кода Visual C++ (Visual Basic)
Основные понятия
Практическое руководство. Поиск кода при помощи модели кода (Visual Basic)
Практическое руководство. Поиск кода при помощи модели кода (Visual C#)