19

私のワークショップは最近、SourceSafe から Subversion に切り替え、自動ロックから解放されました。これにより、フォームの同時編集が可能になりました。これはすばらしいことです。しかし、複数の開発者が変更をコミットすると、デザイナーによって作成されたコード ファイル (名前が付けられたすべてのファイルTheFormName.designer.cs) が競合を引き起こし、解決が非常に困難になります。

私が知る限り、これはデザイナーが生成したコードが、ユーザーがコードを変更するたびに大幅に再配置されるためです。

  • これらの競合を解決しやすくするにはどうすればよいですか?
  • デザイナーにコードの変更を減らすように指示する方法はありますか?
  • 経験豊富な C# チームは、フォームの同時変更にどのように対処していますか?
4

5 に答える 5

10

試すべきことがいくつかあります:

  • 物事をよりモジュール化する。ユーザーコントロールなどのコンポーネントを使用して、フォームを複数の小さな物理ファイルに分割します。
  • MVPなどのプレゼンテーション層のデザインパターンを使用して、コードをビューから標準のPOCOクラスに移動します。
  • 最近のバージョンのSVNでは、ハードロックを取得できます。これを使用して、複雑なマージシナリオを回避します。

お役に立てば幸いです。

于 2009-01-28T07:20:16.923 に答える
3

デザイナーがdesigner.cs全体を踏みにじるので、この問題に特効薬はないと確信しています。

私が提案できるのは、デザイナーの使用を最小限に抑えることだけです。個人的には、コード内のイベントにのみフックし、初期化と配置のためにのみデザイナーを使用します。そのため、チェンジセットの違いを理解するのはそれほど難しくありません(「ああ、誰かがボタンを追加した」、「ああ、誰かがそれの見た目を少し変えた」)。

于 2009-01-31T18:10:22.313 に答える
3

ええ、デザイナーのランダムな再配置は確かにイライラします. Microsoft は独自のツールを使用していますか? Microsoft はバージョン管理に何をチェックインするかを見ていますか? それは頭がおかしくなる。

私たちのチームの「解決策」は、Designer ファイルの編集が終わった後に手動で編集し、元の場所に戻して、テキストベースの差分を読み取り可能にし、同時変更を正常にマージできるようにすることです。幸いなことに、Visual Studio の再配置のほとんどは単純なので、これでうまくいきます。

残念ながら、この手順は正確性を検証するために必要であることがわかりました。Designer が必要なものを黙って削除し、コードの破損につながる場合があります。そのため、内部に潜んでいるデータ破壊バグを回避するには、この手順を実行する必要があります。はぁ。

Microsoft はバグ修正の実績が乏しいため、唯一の解決策は、Mono の WinForms Designerを改善して、すぐに使用できるようにすることかもしれません。

于 2012-10-23T17:16:00.750 に答える
0

Subversion などのマージ スタイルのソース管理システムを使用するときに、この問題を真に回避する唯一の方法は、デザイナーを使用せずにフォームを手動でコーディングすることです。明らかに、これらのフォームを手作業でコーディングするには時間がかかるため、これは適切ではありません。

これが発生する理由は、フォームにドロップされた順序でコントロール プロパティがデザイナによってシリアル化されるためです。切り取りと貼り付けは、この順序に影響を与えるだけでなく、新しい親を持つようにコントロールを移動することもできます (以前はフォーム上に直接あったコントロールをパネルに移動するなど)。

大規模なプロジェクトでこの問題が発生し、かなり醜いアプローチを採用する必要がありました.designer.csファイルをチェックインターゲットリビジョンと比較し、マージツールを使用して手動でマージしました。これは理想的ではありませんが、これが svn または別のマージ スタイル ソース管理ツールで一貫して動作する唯一の方法です。

他のオプションは、他の人が指摘したように、ソース管理でロック アプローチを使用することですが、これには不快な副作用も伴います。

于 2009-02-01T20:20:23.330 に答える