読者です 読者をやめる 読者になる 読者になる

なか日記

一度きりの人生、楽しく生きよう。

VS2010でWPFModelViewTemplateを使う

.Net

ちょっと前に試そうとして挫折したVS2010でWPFModelViewTemplateを使う方法ですが、こんなんしたら使えたよっていうことでまとめておきます。

使う方法

  • WpfModelViewApplicationProjectTemplateV0.1.cs.zip を解凍する
  • WpfModelViewApplicationProjectTemplate.cs.vstemplate をテキストエディタで開く
  • 以下の部分を削除して保存する
  <WizardExtension>
    <Assembly>Microsoft.VisualStudio.Presentation.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Assembly>
    <FullClassName>Microsoft.VisualStudio.Presentation.Extensions.ModelView.TemplateWizard</FullClassName>
  </WizardExtension>
  • zipファイルに圧縮し直す
  • C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplates\CSharp\Windows\1041 にコピーする
  • 管理者権限で実行した「Visual Studio コマンド プロンプト (2010)」で、「devenv /InstallVSTemplates」を実行する

これで以下のようにテンプレートが追加されます。
f:id:nakaji999:20110122163922p:image

.Net Framework4で使うときの注意

元々のテンプレートが.Net Framework3.5用のためだと思いますが、.Net Framework4でプロジェクトを作成すると次のようなビルドエラーになります。

型 'System.Windows.Markup.IQueryAmbient' が参照されていないアセンブリで定義されています。アセンブリ 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' への参照を追加してください。

型名 'IComponentConnector' が名前空間 'System.Windows.Markup' に見つかりませんでした。この型はアセンブリ 'System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' に転送されました。そのアセンブリへの参照を追加することを検討してください。

ということで、言われたとおりSystem.Xamlを参照に追加すればオッケー。

でも毎回参照に追加するのは面倒だよね

というわけで、zipファイルの中にあるWpfModelViewApplication.csprojを編集してしまおう。

    $if$ ($targetframeworkversion$ == 3.5)
    <Reference Include="System.Core">
        <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
...
    $endif$

の下あたりに、以下の記述を追加。

    $if$ ($targetframeworkversion$ == 4.0)
    <Reference Include="System.Core">
        <RequiredTargetFramework>4.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xml.Linq">
        <RequiredTargetFramework>4.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data.DataSetExtensions">
        <RequiredTargetFramework>4.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xaml">
        <RequiredTargetFramework>4.0</RequiredTargetFramework>
    </Reference>
    $endif$

System.Xaml以外に、3.5の場合と同じアセンブリも参照するようにしてますが、この辺はお好みで…

で、再度zipファイルを作成して、配置して、「devenv /InstallVSTemplates」を実行すれば完成。

.Net Framework4でもWPFModelViewTemplateが使えるようになりました。

最後に

git diffの結果を貼り付けておきます。何となく。

$ git diff
diff --git a/WpfModelViewApplication.csproj b/WpfModelViewApplication.csproj
index 2380d03..3a52309 100644
--- a/WpfModelViewApplication.csproj
+++ b/WpfModelViewApplication.csproj
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -47,6 +47,20 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
     $endif$
+    $if$ ($targetframeworkversion$ == 4.0)
+    <Reference Include="System.Core">
+        <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+        <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+        <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xaml">
+        <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    $endif$
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
     <Reference Include="WindowsBase" />
diff --git a/WpfModelViewApplicationProjectTemplate.cs.vstemplate b/WpfModelViewApplicationProjectTemplate.cs.vstemplateindex c8c232b..cbed3b8 100644
--- a/WpfModelViewApplicationProjectTemplate.cs.vstemplate
+++ b/WpfModelViewApplicationProjectTemplate.cs.vstemplate
@@ -41,8 +41,4 @@
       </Folder>
     </Project>
   </TemplateContent>
-  <WizardExtension>
-    <Assembly>Microsoft.VisualStudio.Presentation.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856-    <FullClassName>Microsoft.VisualStudio.Presentation.Extensions.ModelView.TemplateWizard</FullClassName>
-  </WizardExtension>
 </VSTemplate>
\ No newline at end of file