【问题标题】:How do I get latest from a Visual Studio solution from the command line?如何从命令行从 Visual Studio 解决方案获取最新信息?
【发布时间】:2010-09-07 05:54:08
【问题描述】:

如何像在 Visual Studio 的解决方案资源管理器上下文菜单中那样递归地获取最新版本的解决方案?我想从命令行或通过宏来执行此操作。我正在尝试通过使用一组批处理文件来自动化我的日常工作。我相信很多开发者都希望拥有这样的东西。

tf get 仅以递归方式获取文件夹的内容(不是解决方案)。它不查看项目依赖项等。那是行不通的。

【问题讨论】:

  • 您是否发现 IDE 正在检出哪些特定文件?
  • 乔恩,在一种情况下,VS 签出项目文件并显示以下消息:解决方案的某些项目的源代码控制信息与项目文件中的信息之间似乎存在差异( s)。

标签: visual-studio-2008 command-line tfs macros


【解决方案1】:

嗯...看起来你有三个选择。

  1. 在您的批处理文件中,在您想要的每个目录分支上发出一个 tf get。

  2. 重新组织您的解决方案,使所有依赖项都位于同一根路径下。

  3. 使用可视化方式右键单击加载的项目并发出get命令。

它真正意识到解决方案的唯一时间是在 IDE 中加载项目时;或者当它被构建服务器加载时。

【讨论】:

  • 克里斯,有时,我看到 IDE 出于我无法理解的原因自动签出文件。我确信 tf.exe 不会自动处理这些事情。应该有一些通过宏或使用 msbuild 脚本的方法......我正在尝试创建一个批处理文件,该文件获取最新版本的解决方案并构建它。每天早上我需要以这种方式更新大约 10 个解决方案...
  • 附带说明:如果工作室认为项目文件已添加/更改,它将检查解决方案文件。此外,它会毫无理由地检查与测试相关的文件(例如 .vsmdi)。我不确定这与拉取最新版本并构建它有什么关系。
【解决方案2】:

我知道你提到了批处理文件,但让我为你抛出一些别的东西。

我猜你使用的是 2005 版的 TFS。 2008 内置了所有的调度功能。

但是,您也可以使用 CruiseControl.net 为您执行计划构建。我已经使用了 TFS 2008 和 CruiseControl,它们似乎都可以正常工作。

【讨论】:

    【解决方案3】:

    TFS 有一个.Net SDK,它允许您创建自己的自定义程序来与 TFS 服务器交互。你可以编写一个小程序来执行你需要的任务:

    TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("MyServer");
    VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
    
    WorkSpace[] myWorkSpaces = vcs.QueryWorkSpaces("MyWorkSpaceName", "MyLoginName", "MyComputer");
    
    myWorkSpaces[0].Get(VersionSpec.Latest, GetOptions.GetAll);
    

    【讨论】:

      【解决方案4】:

      另一种可能的解决方案是使用 powershell。以下链接是一个代码项目示例,该示例展示了如何从 TFS 获取解决方案并在本地构建它。 Powershell 是比常规批处理文件更好的解决方案。

      http://www.codeproject.com/KB/install/ExtractAndBuild.aspx

      【讨论】:

        【解决方案5】:

        不要这样做。 VS 并不像你想象的那么聪明。 (正如每个人都经历过 3 个以上产品周期的神秘而徒劳的结帐所证明的那样,包括你我在内。这不是可靠系统的标志!)

        您所描述的仅适用于项目到项目的参考。从解决方案资源管理器运行源代码控制操作将“按设计”省略:

        • 项目到程序集参考
        • 视频、声音、PDF、VS 不支持但可能在产品中发挥不可或缺作用的任何其他类型的媒体
        • 项目中引用的 MSBuild *.targets 文件
        • 从自定义目标引用的任何类型的任何文件
        • 构建过程所需的任何第 3 方可执行文件

        对不完整的同步说。沿着那条路走下去,只会让人头疼。

        从命令行运行没有路径范围的“tf get”,或右键单击 -> 从源代码管理资源管理器中的根 $/ 节点获取。

        【讨论】:

          【解决方案6】:

          我同意解决方案资源管理器将“按设计”忽略所有这些对象,但前提是您不将它们作为解决方案项目包含在内,我相信您应该将其包含在您的解决方案中,以便新手可以打开解决方案,执行“获取最新”,并知道他们拥有该解决方案所需的所有依赖项,而不必学习如何通过命令行工具进行操作,或者如果他们不想使用源代码管理资源管理器.

          将所有非代码依赖项包括为解决方案项目(我们使用与其源代码管理文件夹相同的文件夹结构来组织解决方案文件夹)减少了为项目的新开发人员打开和编译解决方案所需的“巫毒”知识。

          如果您可以将整个文件夹树链接到 VS 解决方案中的解决方案文件夹,那就太好了。

          【讨论】:

            【解决方案7】:

            如果您在不同的文件夹下有依赖项目。使用它来遍历所有子目录以获取每个项目的最新信息:

            在主目录C:\Project\SupportingProjects开始

            FOR /D %%G IN ("*") DO ECHO ..from....%%G && tf get C:\Projects\SupportingProjects\%%G 
            
            ::Get the latest for the Main project
            tf get C:\Projects\MainProject /recursive 
            

            在我的例子中,MainProject 文件夹包含解决方案文件和项目文件。

            我发现这很简单。

            更多关于 FOR 命令:http://ss64.com/nt/for_d.html

            【讨论】:

              猜你喜欢
              • 2012-01-03
              • 2011-04-22
              • 2016-10-14
              • 2017-11-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-05-18
              相关资源
              最近更新 更多