8

コマンド ライン経由でビルド順序をテキスト ファイルに出力する方法はありますか?

説明: ソースの複数のブランチを使用し、各ブランチに 100 以上のプロジェクトの大規模なソリューションがあります。コマンド ラインからこれらのソリューションをビルドするには、ビルド スクリプトを作成する必要があります。その後、チームが取り組んでいるプロジェクトのプロジェクト参照のみを持つように、ブランチのソリューションを調整できます。これにより、ソリューションの読み込み時間が大幅に増加し、開発者と私のフラストレーションが軽減されるはずです:)

C# と VS で提供される API の使用を検討し続けます。2012 update 1 を使用しています。

4

2 に答える 2

6

これは、Visual Studio プラグイン プロジェクトの有力候補です。

  1. 新しいVisual Studio アドインプロジェクトを作成します。
  2. プロジェクト作成ウィザードの [アドイン オプションの選択] ステップで次の構成を選択してください(他のステップは重要ではありません。C# を使用すると想定しています)。

ここに画像の説明を入力

  1. Connect.csファイルで、次のフィールドを追加します。

    private BuildEvents _buildEvents;
    private Events _events;
    private bool buildEventConnected = false;
    
  2. それに応じてこれらのメソッドを追加/変更します。

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        _events = _applicationObject.Events;
        _buildEvents = _events.BuildEvents;
    
        if (connectMode != ext_ConnectMode.ext_cm_UISetup && !buildEventConnected)
        {
            _buildEvents.OnBuildDone +=
                new _dispBuildEvents_OnBuildDoneEventHandler(BuildEvents_OnBuildDone);
            buildEventConnected = true;
        }
    }
    
    private void BuildEvents_OnBuildDone(vsBuildScope Scope, vsBuildAction Action)
    {
        const string BUILD_OUTPUT_PANE_GUID = "{1BD8A850-02D1-11D1-BEE7-00A0C913D1F8}";
        TextDocument txtOutput = default(TextDocument);
        TextSelection txtSelection = default(TextSelection);
        Window vsWindow = default(Window);
        vsWindow = _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
        OutputWindow vsOutputWindow = default(OutputWindow);
        OutputWindowPane objBuildOutputWindowPane = default(OutputWindowPane);
        vsOutputWindow = (OutputWindow)vsWindow.Object;
        foreach (OutputWindowPane objOutputWindowPane in vsOutputWindow.OutputWindowPanes)
        {
            if (objOutputWindowPane.Guid.ToUpper() == BUILD_OUTPUT_PANE_GUID)
            {
                objBuildOutputWindowPane = objOutputWindowPane;
                break;
            }
        }
        txtOutput = objBuildOutputWindowPane.TextDocument;
        txtSelection = txtOutput.Selection;
        txtSelection.StartOfDocument(false);
        txtSelection.EndOfDocument(true);
        objBuildOutputWindowPane.OutputString(System.DateTime.Now.ToString());
        txtSelection = txtOutput.Selection;
        var solutionDir = System.IO.Path.GetDirectoryName(_applicationObject.Solution.FullName);
        System.IO.File.WriteAllText(solutionDir + "\\build_output.log", txtSelection.Text);
    }
    
    public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
    {
        if (buildEventConnected)
        {
            _buildEvents.OnBuildDone -= new _dispBuildEvents_OnBuildDoneEventHandler(BuildEvents_OnBuildDone);
            buildEventConnected = false;
        }
    }
    

それだけです。すべてのビルドbuild_output.logで、ソリューションのフォルダー内のファイルに出力が送信されます。

于 2013-03-01T15:12:44.603 に答える