如何:使用 Visual C++ 代码模型操作代码 (Visual C#)
Visual Studio 代码模型为自动化客户端提供了在项目中查找代码定义和修改这些代码元素的能力。 Visual C++ 提供了核心代码模型的一个扩展,专门用于特定于 Visual C++ 的代码。
例如,如果 Language 属性指示给定的代码元素是 Visual C++ 代码模型对象,并且 Kind = vsCMElementClass,则可以选择使用来自 Visual Studio 代码模型的 CodeClass2 或来自 Visual C++ 代码模型的 VCCodeClass。
以下过程演示如何通过使用特定于 Visual C++ 的代码模型检查和生成代码。
将注释添加到项目中的第一个文件
在 Visual C# 中创建 Visual Studio 外接程序项目。
在**“项目”菜单上,单击“添加引用”,然后单击“.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 Studio 集成开发环境 (IDE) 中的一个 Visual C++ 项目。
在**“工具”菜单上,单击“外接程序管理器”,然后从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。
检查项目中的第一个文件,查看以编程方式添加的注释。
将新的文件添加到 Visual C++ 项目中
在 Visual C# 中创建 Visual Studio 外接程序项目。
在**“项目”菜单上,单击“添加引用”,然后单击“.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 Studio IDE 中打开一个 Visual C++ 项目。
在**“工具”菜单上,单击“外接程序管理器”,并从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。
备注
如果 MyClass2.h 已存在,则代码运行失败。
将函数添加到 file.h
在 Visual C# 中创建 Visual Studio 外接程序项目。
在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel 和 System.Windows.Forms,然后单击“确定”**。
将以下 using 语句添加到 Connect.cs 文件的顶部:
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 Studio IDE 中打开一个 Visual C++ 项目并在其中添加一个 file.h。
在**“工具”菜单上,单击“外接程序管理器”,然后从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。
检查 file.h 中的插入代码。
显示包含顶级代码元素的文件
在 Visual C# 中创建 Visual Studio 外接程序项目。
在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel 和 System.Windows.Forms,然后单击“确定”**。
将以下 using 语句添加到 Connect.cs 文件的顶部:
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 Studio IDE 中打开一个 Visual C++ 项目。
在**“工具”菜单上,单击“外接程序管理器”,然后从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。
消息框显示包含顶级代码元素的文件名。
显示所有的顶级代码元素项
在 Visual C# 中创建 Visual Studio 外接程序项目。
在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel 和 System.Windows.Forms,然后单击“确定”**。
将以下 using 语句添加到 Connect.cs 文件的顶部:
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 Studio IDE 中打开一个 Visual C++ 项目。
在**“工具”菜单上,单击“外接程序管理器”,然后从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。
消息框显示顶级代码元素名称。
请参见
任务
如何:使用 Visual C++ 代码模型操作代码 (Visual Basic)