2010-09-17 61 views
0

如何以編程方式將文件添加到代碼隱藏文件的TFS項目中。我可以說以下添加文件。這隻會將單個文件添加到項目中,而不是文件加上文件後面的代碼。我試圖添加一個資源文件,它的代碼隱藏在動態生成的TFS項目中。以編程方式將文件添加到TFS和依賴文件

workspace.PendAdd(filesWithPathToEdit, true); 
+2

因此添加其他文件。有什麼問題? – 2010-09-17 19:42:34

回答

0

有沒有辦法爲它自動知道,如果一個文件依賴於另一個。但是,您可以自行決定哪些文件通常會有一個與它們關聯的文件後面的代碼,並自己添加它們。

例如:

如果你開始添加一個文件的擴展名爲.aspx,然後將這些文件,因爲我們知道,通常有隱藏文件代碼。我們可以假設文件後面的代碼具有相同的文件名,並附有.cs。因此,如果我們有「Default.aspx」,那麼我們可以安全地假設將會有一個「Default.aspx.cs」,並且它們相互依賴,所以我們應該添加兩者。

同樣的事情發生在.xaml和.xaml.cs文件中。

+0

我試圖以編程方式添加它。如果使用Workspace.PendAdd添加這兩個文件,則它們之間不存在依賴關係。我認爲有一種方法可以使用EnvDTE程序集並獲取項目文件,我也想添加這些文件並對其進行修改。 – jspence 2010-09-17 20:06:57

1

我不得不把它放在T4模板中才能訪問當前的Visual Studio DTE,否則如果我在t4之外嘗試它,它會隨機工作。您可以使用DTE從解決方案中獲取項目列表,然後添加一個ProjectItem,它包含ProjectItems,以便您可以在其後添加代碼。 ResxContainer是一個自定義類,只包含我需要的所有關於我的resx文件的信息。

EnvDTE.DTE dte = (EnvDTE.DTE)HostServiceProvider.GetService(typeof(EnvDTE.DTE)); 
      //dte = (EnvDTE.DTE) hostServiceProvider.GetService(typeof(EnvDTE.DTE)); 
      //dte = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE"); 
      Projects projects = dte.Solution.Projects; 
      if (projects.Count > 0) 
      { 
       IEnumerator enumer = ((IEnumerable)projects).GetEnumerator(); 
       while (enumer.MoveNext()) 
       { 
        Project proj = (Project)enumer.Current; 
        if (proj.Name == projectName) 
        { 
         foreach (ResxContainer res in items) 
         { 
          ProjectItem item = proj.ProjectItems.AddFromFile(res.ResxPath); 
          item.ProjectItems.AddFromFile(res.CodeBehindPath); 
         } 
        } 
       } 
相關問題