しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

LightSpeed のモデルが XML として表示される時の対処法

LightSpeed のモデルファイルである *.lsmodel や、ダイアグラムを保持している .lsmodel.diagram はバージョン管理システムを使っている場合、よく自動マージに失敗してコンフリクトします。

そして自動マージに失敗した場合、Visual Studio では lsmodel ファイルをデザインビューで開けなくなるので、XML として表示してしまうことがあります。

f:id:shiba-yan:20131019115127p:plain

この後、手動でコンフリクトを修正しても、ソリューションエクスプローラーからダブルクリックでデザインビューが開かず、常に XML として表示されるようになってしまいます。

原因としては、Visual Studio が XML で開くものだと記憶してしまうことなので、その設定を csproj ファイルを開いて手動で変更します。一応、作業する前に Visual Studio で lsmodel を閉じた後に、Visual Studio も終了してください。

エディタで csproj ファイルを開いて lsmodel で検索すると、以下のようなエントリがあると思います。

<Content Include="LightSpeedModel1.lsmodel">
  <Generator>LightSpeedModelGenerator</Generator>
  <LastGenOutput>LightSpeedModel1.cs</LastGenOutput>
  <SubType>Designer</SubType>
</Content>

このエントリに含まれている SubType タグが原因なので、さくっと削除して保存します。

ソリューションを開きなおすと、ちゃんと lsmodel がデザインビューで表示されるようになっています。

f:id:shiba-yan:20131019115955p:plain

この問題に関しては Mindscape のフォーラムでもまとめられています。

Q. When I open designer files in VS2010, they show up as XML rather than graphical models.

This can occur for two reasons:

1. Visual Studio 2010 has an issue where it tends to remember if a file has ever in its existence been opened as XML, even due to an error, and if so keeps opening it as XML for ever and ever. To fix this, close the solution, open the .csproj or .vbproj in a text editor, find the element for the .lsmodel file, and remove the Designer subelement.

2. If Visual Studio encounters an error loading LightSpeed, it prompts to disable LightSpeed Visual Studio integration. If you say yes to this, then VS doesn't give you a way to undo it once the error has been fixed. To re-enable LightSpeed, open a Visual Studio command prompt (see below) and run devenv /resetskippkgs.

Troubleshooting LightSpeed, LightSpeed forum - Mindscape

コンフリクトで開けなくなった場合は、間違いなく今回のように SubType タグを削除するだけで解決するはずですが、たまに Visual Studio が LightSpeed の読み込みに失敗することがあるみたいなので、その時は再インストールなどで問題を修正してから /resetskippkgs を実行すると直るみたいですね。

複数で開発している場合には割と問題になると思うので、知っておくと役立つと思います。