/// <summary> /// Creates the interface. /// </summary> /// <param name="instance">The instance.</param> /// <returns>The interface.</returns> public static CodeInterface CreateInterface(this ProjectItem instance) { string interfaceName = string.Format("I{0}", instance.Name); string path = instance.FileNames[1].Replace(instance.Name, interfaceName); CodeNamespace codeNamespace = instance.GetNameSpace(); string nameSpace = codeNamespace.FullName; object[] bases = { }; CodeNamespace interfaceNameSpace = instance.ProjectItems.ContainingProject.CodeModel.AddNamespace( nameSpace, path); CodeInterface codeInterface = interfaceNameSpace.AddInterface( interfaceName, -1, bases, vsCMAccess.vsCMAccessPublic); CodeClass codeClass = instance.GetFirstClass(); if (codeClass != null) { object interfaceClass = interfaceName; codeClass.AddImplementedInterface(interfaceClass, 0); } return(codeInterface); }
void DumpCodeModel(Project project) { MessageBox.Show("Attach to process now", "Debug"); ProjectItem item = project.ProjectItems.Item("Driver.cs"); FileCodeModel fcm = item.FileCodeModel; CodeClass codeClass = (CodeClass2)fcm.CodeElements.Item(DeviceClass); // Implement the I<DeviceClass> interface on the driver class. Does not insert method stubs. codeClass.AddImplementedInterface("ASCOM.Interface.I" + DeviceClass, 0); }
/// <summary> /// 当前项目item中添加引用接口 /// </summary> /// <param name="curItem"></param> private void addInterface(ProjectItem curItem) { FileCodeModel fileCode = curItem.FileCodeModel; string strClsName = curItem.Name.Substring(0, curItem.Name.Length - 3); var lstNamespace = fileCode.CodeElements.Cast <CodeElement>().ToList().SingleOrDefault(x => x.Kind == vsCMElement.vsCMElementNamespace); if (lstNamespace != null) { CodeClass service = (CodeClass2)((EnvDTE.CodeNamespace)(lstNamespace)).Members.Item(strClsName); try { var s = service.ImplementedInterfaces.Item("I" + strClsName); } catch (Exception) { service.AddImplementedInterface("I" + strClsName); } } }