任何人都有IVsProject.AddItem
的例子,直到現在我已經做了如下但不知道如何使用IVsProject.AddItem
和msdn
沒有任何例子。以下使用範例IVsProject.AddItem
private void MenuItemCallback(object sender, EventArgs e)
{
IVsSolution solutionService = GetService(typeof(SVsSolution)) as IVsSolution;
// get all projects in solution
IEnumHierarchies enumHierarchies = null;
Guid guid = Guid.Empty;
ErrorHandler.ThrowOnFailure(solutionService.GetProjectEnum(
(uint)__VSENUMPROJFLAGS.EPF_ALLINSOLUTION,
ref guid,
out enumHierarchies));
//Loop all projects found
if (enumHierarchies != null)
{
// Loop projects found
IVsHierarchy[] hierarchy = new IVsHierarchy[1];
uint fetched = 0;
while (enumHierarchies.Next(1, hierarchy, out fetched) == VSConstants.S_OK
&& fetched == 1)
{
Guid projectGuid;
ErrorHandler.ThrowOnFailure(hierarchy[0].GetGuidProperty(
VSConstants.VSITEMID_ROOT,
(int)__VSHPROPID.VSHPROPID_ProjectIDGuid,
out projectGuid));
IVsProject project = (IVsProject)hierarchy[0];
project.AddItem(VSConstants.VSITEMID_ROOT,
VSADDITEMOPERATION.VSADDITEMOP_OPENFILE,
1,
...)
}
}
}
也使用不工作DTE
private void MenuItemCallback(object sender, EventArgs e)
{
//GemFireWizardForm form = new GemFireWizardForm();
//form.ShowDialog();
//Get the solution service
IVsSolution solutionService = GetService(typeof(SVsSolution)) as IVsSolution;
// get all projects in solution
IEnumHierarchies enumHierarchies = null;
Guid guid = Guid.Empty;
ErrorHandler.ThrowOnFailure(solutionService.GetProjectEnum(
(uint)__VSENUMPROJFLAGS.EPF_ALLINSOLUTION,
ref guid,
out enumHierarchies));
//Loop all projects found
if (enumHierarchies != null)
{
// Loop projects found
IVsHierarchy[] hierarchy = new IVsHierarchy[1];
uint fetched = 0;
Guid projectGuid = Guid.Empty;
while (enumHierarchies.Next(1, hierarchy, out fetched) == VSConstants.S_OK
&& fetched == 1)
{
ErrorHandler.ThrowOnFailure(hierarchy[0].GetGuidProperty(
VSConstants.VSITEMID_ROOT,
(int)__VSHPROPID.VSHPROPID_ProjectIDGuid,
out projectGuid));
}
IVsHierarchy ppHierarchy = null;
IVsSolution solution = (IVsSolution)GetService(typeof(SVsSolution));
Int32 result = solution.GetProjectOfGuid(ref projectGuid, out ppHierarchy);
if (ppHierarchy != null && result == VSConstants.S_OK)
{
Object automationObject = null;
ppHierarchy.GetProperty(VSConstants.VSITEMID_ROOT,
(Int32)__VSHPROPID.VSHPROPID_ExtObject,
out automationObject);
if (automationObject != null)
{
EnvDTE.SolutionClass sc = automationObject as EnvDTE.SolutionClass;
EnvDTE.Projects projects = sc.Projects;
EnvDTE.Project project = projects.Item(1);
EnvDTE.ProjectItems pitems = project.ProjectItems;
pitems.AddFromFileCopy(@"e:\avinash\test.cpp");
}
}
}
}
sc
即將爲null
您是否將此開發爲一個AddIn的一部分? –
你的示例代碼真的幫了我很多關於'project.AddItem'的信息,但是你不應該縮短它,因爲我必須找出缺失的參數。 – musefan