2010-09-17 64 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); 
         } 
        } 
       } 
相关问题