6


2

ソース管理からネストされたアイテムを除外する

T4テンプレートを使用して、作業中のプロジェクトでいくつかの.configファイルを生成しています。

ソリューションディレクトリ内のすべての.ttファイルを検索するビルド前タスクを設定し、TextTransformコマンドラインツールを実行して、各ビルドでコードが新たに生成されるようにしました。

ただし、Web.UAT.ttファイルでTextTransformを実行しようとすると、Web.UAT.ConfigファイルがTFSのソース管理下にあるため、「アクセス拒否」エラーが発生します。保護されています。

通常、Visual Studioで.Configファイルを選択し、[ファイル]→ [ソース管理]→ [ソース管理から除外]を実行します。 残念ながら、これは別のファイルの下に「ネストされた」として表示されるファイルのオプションとして表示されません!

i.e. web.ttは除外できますが、web.configは除外できません…​ default.aspxは除外できますが、default.aspx.csは除外できません。

下位レベルのネストされたファイルをソース管理から除外する方法について考えている人はいますか?

ありがとうございます。

2 Answer


2


ここでTFSを使用していると仮定しています。

Visual Studioはプロジェクトに追加された新しいアイテムをソース管理に自動的に追加するため、これを完全に行うことはできません。 最善の解決策は、テンプレートを実行する前に、MSBuildを使用して出力ファイルのチェックアウトを発行することです(ただし、後で再度チェックインする必要があります)。 簡単に見てみると、http://msbuildextensionpack.codeplex.com/があり、これを行う目的で言及したことがあります。

それに失敗すると、別の方法があります。

  • 出力.configファイルをソース管理から削除し、チェックイン(ベスト このためにソース管理エクスプローラーを使用します)。

  • VS内から.ttを手動で実行すると、ファイルが再度追加されます-それ 横にプラス記号が表示されます。

  • 再びソース管理エクスプローラーで、この「新しい」ファイルを右クリックし、 [保留中の変更を元に戻す]を選択します。 ファイルはディスク上にありますが、ソース管理にはありません。

  • これでTTを実行できるようになり、ファイルはプロジェクトの一部になります(したがって、 公開されます)が、ソース管理下にはありません。

これに関する問題は、プロジェクトを初めてロードする他の誰かになります。VisualStudioは、.TTを実行すると出力ファイルを自動的に作成します。その場合、このプロセスを繰り返す必要があります(ステップ2から)。正しい名前のスタブ.configファイルを手動で作成する必要があります(プロジェクトをロードする前に推奨します)。これにより、プロジェクトはそれを認識し、再ソース管理を試みません。


2


OK…​ Andras Zoltanの回答の適応バージョンを使用しました。

基本的に、私がやったことは次のとおりでした:

  1. Visual Studioで.ttファイルをクリックし、「カスタムツール」を変更します プロパティの行を空白にします。 これにより、ソリューションから.configファイルが削除されます。

  2. 新しい空のアイテムをソリューションに追加します。出力ファイルは何でも .ttは(つまり、Web.UAT.tt→ Web.UAT.config)になります。

  3. 新しく追加されたファイルを選択し、ソース管理から除外します 通常(ファイル→ソース管理→除外)。

これで、ビルド時に、ソリューションに新しく生成されたファイルが表示されるはずですが、チェックインまたはチェックアウトは行われません。

この方法にはいくつかの欠点があります。 まず、プロジェクトの各.ttファイルに対してこれを実行し、他の開発者が同じことを実行していることを確認する必要があります。 第二に、ビルドを行うことで出力ファイルを_only_生成できるようになりました!

長期的には、Andrasのアドバイスを参考にして、出力ファイルをチェックアウトしてチェックインするか、少なくとも<Attrib>を使用して "読み取り専用"フラグを削除するためのMSBuildスクリプトを作成します。

ありがとうございます。