ちょっと前に試そうとして挫折した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