ビルド前にファイルを強制的にリロードする
-
23-09-2019 - |
質問
プロジェクトのビルドに使用されるコード (.cs) ファイルを生成するツールがあります。
編集:これらのファイルは一部の部分クラスの残りの半分であるため、ビルド プロセスではソースへのアクセスが必要です。たとえば、これを DLL にコンパイルしてからビルド順序を設定することはできません。
このツールはビルド前のステップ中に実行されますが、ソリューション内のファイルはビルド後にのみ更新されます。つまり、入力の変更後にエラーをクリアするにはビルドを 2 回実行する必要があります。
例:
- ツール入力ファイルの変更
- ビルドの実行
- ツールを実行してソースファイルを変更します
- ビルドの失敗
- ビルドの実行
- ツールを実行してソース ファイルを変更します (ただし、入力は同じままであるため、実際には変更されません)
- ビルド成功
二重ビルドをなくし、ツールを VS から実行できるようにする方法はありますか?
みんなありがとう!
解決 3
答えがあることが判明し、 "使用ケーキに" とPowerShellの
他のヒント
それは二重のビルドを行っていることをあなたは、単一のキー操作で実行プロセス全体を持つことができますので、より高速な方法で、あなたのツールを実行して、ビルドを開始するVSマクロを記述するのは簡単だろう。
代わりに(またはそれ以上と組み合わせて)、あなたはあなたのツール([ツール] - > [外部ツール]を参照)を実行するVSツールメニューにカスタムツールを追加することができます。ビルドを実行する前に、それからちょうど手動でこのカスタムツールを実行する - これはまだ退屈なダブルのステップであるが、はるかに速く、二回構築するよりも簡単。 (そしておそらく、古いダブルビルドアプローチは、まだ動作しますので、事前にビルドステップで実行しているツールを残すことができるようになります)。
ファイルへの変更は、依存関係スキャン(その一つだけのビルドパスが必要とされている)の間にピックアップされるように、別のオプションは、以前のビルドプロセスで編集するには、execに、プロジェクト、ツールのためのMSBuildスクリプトかもしれません。
これらのどれも素晴らしいソリューションですが、うまくいけば、彼らはあなたの現在の状況を超える許容可能な改善を提供してリードを与えるかもしれない。
リファクタリングあなたのSOLN:最初の世代のCSファイル、第二の用途も(DLLなど)。
最初のプロジェクト(ゲンそれを呼び出す)2ビルド後のイベントがあります::ツールを実行し、ソースファイル、および2を再作成するために、1)は、第二のプロジェクトで使用するためGen'edのsrcファイルをコンパイルP>
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();
}}}