ちょっとしたWPFアプリを複数個作る機会があり、同じような構成のWPFプロジェクトを何個も作るのが大変面倒だったので、Project Templateを作りました。
忘れないうちにProject Templateの作成と、そのProject TemplateをNuget Package化する方法について残しておきたいと思います。
※なおNugetで配布するのではなく、個人的に使いまわす目的でNuget Package化します。
ちなみに、こんな感じのWPFアプリが生成されるTemplateです。
目次
成果物
今回作成したtemplateは以下に保存しています。
作成するTemplate
今回は例として、下記4つのPackageを組込んだ .NET CoreのWPF Projectを作成します。
※4つと言いつつSerilog.Sinks.File
とSerilog.Settings.AppSettings
も使用しています。前者はLogのファイル出力機能, 後者はapp.config
からLoggingの設定を変更するものです。
※Prism.Plugin.Loggingを見るとApp Center
やApplication Insights
のLoggerもあるんですねぇ
Project Templateの作成
作業用フォルダを作成します
mkdir workingDir\templates cd workingDir\templates
WPF Projectの作成
まずはTemplateとなるWPF Projectをtemplates
フォルダ以下に作成します。
dotnet new sln -n BaseTemplate dotnet new wpf -o BaseTemplate.App dotnet sln BaseTemplate.sln add .\BaseTemplate.App
Project名がBaseTemplate
である点に留意してください。
後記するtemplate.config
のsourceName
キーの値と同じである必要があります。
WPF Projectの作成過程は省略します。
template.configの作成
Microsoft Docsを参考に進めます。
templates
フォルダ以下に.template.config
フォルダを作成します。
mkdir .template.config
.template.config
フォルダ内にtemplate.json
を作成します。
各設定項目の内容はMicrosoft Docsを参照してください。
{ "$schema": "http://json.schemastore.org/template", "author": "piyosi", "classifications": [ "WPF" ], "name": "Modern WPF Template", "identity": "Template.WPF.Modern.Piyosi.CSharp", "shortName": "ModernWPF", "tags": { "language": "C#", "type":"project" }, "sourceName": "BaseTemplate", "preferNameDirectory": true }
注意点としては、TemplateとなるWPF Project内の全ての文字列はsourceName
で指定した文字列に置換される点です。
※ファイル名含む
他にも生成時のオプションコマンドの追加など、色々できるようです。
以下のサンプルが参考になるかと思います。
Project Templateのインストール
下記コマンドで作成したProject Templateをインストールしてみます。
dotnet new -i .\
dotnet new
で表示されるTemplateの一覧内にtemplate.config
のname
またはshorName
で指定したTemplateが表示されていれば追加成功です。
もしdotnet new
で探しにくい場合はdotnet new -u
コマンドを使用してください。
追加した順にTemplateが降順表示されます。
追加したTemplateで実際にプロジェクトを作成してみましょう。
dotnet new <Template名> -o test -n SampleWPF
意図したProject名(上記例ではSampleWPF
)で作成されれば成功です。
Project Templateのアンインストール
インストールしたTemplateを削除するには下記コマンドを実行します。
dotnet new --uninstall
インストール済みのTemplateが降順表示されます。
Uninstall Command:
に記載されたコマンドを実行することでTemplateをアンインストールできます。
C:\Users\piyoe\work\dotnet\workingDir\templates Templates: Modern WPF Template (ModernWPF) C# Uninstall Command: dotnet new -u C:\Users\piyoe\work\dotnet\workingDir\templates
Project TemplateのNuget Package作成
作成したWPF ProjectのTemplateをNuget Package化します。
引き続き先程のMicrosoft Docsを参考に進めます。
Nuget Package作成用Projectの設定
workingDir
で以下のコマンドを実行します。
Program.cs
は不要なので削除します。
dotnet new console -n nugetTemplate rm Program.cs
nugetTemplate.csproj
を開き以下のように編集します。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <PackageType>Template</PackageType> <PackageVersion>1.0</PackageVersion> <PackageId>Template.WPF.Modern.Piyosi.CSharp</PackageId> <Title>Modern WPF Template</Title> <Authors>piyosi</Authors> <Description>Modern WPF Template of .NET Core</Description> <PackageTags>dotnet-new;templates;wpf;</PackageTags> <TargetFramework>netcoreapp3.1</TargetFramework> <IncludeContentInPack>true</IncludeContentInPack> <IncludeBuildOutput>false</IncludeBuildOutput> <ContentTargetFolders>content</ContentTargetFolders> </PropertyGroup> <ItemGroup> <Content Include="templates\**\*" Exclude="templates\**\bin\**;templates\**\obj\**" /> <Compile Remove="**\*" /> </ItemGroup> </Project>
PackageId
やTitle
, Authros
などは適宜変更してください。
Content
で指定したInclude
とExclude
のパスがWPF ProjectのTemplateのパスになっていることを確認して下さい。
Nuget Packageのビルド
BuildしてPackします。
dotnet build dotnet pack
bin\Debug
以下に*.nupkg
のファイルが生成されます。
※pack
ではReleaseビルドしない慣習っぽい?
Nuget PackageのProject Templateのインストール
生成された*.nupkg
をdotnet new -i
でインストールします。
dotnet new -i <nupkgファイル>
Nuget PackageのProject Templateのアンインストール
アンインストールする際は先程と同様dotnet new -u
でOKです。
dotnet new -u <nupkgファイル>
おわり
ModernWPFUIよくないですか?