3

SVN を更新するたびに T4MVC が生成したコードを失うという問題があります。. generated.cs ファイルを削除してテンプレートを再実行することで修正できます。しかし、これは少し面倒です。足りないものはありますか?


最初に少し背景情報を...

C# v4、VS2010、および ASP.NET MVC2 を使用しています。ソース管理に Subversion を使用しています。また、VS2010 内で多数のアドインと拡張機能を実行しています ...

  • Huagati DBML.EDMX ツール
  • Zippy.Chirp (T4MVC テンプレートの自動実行用)
  • リシャーパー v5
  • ビジュアルSVN
  • 割り当てを調整する
  • ASP.NET OpenID Web サイト
  • ブレース コンプリーター (無効)
  • Code4ブログ
  • devColor
  • 選択した単語の出現箇所をすべて強調表示 (無効)
  • HTML スペル チェッカー (無効)
  • Lipsum 2010 - Lorem Ipsum ジェネレーター
  • Visual Studio 2010 の PowerCommand
  • 仕事効率化電動工具
  • スペルチェッカー (無効)
  • Visual Studio バックグラウンド カスタマイザー
  • Visual Studio カラー テーマ エディター
  • VS10x コードマーカー
  • World of VS Default Browser Switcher

私は実際にこの質問を作業コピーの更新として書いており、各段階でできることをキャプチャしています...

ステップ1

その日の作業を開始するために IDE を開きましたが、作業コピーを更新する前に、既に 4 つのコンパイラ警告が表示されています...

Warning 1 The C# 2.0 and C# 3.5 compilers are no longer supported. Templates will always be compiled with the version 4 compiler instead of 'v3.5' as specified. C:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 18 4  
Warning 2 Compiling transformation: Unreachable code detected c:\Users\antony\AppData\Local\Temp\z04plrve.0.cs 1015 17  
Warning 3 Compiling transformation: Assuming assembly reference 'EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' matches 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a', you may need to supply runtime policy C:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 1 1  
Warning 4 Compiling transformation: Unreachable expression code detected c:\Data Files\Projects\Web\ByBox.Vanventory\ByBox.Vanventory\T4MVC.tt 968 33

ステップ2

ソリューション エクスプローラーでルート ノードを右クリックし、コンテキスト メニューの Visual SVN 部分から [更新] を選択して、作業コピーを更新しています。

ほとんどの . generated.cs ファイルでツリーの競合があります...

  • HomeController.generated.cs (ツリーの競合)
  • T4MVC.cs (ツリーの競合)
  • T4MVC.ExplicitExtensions.cs (削除、追加)
  • GoodsInController.generated.cs (ツリーの競合)
  • SharedController.generated.cs (削除、追加)
  • StockListController.generated.cs (ツリーの競合)
  • StockCheckController.generated.cs (ツリーの競合)
  • AuthController.generated.cs (ツリーの競合)
  • GoodsOutController.generated.cs (ツリーの競合)

ステップ 3

私は今、私の対立を解決しています。私は常にローカルファイルを保持し、解決済みとしてマークしているため、ここに問題があると思われます。最初の競合 (HomeController.generated.cs) に対してこれを実行しました。次に、ローカル コピーと比較してみましたが、次のエラー メッセージが表示されました...

リビジョン 14638 で 'C:/Data Files/Projects/Web/ByBox.Vanventory/ByBox.Vanventory/HomeController.generated.cs' のリポジトリの場所が見つからない


うわあ - ちょっと待って!

ツリーの競合の理由は、生成されたファイルが実際に削除され、プロジェクトに再度追加されていることに気付いたときです。現在、T4MVC 自体がこれを行っているのか、それとも Chirpy 拡張機能を行っているのかはわかりません。Chirpy のソース コードを調べました (コードプレックスの Web ブラウザーでブラウジングするだけです) が、そうではないようです。

Subversion でのツリーの競合の原因は、 2 人のユーザーが両方ともコントローラーに変更を加えているためだと思います。これにより、 2 人とも同じファイル名で新しいファイルが生成されます。したがって、Subversion には 2 つの新しいファイルがあり、どうすればよいかわからないため、ツリーの競合としてフラグを立てます。

同じく T4MVC を使用している同僚に、問題がないことを確認しましたが、コントローラー コードを変更しているのは彼らだけです。私のプロジェクトに 2 人が参加する前は、問題はありませんでした。この問題は、2 番目の人がプロジェクトに取り組み始め、コントローラー コードに変更を加えてから発生しました。


では、ここで露骨に明らかな何かが欠けているのでしょうか、それとも T4MVC や Chirpy を悪用しているのでしょうか?

今のところ、私は少しハックな解決策を持っています。すべての controller.cs ファイルに「触れる」ための powershell スクリプトを作成しました。それをVS2010の外部ツールに入れました。問題が発生したら、その powershell スクリプトを実行してから、T4MVC テンプレートを強制的に実行するソフトウェアをビルドすると、すべてのエラーが解消されます。これは理想的ではなく、「ただうまくいく」ことを望みます。


編集

明確にするために、私が達成したい状況は、朝にビジュアルスタジオを開き、(VisualSVN を介して) SVN の更新を行い、生成されたコードにコードが含まれていないためにビルドに時間を費やす必要がないことです。昨日そこにあったファイル。

では、テンプレート/T4MVC はビジュアル スタジオでどのように機能するのでしょうか?

(生成されたファイルを削除し、実行するたびに再作成する場合は、使用を停止する必要があります。これは、Subversion を使用したり、生成されたコードであるコードで複数の人が作業したりするのには適していないためです。に追加)

4

3 に答える 3

1

チャーピーの「スマートラン」機能をオフにしましたが、今はすべて順調です。まれに手動で実行する必要はありません。ビルドしても実行され、99%のニーズに対応します。

于 2010-10-08T09:02:23.420 に答える
1

Chirpy や T4MVC に直接責任があるとは思いません。Visual Studio がコード生成を処理する方法が原因で、問題の根本は T4 にあると思います。

たとえば、最近、サービス参照を更新するときに同様の問題が発生しました。生成されたファイルの Subversion ステータスが、一部の生成されたファイルで置き換えられました。これは、(Subversion 統合アドインを介して) Visual Studio が Subversion にファイルを削除してから、まったく同じ名前のファイルを追加するように指示したことを意味します。

T4MVC がそのファイルを再生成する原因となる変更を行う前後に、同僚と調整することを確認する以外に、これについてできることは何もないと思います。ただし、T4MVC についての私の理解では、コントローラーを変更したり、新しいコンテンツ ファイルを追加したりするたびに調整する必要があるということです。

于 2010-09-03T07:28:53.760 に答える
0

これは古い質問ですが、同様の問題があります。責任があるのはVisualSVNだと思います。Visual StudioでANKHを使用していますが、VisualStudioを介してファイルを追加するときにSVNにファイルを追加できるようにするためだけです。私が思い出すことができることから、TortioseSVNが常にリポジトリから削除される特定のT4MVCファイルを削除したいと思ったことはありません。

他のすべての人はVisualSVNを使用します。確かではありませんが、それが起こっていると私が考えることができるのはそれだけです。

于 2012-09-14T15:53:57.947 に答える