ちょっと前に試そうとして挫折した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」を実行する
.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
