コマンド ラインから Visual Studio ソリューションの最新情報を取得するにはどうすればよいですか?
-
09-06-2019 - |
質問
Visual Studio のソリューション エクスプローラーのコンテキスト メニューで行うのと同じように、ソリューションの最新バージョンを再帰的に取得するにはどうすればよいですか?これをコマンドラインまたはマクロ経由で実行したいと考えています。一連のバッチ ファイルを使用して、日常業務の一部を自動化しようとしています。多くの開発者がこのような機能を望んでいるはずです。
tf get
フォルダーの内容を再帰的にのみ取得します (ソリューションではありません)。プロジェクトの依存関係などは考慮しません。それはうまくいきません。
解決
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);
他のヒント
私は、ソリューション エクスプローラーがこれらのオブジェクトをすべて「仕様により」省略することに同意します。ただし、それらのオブジェクトをソリューション項目として含めない場合に限ります。 すべき ソリューションに含めることで、初心者がソリューションを開いて最新情報を取得できるようになり、そのソリューションに必要なすべての依存関係があることがわかり、コマンド ライン ツールやソース管理の使用方法を学ぶ必要がなくなります。やりたくないなら探検家。
コード以外のすべての依存関係をソリューション アイテムとして含めると (ソース管理フォルダーと同じフォルダー構造を使用してソリューション フォルダーを編成します)、プロジェクトの新しい開発者がソリューションを開いてコンパイルするために必要な「ブードゥー」の知識が軽減されます。
フォルダー ツリー全体を VS ソリューション内のソリューション フォルダーにリンクできれば良いでしょう。
別のフォルダーに依存プロジェクトがある場合。これを使用してすべてのサブディレクトリをループし、各プロジェクトの最新のものを取得します。
メインディレクトリから開始します 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
良い...3つの選択肢があるようです。
バッチ ファイルで、必要な各ディレクトリ ブランチで tf get を発行します。
すべての依存関係が同じルート パスの下にあるようにソリューションを再編成してください。
ロードされたプロジェクトを右クリックして get コマンドを発行するという視覚的な方法を使用します。
実際にソリューションを認識するのは、プロジェクトが IDE にロードされるときだけです。またはビルドサーバーによってロードされるとき。
バッチ ファイルについて言及したことは承知していますが、別のことを説明させてください。
おそらく 2005 バージョンの TFS を使用していると思います。2008 にはすべてのスケジュール機能が組み込まれています。
ただし、次のように使用することもできます クルーズコントロール.net スケジュールされたビルドを実行します。私は TFS 2008 と CruiseControl の両方を使用しましたが、どちらも問題なく動作しているようです。
もう 1 つの可能な解決策は、powershell を使用することです。次のリンクは、TFS からソリューションを取得してローカルで構築する方法を示すコード プロジェクト サンプルへのリンクです。Powershell は、通常のバッチ ファイルよりもはるかに優れたソリューションです。
こんなことはしないでください。VS はあなたが思っているほどスマートではありません。(あなたも私も含め、誰もが 3 回以上の製品サイクルで経験した、不可解で無駄なチェックアウトによって証明されています。これは信頼できるシステムの証ではありません!)
あなたが説明した内容は、プロジェクト間の参照にのみ機能します。ソリューション エクスプローラーからソース管理操作を実行すると、「仕様により」以下が省略されます。
- プロジェクトからアセンブリへの参照
- ビデオ、サウンド、PDF、VS がサポートしていないが製品で重要な役割を果たす可能性のあるその他のタイプのメディア
- プロジェクトで参照される MSBuild *.targets ファイル
- カスタム ターゲットから参照されるあらゆる種類のファイル
- ビルドプロセスに必要なサードパーティの実行可能ファイル
- 等
言うだけ いいえ 同期が不完全になります。その道を進むと、頭痛だけが横たわります。
コマンド ラインからパス スコープを指定せずに「tf get」を実行するか、ソース管理エクスプローラーで右クリック -> ルート $/ ノードから取得します。