2014-03-14 109 views
1

我需要使用C#獲取C# .proj文件的GUID。我從.proj文件中獲取文件,如使用XML讀取文件並獲取標記值。使用C#獲取.proj文件的GUID

// XML標籤

<ProjectGuid>{7701AEB4-8549-4FB2-B34C-E71D0B7DE59D}</ProjectGuid> 

,但我需要知道的是有在C#中的任何特定屬性檢索現有.proj文件GUID,這樣的事情。

//代碼

int iIncriment = 0; 
foreach (var objProj in vhaSolution.Projects) 
     { 
      EnvDTE.Project prj1 = (EnvDTE.Project)objProj; 
      iIncriment++; 
      if (string.Equals(testProjectName + ".proj", prj1.Name)) 
       { 
        prj = vhaSolution.Projects.Item(iIncriment); 
       } 
     } 

string GUID = prj.GetGUID() ??? 

回答

7

可以使用IVsHierarchy.GetGuidProperty方法:

var solution = serviceProvider.GetService(typeof(SVsSolution)) as IVsSolution; 
IVsHierarchy hierarchy; 

solution.GetProjectOfUniqueName(project.FullName, out hierarchy); 

if (hierarchy != null) 
{ 
    Guid projectGuid; 

    hierarchy.GetGuidProperty(
       VSConstants.VSITEMID_ROOT, 
       (int)__VSHPROPID.VSHPROPID_ProjectIDGuid, 
       out projectGuid); 
} 
+0

我在哪裏可以找到Microsoft.VisualStudio.Shell.Interop.dll? – iamCR

+0

在我的機器上,它位於C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VSSDK \ VisualStudioIntegration \ Common \ Assemblies \ v2.0'目錄下。 – Yuriy

+0

@SanthoshKumar,您可能需要下載並安裝[Visual Studio SDK](http://www.microsoft.com/en-us/download/details.aspx?id=30668)。 – Yuriy

0

一個奎克和骯髒的解決辦法是使用IndexOfSubstring找到在.proj文件的 <ProjectGuid></ProjectGuid>串並提取標籤的內容。

+0

我期待像一個內置的屬性,它給我的GUID的準確。 – iamCR