質問

プロジェクトのビルドに使用されるコード (.cs) ファイルを生成するツールがあります。

編集:これらのファイルは一部の部分クラスの残りの半分であるため、ビルド プロセスではソースへのアクセスが必要です。たとえば、これを DLL にコンパイルしてからビルド順序を設定することはできません。

このツールはビルド前のステップ中に実行されますが、ソリューション内のファイルはビルド後にのみ更新されます。つまり、入力の変更後にエラーをクリアするにはビルドを 2 回実行する必要があります。

例:

  • ツール入力ファイルの変更
  • ビルドの実行
    • ツールを実行してソースファイルを変更します
  • ビルドの失敗
  • ビルドの実行
    • ツールを実行してソース ファイルを変更します (ただし、入力は同じままであるため、実際には変更されません)
  • ビルド成功

二重ビルドをなくし、ツールを VS から実行できるようにする方法はありますか?

みんなありがとう!

役に立ちましたか?

解決 3

答えがあることが判明し、 "使用ケーキに" とPowerShellの

他のヒント

それは二重のビルドを行っていることをあなたは、単一のキー操作で実行プロセス全体を持つことができますので、より高速な方法で、あなたのツールを実行して、ビルドを開始するVSマクロを記述するのは簡単だろう。

代わりに(またはそれ以上と組み合わせて)、あなたはあなたのツール([ツール] - > [外部ツール]を参照)を実行するVSツールメニューにカスタムツールを追加することができます。ビルドを実行する前に、それからちょうど手動でこのカスタムツールを実行する - これはまだ退屈なダブルのステップであるが、はるかに速く、二回構築するよりも簡単。 (そしておそらく、古いダブルビルドアプローチは、まだ動作しますので、事前にビルドステップで実行しているツールを残すことができるようになります)。

ファイルへの変更は、依存関係スキャン(その一つだけのビルドパスが必要とされている)の間にピックアップされるように、

別のオプションは、以前のビルドプロセスで編集するには、execに、プロジェクト、ツールのためのMSBuildスクリプトかもしれません。

これらのどれも素晴らしいソリューションですが、うまくいけば、彼らはあなたの現在の状況を超える許容可能な改善を提供してリードを与えるかもしれない。

2つのプロジェクトに

リファクタリングあなたのSOLN:最初の世代のCSファイル、第二の用途も(DLLなど)。

最初のプロジェクト(ゲンそれを呼び出す)2ビルド後のイベントがあります:

Gen.exe 
csc.exe /target:library Gened.cs

目のプロジェクトは、DLLの参照(その使用を呼び出す)と、それを呼び出します。

== Gen.cs

using System.IO;
namespace sm3
{class Gen
{static string bod = "public static int var = 46;";
 static string clas = "public class Gened {" + bod + "}";
 static string ns  = "namespace sm3 {" + clas + "}";
 static void Main(string[] args)
 {StreamWriter SW;
     SW = File.CreateText("Gened.cs");
     SW.WriteLine(ns);
     SW.Close();
    }}}

== Use.cs

using System;
namespace sm3
{class Use
    {static void Main(string[] args)
        {Gened g = new Gened();
         Console.Write(Gened.var.ToString());
         Console.ReadLine();
         }}}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top