坂本  篤司

坂本 篤司

1637570640

.NETプロジェクトテンプレートを作成する

.NETには、さまざまなコンテキストでアプリケーションをすばやくスキャフォールディングするのに役立ついくつかのプロジェクトテンプレートが付属しています。特定のコンテキストで独自のプロジェクトテンプレートを作成する必要がある場合があります。この記事では、.NETCLIおよびVisualStudioで使用する独自のプロジェクトテンプレートを作成する方法について説明します。

テンプレートの操作

テンプレートは開発者の生産性を向上させ、ベストプラクティスの促進に役立つ可能性があります。.NET開発者には、コンソールアプリ、クラスライブラリ、単体テストプロジェクト、ASP.NET Coreアプリなど、新しいプロジェクトを開始したり、既存のプロジェクトに新しいアイテムを追加したりするための多くの組み込みテンプレートがあります。もちろん、あなたは、両方それらを使用することができますのVisual Studioとで.NET CLI。この記事では、プロジェクトテンプレート、つまり特定の機能を備えた新しいプロジェクトを作成できるテンプレートに焦点を当てます。

Visual Studioでは、[新規]メニュー項目を選択するだけでプロジェクトテンプレートリストを探索できますが、.NET CLIでは、コマンドを使用してテンプレートを操作できます。たとえば、次のコマンドを実行すると、マシンで使用可能なテンプレートのリストが表示されます。dotnet new

dotnet new --list

以下は、コンソールに表示されるテンプレートリストの例です。

dotnet new--listによって表示される.NETテンプレートのリスト

したがって、たとえば、新しいコンソールアプリケーションを作成する場合は、上記のリストにあるテンプレートの短い名前を使用するコマンドを実行できます。あなたは見つけることができる公式ドキュメントから始まる内蔵されたテンプレートの説明をdotnet new console

dotnet newNuGetリポジトリまたは独自のマシンから他のテンプレートをインストールおよびアンインストールするなど、他の多くのテンプレート管理タスクでも役立ちます。この記事全体でそれを使用する方法を学びます。

基本的なテンプレートの作成

作成するプロジェクトテンプレートは、認証にAuth0を使用するASP.NETWebアプリケーションテンプレートです。このテンプレートを使用すると、開発者はAuth0対応のスターターWebアプリケーションをすぐに実行できます。

実装するプロジェクトテンプレートには、.NET Core 3.1以降(.NET 5.0)が必要です。また、テンプレートは、バージョン16.8プレビュー以降のVisual Studio2019およびバージョン8.8以降のMac用VisualStudio2019でサポートされています。

作業環境の準備

プロジェクトテンプレートを作成する前に、いくつかのフォルダを作成して作業環境を準備しましょう。まず、ルートフォルダを作成します。次に、このフォルダーに移動して、2つのサブフォルダーを作成します:と。templates-playgroundtemplatestest

このプロセスの最後に、次のフォルダー構造を取得する必要があります。

templates-playground
├── templates
└── test

templatesフォルダは、プロジェクトテンプレートのソースコードが含まれます。そこに複数のテンプレートを配置できます。

このtestフォルダーを使用して、そのプロジェクトテンプレートから新しいプロジェクトを作成します。

プロジェクトテンプレートの設定

.NET Coreプロジェクトテンプレートは、次のもので構成されています。

プロジェクトのソースファイル

という名前の構成ファイル。template.json

この記事の目的上、テンプレートの基礎として機能する.NETプロジェクトを最初から構築することはしません。代わりに、既製のプロジェクトを使用します。

そのため、フォルダーに移動し、次のコマンドを使用してGitHubからプロジェクトのクローンを作成します。templates-playground/templates

cd templates-playground/templates
git clone \
  -b starting-point \
  https://github.com/auth0-blog/auth0-aspnet-webapp-project-template.git \
  auth0-webapp

これらのコマンドは、フォルダーの下にサブフォルダーを作成し、そこにこのGitHubリポジトリのブランチのクローンを作成します。auth0-webapptemplates-playground/templatesstarting-point

前述のように、そのフォルダーにあるプロジェクトは、Auth0認証を使用するASP.NETWebアプリケーションです。このプロジェクトがどのように構築されたかについて詳しく知りたい場合は、「Auth0認証にC#拡張メソッドを使用する」の記事参照してください。

次に、プロジェクトのルートフォルダー()内に名前を付けたサブフォルダーを作成します。次に、この新しく作成されたフォルダーに、次の内容の名前の新しいファイルを追加します。.template.configtemplates-playground/templates/auth0-webapptemplate.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "tags": {
    "language": "C#",
    "type": "project"
  }
}

このファイルは、テンプレートを作成するための重要なアイテムです。これには、.NETプロジェクトをプロジェクトテンプレートに変換するメタ情報が含まれています。上記の例では、最低限必要なプロパティが見つかります。

  • $ schema:現在のJSONファイルのスキーマを定義します。その値はに固定されています。http://json.schemastore.org/template
  • author:このプロパティは、テンプレートの作成者を定義します。
  • 分類:このテンプレートを使用するコンテキストを宣言します。これは、テンプレート自体を分類するのに役立つ文字列の配列です。ユーザーは、これらの文字列に基づいてグループでテンプレートを見つけることができます。
  • アイデンティティ:これはテンプレートの一意の識別子です。
  • name:ユーザーに表示されるテンプレートの名前。
  • shortName:これは、テンプレートから新しいプロジェクトを作成するときに使用するテンプレートの名前です。dotnet new
  • タグ:テンプレートのターゲットを定義する値のセット。この例では、このテンプレートがtypeC#(languageプロパティ)のプロジェクト(プロパティ)用であることを宣言します。

使用可能な構成プロパティの完全なリストについては、このドキュメントを確認してください。

テンプレートのインストール

これまでに実行した簡単な手順で、作業中のプロジェクトテンプレートができました。フォルダ内で次のコマンドを実行して、ローカルにインストールしましょう。templates-playground/templates/auth0-webapp

dotnet new --install .

このコマンドを使用すると、.NETテンプレートエンジンは現在のフォルダ(.)をテンプレートパッケージと見なすことができます。パッケージを作成する方法については、後で学習します。

テンプレートをインストールしたら、を実行します。次の図のように、既存のテンプレートの中に新しくインストールされたテンプレートが表示されます。dotnet new --list

リストされているAuth0.NETテンプレート

素晴らしい!最初の.NETプロジェクトテンプレートを実行する準備ができました。

テンプレートのテスト

プロジェクトテンプレートの動作を確認するには、フォルダーに移動して次のコマンドを実行します。templates-playground/test

dotnet new auth0webapp -o myAuth0WebApp

myAuth0WebAppASP.NETプロジェクトのソースファイルを含むフォルダーを取得する必要があります。

実行の準備ができていることを確認するには、アプリケーションをAuth0に登録し、いくつかのパラメーターを使用して構成する必要があります。この手順により、アプリケーションユーザーはAuth0で認証できます。

これを行うには、Auth0アカウントが必要です。ここから無料でサインアップできます。

次に、Auth0ダッシュボードにアクセスし、[アプリケーション]セクションに移動し、次の手順に従ってアプリケーションをAuth0に登録します。

  1. [アプリケーション作成]ボタンをクリックします
  2. アプリケーションにわかりやすい名前を付け(たとえば、マイWebアプリケーション)、アプリケーションの種類として[通常のWebアプリケーション]を選択します。
  3. 最後に、[作成]ボタンをクリックします

アプリケーションを作成したら、[設定]タブに移動し、Auth0ドメインクライアントID、およびクライアントシークレットをメモします。アプリケーションを構成し、Auth0と通信できるようにするには、これらの値が必要になります。

次に、値を[許可されたコールバックURL]フィールドに割り当て、値を[許可されたログアウトURL]フィールドに割り当てます。最初の値は、ユーザーが認証した後にコールバックするURLをAuth0に指示します。2番目の値は、ユーザーがログアウトした後にリダイレクトするURLをAuth0に指示します。https://localhost:5001/callbackhttps://localhost:5001/

最後に、[変更保存]ボタンをクリックして適用します。

アプリケーションをAuth0に登録した後、ダッシュボードからいくつかのパラメーターを使用してアプリケーションを構成する必要があります。したがって、ASP.NETプロジェクトのルートフォルダーに移動して、ファイルを開きます。その内容は次のようになります。appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Auth0": {
    "Domain": "{DOMAIN}",
    "ClientId": "{CLIENT_ID}",
    "ClientSecret": "{CLIENT_SECRET}"
  }
}

、、およびプレースホルダーをAuth0ダッシュボードの対応する値に置き換えて、ファイルを保存します。{DOMAIN}{CLIENT_ID}{CLIENT_SECRET}

クライアントシークレットをアプリケーションのパスワードと見なします。気をつけて、広めないでください。ここでは、サンプルアプリケーションがサーバー上で実行されることを意図しており、ユーザーがそれにアクセスできないため、クライアントシークレットをファイルに保存しています。appsettings.json

これで、次のコマンドを実行してアプリケーションを起動できます。

dotnet run

アプリケーションが起動したら、ブラウザでhttps:// localhost:5001を指定します。次のページが表示されます。

ASP.NETアプリケーションの実行

ページの右上隅にある[ログイン]リンクをクリックすると、Auth0ユニバーサルログインページにリダイレクトされ、ユーザープロファイルページを認証してアクセスします。つまり、アプリケーションは、すべてのAuth0認証ロジックがすでに統合された状態で実行する準備ができています。

テンプレートへのパラメーターの追加

これまでのところ、作業中のプロジェクトテンプレートがありますが、元のプロジェクトのソースファイルを新しいフォルダーにコピーするだけなので、それほどエキサイティングには見えません。組み込みのテンプレートでできるように、新しいプロジェクトをカスタマイズしたいとします。

幸い、template.json構成ファイルを操作して、テンプレートジェネレーターのデフォルトの動作を変更できます。基本的な原則は、ユーザーがコマンドにオプションを渡すことでオーバーライドできるいくつかの設定を定義できることです。dotnet new <TEMPLATE_SHORT_NAME>

見てみましょう。

カスタムアプリケーション名の割り当て

組み込みのテンプレートでコマンドを使用すると、新しいプロジェクトに割り当てる名前を指定できます。これにより、たとえば、アプリケーションに独自のグローバル名前空間を提供できます。通常、これはオプションを使用して実行できます。次のコマンドを実行するときに、このオプションを以前に使用したことがあります。dotnet new-o

dotnet new auth0webapp -o myAuth0WebApp

ただし、このコマンドmyAuth0WebAppは、新しいプロジェクトを含むフォルダーを作成しました。ソースコードを見ると、グローバル名前空間が変更されていないことがわかります。

テンプレートを一般的な動作に準拠させるには、以下に示すように、構成ファイルにいくつかのプロパティを追加する必要があります。template.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "sourceName": "Auth0.NET.Mvc",
  "preferNameDirectory":true,
  "tags": {
    "language": "C#",
    "type": "project"
  }
}

sourceNameおよびpreferNameDirectoryプロパティを追加しました。

sourceNameプロパティは、アプリケーションのグローバル名前空間でプロジェクトの名前を表します。このプロパティに、現在のアプリケーションの名前空間と一致する値を割り当てました。この値は、ユーザーが提供する場合、ユーザーからの値に置き換えられるプレースホルダーとしても機能します。Auth0.NET.Mvc

このpreferNameDirectoryパラメーターを使用すると、出力フォルダー名をプロジェクト名と一致させることができます。

これは、組み込みのプロジェクトテンプレートと同じ方法でカスタム名を指定することにより、新しいプロジェクトを作成できることを意味します。

変更したテンプレートをテストする前に、次のコマンドを使用してプロジェクトテンプレートをアンインストールします。

dotnet new -u <absolute_path_to_your_local_template>

カスタムパラメータの追加

カスタムパラメータを受け入れるようにプロジェクトテンプレートを構成することもできます。たとえば、Auth0テンプレートのユーザーが、新しいプロジェクトの作成中にAuth0構成パラメーターを提供できるようにすることができます。構成ファイルの内容を次のように置き換えましょう。template.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "sourceName": "Auth0.NET.Mvc",
  "preferNameDirectory":true,
  "tags": {
    "language": "C#",
    "type": "project"
  },
  "symbols":{
    "domain": {
        "type": "parameter",
        "description": "Your Auth0 domain.",
        "defaultValue": "{DOMAIN}",
        "replaces":"{DOMAIN}"
    },
    "clientId": {
        "type": "parameter",
        "description": "Your Auth0 client id.",
        "defaultValue": "{CLIENT_ID}",
        "replaces":"{CLIENT_ID}"
    },
    "clientSecret": {
      "type": "parameter",
      "description": "Your Auth0 client secret.",
      "defaultValue": "{CLIENT_SECRET}",
      "replaces":"{CLIENT_SECRET}"
    }
  }
}

追加したsymbol3つのカスタムパラメータを定義するプロパティを、: 、domain、。clientId clientSecretこれらのパラメーターは、上記で学習したAuth0構成データを表します。

各パラメーターは、次の4つのプロパティで定義されます。

  • type:これはシンボルのタイプを定義します(parameterこの場合はそうです)。
  • description:パラメータに割り当てる値の説明。
  • defaultValue:これは、ユーザーが何も割り当てない場合のパラメーターのデフォルト値です。
  • replaces:このプロパティは、プロジェクトテンプレートのソースコードのプレースホルダーを定義します。テンプレートエンジンはこのプレースホルダーを探し、ユーザーが指定した値に置き換えます。

したがって、これらのパラメータをテストするには、プロジェクトテンプレートの現在インストールされているバージョンをアンインストールし、再インストールしてください。

cd templates-playground/templates/auth0-webapp
dotnet new -u <absolute_path_of_templates-playground/templates/auth0-webapp>
dotnet new -i .

テンプレートをインストールしたら、次のコマンドを実行して、使用可能なパラメーターを確認します。

dotnet new auth0webapp -h

の標準オプションとは別に、次の出力が表示されます。dotnet new

...
Auth0 ASP.NET Core App (C#)
Author: Andrea Chiarelli
Options:
  -d|--domain         Your Auth0 domain.
                      string - Optional
                      Default: {DOMAIN}

  -c|--clientId       Your Auth0 client id.
                      string - Optional
                      Default: {CLIENT_ID}

  -cl|--clientSecret  Your Auth0 client secret.
                      string - Optional
                      Default: {CLIENT_SECRET}

テンプレートで3つのカスタムパラメータを使用できるようにしました。短いバージョンが自動的に割り当てられていることに注意してください。

したがって、フォルダーに移動し、次のコマンドを入力して、この新機能をテストします。templates-playground/test

dotnet new auth0webapp \
    -o mySecureWebApp \
    -d <YOUR-AUTH0-DOMAIN> \
    -c <YOUR-AUTH0-CLIENT-ID> \
    -cl <YOUR-AUTH0-CLIENT-SECRET>

パラメータとして提供された値は、の一致するプレースホルダーを置き換えるため、アプリケーションを実行する準備が整います。appsettings.json

オプションを許可する

一般的な文字列パラメーターに加えて、限られた値のセットに制限されているパラメーターを構成できます。たとえば、ユーザーに新しいプロジェクトのターゲットフレームワークを選択させたい場合は、ファイルの内容を次のように変更する必要があります。template.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "sourceName": "Auth0.NET.Mvc",
  "preferNameDirectory": true,
  "tags": {
    "language": "C#",
    "type": "project"
  },
  "symbols":{
    "domain": {
        "type": "parameter",
        "description": "Your Auth0 domain.",
        "defaultValue": "{DOMAIN}",
        "replaces":"{DOMAIN}"
    },
    "clientId": {
        "type": "parameter",
        "description": "Your Auth0 client id.",
        "defaultValue": "{CLIENT_ID}",
        "replaces":"{CLIENT_ID}"
    },
    "clientSecret": {
      "type": "parameter",
      "description": "Your Auth0 client secret.",
      "defaultValue": "{CLIENT_SECRET}",
      "replaces":"{CLIENT_SECRET}"
    },
    "Framework": {
      "type": "parameter",
      "description": "The target framework for the project.",
      "datatype": "choice",
      "choices": [
        {
            "choice": "netcoreapp3.1",
            "description": "Target .NET Core 3.1"
        },
        {
          "choice": "net5.0",
          "description": "Target .NET 5"
        }
      ],
      "defaultValue": "netcoreapp3.1",
      "replaces": "netcoreapp3.1"
    }
  }
}

新しいパラメータ定義を追加しました:Framework。実際には、これは組み込みパラメーターですが、制限された値を使用してカスタムパラメーターを定義するアプローチも同様に有効です。

パラメータの名前が大文字になっていることに注意してください。これは組み込みパラメーターであるため、この場合を維持する必要があります。そうしないと、VisualStudioでこのテンプレートを使用すると問題が発生する可能性があります。

すでに知っているパラメータのプロパティに加えて、さらに2つあります。

  • datatypechoice値を割り当てることにより、このプロパティは値の制限を有効にします。
  • choices:これは、パラメーターの有効な値の配列です。有効な値(choice)とそのdescription。の2つのプロパティを持つ各アイテム。

上記のFramework定義では、有効な値はとであり、前者がデフォルト値であると記載されています。この特定のケースでは、Frameworkパラメーターの有効な値が公式の.NETターゲットフレームワークと一致する必要があることを考慮してください。netcoreapp3.1net5.0

ここで、たとえば、auth0webappテンプレートから.NET 5.0をターゲットとする新しいプロジェクトを生成する場合は、次のコマンドを実行することでそれを実現できます。

dotnet new -auth0webapp -o MySecureWebApp -f net5.0

このサンプルプロジェクトでは、プロジェクトのコードは.NET3.1と.NET5.0の両方で同じままです。フレームワークによってコードが変更される場合は、プリプロセッサディレクティブを使用し#ifてコードを適合させる必要がある場合があります。

テンプレートのパッキングと公開

これまで、.NETプロジェクトテンプレートを作業フォルダーからインストールするだけで、ローカルでテストしてきました。次に、NuGetパッケージを作成して配布したり、NuGetリポジトリに公開したりする方法を学習します。ちなみに、NuGetパッケージを作成することは、VisualStudioでテンプレートを使用するための前提条件です。

テンプレートのNuGetパッケージの作成は非常に簡単です。開始するには、フォルダに移動します。次に、次の内容で名前が付けられた新しいファイルを追加します。templates-playgroundTemplatePack.csproj

<!-- templates-playground/TemplatePack.csproj -->
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <PackageType>Template</PackageType>
    <PackageVersion>1.0</PackageVersion>
    <PackageId>Auth0.Templates</PackageId>
    <Title>Auth0 Templates</Title>
​    <Authors>Andrea Chiarelli</Authors>
​    <Description>Template for creating an ASP.NET web application with Auth0 authentication.</Description>
​    <PackageTags>dotnet-new;templates;auth0</PackageTags>

    <TargetFramework>netcoreapp3.1</TargetFramework>
    
    <IncludeContentInPack>true</IncludeContentInPack>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <ContentTargetFolders>content</ContentTargetFolders>
    <NoWarn>$(NoWarn);NU5128</NoWarn>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="templates\**\*" Exclude="templates\**\bin\**;templates\**\obj\**" />
    <Compile Remove="**\*" />
  </ItemGroup>

</Project>

ご覧のとおり、これはC#プロジェクトファイルです。ただし、コードをコンパイルしてアセンブリを生成するための設定が含まれているのではなく、NuGetパッケージを生成するための設定が含まれています。

ファイルのセクションには、パッケージのタイプ、タイトル、作成者など、パッケージを定義するいくつかの設定があります。特に、この設定はパッケージを識別し、すぐにわかるように、マシン上でパッケージを管理するために使用されます。この設定により、NuGetリポジトリでパッケージを分類するためのいくつかのタグを定義できます。<PropertyGroup><PackageId><PackageTags>

このセクションでは、考慮すべきファイル()とそれらに対して実行するアクション()について説明します。<ItemGroup><Content><Compile>

この設定では、フォルダーの下にあるすべてのファイルを含める必要があり、生成されたファイルをすべて除外する必要があることを指定しています。この設定により、実際にはコンパイルが防止されます。<Content>templates<Compile>

この例で作成しているパッケージにはプロジェクトテンプレートが1つだけ含まれていますが、テンプレートパッケージには1つのファイルに複数のテンプレートを含めることができます。

次に、ファイルの同じフォルダーで、次のコマンドを実行してNuGetパッケージを作成します。TemplatePack.csproj

dotnet pack

このコマンドは、フォルダー内に名前が付けられたパッケージを生成します。これは、公開する場合に、公式のNuGetリポジトリまたはその他のNuGetリポジトリインスタンスにアップロードする必要があるファイルです。Auth0.Templates.1.0.0.nupkgtemplates-playground/bin/Debug

パッケージをローカルでテストするにauth0webappは、マシンからテンプレートをアンインストールしたことを確認し、フォルダーで次のコマンドを実行します。templates-playground

dotnet new -i ./bin/Debug/Auth0.Templates.1.0.0.nupkg

それ以外の場合、NuGetパッケージをNuGetリポジトリにアップロードした場合は、次のコマンドを使用してインストールできます。

dotnet new -i Auth0.Templates

値はファイルからの設定の値であることに注意してください。インストール方法に関係なく、同じ識別子を使用してマシンからパッケージをアンインストールします。Auth0.Templates<PackageId>TemplatePack.csproj

dotnet new -u Auth0.Templates

テンプレートをVisualStudioで使用できるようにする

.NETCLI用の機能するカスタマイズ可能なプロジェクトテンプレートを作成する手順を完了しました。ただし、プロジェクトテンプレートをVisual Studioでも使用できるようにするには、いくつかの追加の構成手順を適用する必要があります。

テンプレートの可視性について

前に述べたように、でインストールされたテンプレートは、NuGetパッケージとしてインストールされたテンプレートのみを表示するVisualStudioには表示されません。これらのテンプレートをVisualStudioで表示するには、追加の手順を実行する必要があります。dotnet new -i

Windowsでは、[ツール] / [オプション]メニュー項目から[オプション]ダイアログを開きます。そのダイアログで、[環境/プレビュー機能]項目を選択し、次の図に示すように、[新しいプロジェクトにすべての.NETCoreテンプレートを表示する]チェックボックスをオンにします。

Windows上のVisualStudioでCLIテンプレートを有効にする

Visual Studio for Macでは、Visual Studio / [設定... ]メニュー項目から[設定]ダイアログを開く必要があります。そこで、次の図のように、[その他]項目の下の[プレビュー機能]を選択し、[新しいプロジェクトにすべての.NETCoreテンプレートを表示する]チェックボックスをオンにします。

macOのVisualStudioでCLIテンプレートを有効にする

テンプレートの可視性を有効にする方法の詳細については、このドキュメントを確認してください

テンプレートをVisualStudioに適合させる

.NET CLIテンプレートの可視性を有効にすると、VisualStudioでテンプレートを使用できるようになります。ただし、さらにいくつかの調整を行わないと、ユーザーエクスペリエンスは最高になりません。たとえば、テンプレート構成をそのままにしておくと、VisualStudioのプロジェクト作成ダイアログにカスタムパラメーターが表示されなくなります。

このギャップを埋めるには、次のコンテンツを含むファイルをフォルダに追加する必要があります。ide.host.jsontemplates-playground/templates/auth0-webapp/template.config

{
  "$schema": "http://json.schemastore.org/vs-2017.3.host",
  "icon": "auth0.png",
  "symbolInfo": [
    {
      "id": "domain",
      "name": {
        "text": "Auth0 Domain"
      },
      "isVisible": "true"
    },
    {
      "id": "clientId",
      "name": {
        "text": "Auth0 Client Id"
      },
      "isVisible": "true"
    },
    {
      "id": "clientSecret",
      "name": {
        "text": "Auth0 Client Secret"
      },
      "isVisible": "true"
    }
  ]
}

このファイルは、VisualStudioに関連するデータを保持する役割を果たします。ide.host.json

それが基づいているスキーマへの参照に加えて、あなたはiconプロパティに気付くかもしれません。このプロパティを使用すると、テンプレートリストでのテンプレートの外観をカスタマイズできます。提供されていない場合、デフォルトの汎用アイコンがプロジェクトテンプレートに関連付けられます。プロパティの値は、テンプレートアイコンとして使用する.png画像のファイル名です。ファイルはフォルダにあるはずです。.template.config

symbolInfoプロパティは、Visual Studioのコンテキストでカスタムパラメータ情報を統合するアイテムの配列です。特に、idプロパティはファイル内のシンボルアイテムと一致する必要があり、プロパティはそのシンボルに表示するラベルを定義します。最後に、プロパティはカスタムパラメータの可視性を有効にします。プロパティのデフォルト値はであるため、明示的に割り当てる必要があります。template.jsonname.textisVisibleisVisiblefalsetrue

お気づきかもしれませんがFramework、ファイルでパラメータを指定する必要もありません。前述のように、パラメーターは特別なものであり、テンプレートエンジンはそれを自動的に認識します。ide.host.jsonFramework

VisualStudioからテンプレートをテストする

これで、VisualStudioでプロジェクトテンプレートを使用する準備が整いました。いつものように、最初にフォルダに移動し、以前のバージョンのパッケージをアンインストールします。次に、新しいパッケージをビルドし、最後にインストールします。実行する必要のあるコマンドは次のとおりです。templates-playground

cd templates-playground
dotnet new -u Auth0.Templates
dotnet pack
dotnet new -i ./bin/Debug/Auth0.Templates.1.0.0.nupkg

この時点で、Visual Studioを起動し、新しいプロジェクトを作成します。使用可能なテンプレートのリストには、以下に示すように、Auth0 ASP.NET CoreAppテンプレートが含まれている必要があります。

VisualStudioプロジェクトテンプレートリスト

プロジェクトテンプレートを選択すると、カスタムパラメータの入力を求められます。

VisualStudioのカスタムパラメーター

.NETプロジェクトテンプレートを使用する準備が整いました。

概要

このチュートリアルを通して、あなたはたくさんの興味深いことを学びました。

テンプレートのインストールとアンインストールにも使用して、以前よりも広範囲に使用する方法を学びました。標準の.NETプロジェクトを.NETCLIのプロジェクトテンプレートに変換する方法を発見しました。また、カスタムパラメータをサポートしてプロジェクトの作成をカスタマイズする方法についても説明しました。dotnet new

プロジェクトテンプレート用のNuGetパッケージを作成し、それを使用してテンプレートをVisualStudioと共有しました。また、プロジェクトテンプレートの構成を完了してVisualStudioで完全に使用できるようにする方法も学習しました。

リンク: https://auth0.com/blog/create-dotnet-project-template/

#auth0 #dotnet 

What is GEEK

Buddha Community

.NETプロジェクトテンプレートを作成する
坂本  篤司

坂本 篤司

1637570640

.NETプロジェクトテンプレートを作成する

.NETには、さまざまなコンテキストでアプリケーションをすばやくスキャフォールディングするのに役立ついくつかのプロジェクトテンプレートが付属しています。特定のコンテキストで独自のプロジェクトテンプレートを作成する必要がある場合があります。この記事では、.NETCLIおよびVisualStudioで使用する独自のプロジェクトテンプレートを作成する方法について説明します。

テンプレートの操作

テンプレートは開発者の生産性を向上させ、ベストプラクティスの促進に役立つ可能性があります。.NET開発者には、コンソールアプリ、クラスライブラリ、単体テストプロジェクト、ASP.NET Coreアプリなど、新しいプロジェクトを開始したり、既存のプロジェクトに新しいアイテムを追加したりするための多くの組み込みテンプレートがあります。もちろん、あなたは、両方それらを使用することができますのVisual Studioとで.NET CLI。この記事では、プロジェクトテンプレート、つまり特定の機能を備えた新しいプロジェクトを作成できるテンプレートに焦点を当てます。

Visual Studioでは、[新規]メニュー項目を選択するだけでプロジェクトテンプレートリストを探索できますが、.NET CLIでは、コマンドを使用してテンプレートを操作できます。たとえば、次のコマンドを実行すると、マシンで使用可能なテンプレートのリストが表示されます。dotnet new

dotnet new --list

以下は、コンソールに表示されるテンプレートリストの例です。

dotnet new--listによって表示される.NETテンプレートのリスト

したがって、たとえば、新しいコンソールアプリケーションを作成する場合は、上記のリストにあるテンプレートの短い名前を使用するコマンドを実行できます。あなたは見つけることができる公式ドキュメントから始まる内蔵されたテンプレートの説明をdotnet new console

dotnet newNuGetリポジトリまたは独自のマシンから他のテンプレートをインストールおよびアンインストールするなど、他の多くのテンプレート管理タスクでも役立ちます。この記事全体でそれを使用する方法を学びます。

基本的なテンプレートの作成

作成するプロジェクトテンプレートは、認証にAuth0を使用するASP.NETWebアプリケーションテンプレートです。このテンプレートを使用すると、開発者はAuth0対応のスターターWebアプリケーションをすぐに実行できます。

実装するプロジェクトテンプレートには、.NET Core 3.1以降(.NET 5.0)が必要です。また、テンプレートは、バージョン16.8プレビュー以降のVisual Studio2019およびバージョン8.8以降のMac用VisualStudio2019でサポートされています。

作業環境の準備

プロジェクトテンプレートを作成する前に、いくつかのフォルダを作成して作業環境を準備しましょう。まず、ルートフォルダを作成します。次に、このフォルダーに移動して、2つのサブフォルダーを作成します:と。templates-playgroundtemplatestest

このプロセスの最後に、次のフォルダー構造を取得する必要があります。

templates-playground
├── templates
└── test

templatesフォルダは、プロジェクトテンプレートのソースコードが含まれます。そこに複数のテンプレートを配置できます。

このtestフォルダーを使用して、そのプロジェクトテンプレートから新しいプロジェクトを作成します。

プロジェクトテンプレートの設定

.NET Coreプロジェクトテンプレートは、次のもので構成されています。

プロジェクトのソースファイル

という名前の構成ファイル。template.json

この記事の目的上、テンプレートの基礎として機能する.NETプロジェクトを最初から構築することはしません。代わりに、既製のプロジェクトを使用します。

そのため、フォルダーに移動し、次のコマンドを使用してGitHubからプロジェクトのクローンを作成します。templates-playground/templates

cd templates-playground/templates
git clone \
  -b starting-point \
  https://github.com/auth0-blog/auth0-aspnet-webapp-project-template.git \
  auth0-webapp

これらのコマンドは、フォルダーの下にサブフォルダーを作成し、そこにこのGitHubリポジトリのブランチのクローンを作成します。auth0-webapptemplates-playground/templatesstarting-point

前述のように、そのフォルダーにあるプロジェクトは、Auth0認証を使用するASP.NETWebアプリケーションです。このプロジェクトがどのように構築されたかについて詳しく知りたい場合は、「Auth0認証にC#拡張メソッドを使用する」の記事参照してください。

次に、プロジェクトのルートフォルダー()内に名前を付けたサブフォルダーを作成します。次に、この新しく作成されたフォルダーに、次の内容の名前の新しいファイルを追加します。.template.configtemplates-playground/templates/auth0-webapptemplate.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "tags": {
    "language": "C#",
    "type": "project"
  }
}

このファイルは、テンプレートを作成するための重要なアイテムです。これには、.NETプロジェクトをプロジェクトテンプレートに変換するメタ情報が含まれています。上記の例では、最低限必要なプロパティが見つかります。

  • $ schema:現在のJSONファイルのスキーマを定義します。その値はに固定されています。http://json.schemastore.org/template
  • author:このプロパティは、テンプレートの作成者を定義します。
  • 分類:このテンプレートを使用するコンテキストを宣言します。これは、テンプレート自体を分類するのに役立つ文字列の配列です。ユーザーは、これらの文字列に基づいてグループでテンプレートを見つけることができます。
  • アイデンティティ:これはテンプレートの一意の識別子です。
  • name:ユーザーに表示されるテンプレートの名前。
  • shortName:これは、テンプレートから新しいプロジェクトを作成するときに使用するテンプレートの名前です。dotnet new
  • タグ:テンプレートのターゲットを定義する値のセット。この例では、このテンプレートがtypeC#(languageプロパティ)のプロジェクト(プロパティ)用であることを宣言します。

使用可能な構成プロパティの完全なリストについては、このドキュメントを確認してください。

テンプレートのインストール

これまでに実行した簡単な手順で、作業中のプロジェクトテンプレートができました。フォルダ内で次のコマンドを実行して、ローカルにインストールしましょう。templates-playground/templates/auth0-webapp

dotnet new --install .

このコマンドを使用すると、.NETテンプレートエンジンは現在のフォルダ(.)をテンプレートパッケージと見なすことができます。パッケージを作成する方法については、後で学習します。

テンプレートをインストールしたら、を実行します。次の図のように、既存のテンプレートの中に新しくインストールされたテンプレートが表示されます。dotnet new --list

リストされているAuth0.NETテンプレート

素晴らしい!最初の.NETプロジェクトテンプレートを実行する準備ができました。

テンプレートのテスト

プロジェクトテンプレートの動作を確認するには、フォルダーに移動して次のコマンドを実行します。templates-playground/test

dotnet new auth0webapp -o myAuth0WebApp

myAuth0WebAppASP.NETプロジェクトのソースファイルを含むフォルダーを取得する必要があります。

実行の準備ができていることを確認するには、アプリケーションをAuth0に登録し、いくつかのパラメーターを使用して構成する必要があります。この手順により、アプリケーションユーザーはAuth0で認証できます。

これを行うには、Auth0アカウントが必要です。ここから無料でサインアップできます。

次に、Auth0ダッシュボードにアクセスし、[アプリケーション]セクションに移動し、次の手順に従ってアプリケーションをAuth0に登録します。

  1. [アプリケーション作成]ボタンをクリックします
  2. アプリケーションにわかりやすい名前を付け(たとえば、マイWebアプリケーション)、アプリケーションの種類として[通常のWebアプリケーション]を選択します。
  3. 最後に、[作成]ボタンをクリックします

アプリケーションを作成したら、[設定]タブに移動し、Auth0ドメインクライアントID、およびクライアントシークレットをメモします。アプリケーションを構成し、Auth0と通信できるようにするには、これらの値が必要になります。

次に、値を[許可されたコールバックURL]フィールドに割り当て、値を[許可されたログアウトURL]フィールドに割り当てます。最初の値は、ユーザーが認証した後にコールバックするURLをAuth0に指示します。2番目の値は、ユーザーがログアウトした後にリダイレクトするURLをAuth0に指示します。https://localhost:5001/callbackhttps://localhost:5001/

最後に、[変更保存]ボタンをクリックして適用します。

アプリケーションをAuth0に登録した後、ダッシュボードからいくつかのパラメーターを使用してアプリケーションを構成する必要があります。したがって、ASP.NETプロジェクトのルートフォルダーに移動して、ファイルを開きます。その内容は次のようになります。appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Auth0": {
    "Domain": "{DOMAIN}",
    "ClientId": "{CLIENT_ID}",
    "ClientSecret": "{CLIENT_SECRET}"
  }
}

、、およびプレースホルダーをAuth0ダッシュボードの対応する値に置き換えて、ファイルを保存します。{DOMAIN}{CLIENT_ID}{CLIENT_SECRET}

クライアントシークレットをアプリケーションのパスワードと見なします。気をつけて、広めないでください。ここでは、サンプルアプリケーションがサーバー上で実行されることを意図しており、ユーザーがそれにアクセスできないため、クライアントシークレットをファイルに保存しています。appsettings.json

これで、次のコマンドを実行してアプリケーションを起動できます。

dotnet run

アプリケーションが起動したら、ブラウザでhttps:// localhost:5001を指定します。次のページが表示されます。

ASP.NETアプリケーションの実行

ページの右上隅にある[ログイン]リンクをクリックすると、Auth0ユニバーサルログインページにリダイレクトされ、ユーザープロファイルページを認証してアクセスします。つまり、アプリケーションは、すべてのAuth0認証ロジックがすでに統合された状態で実行する準備ができています。

テンプレートへのパラメーターの追加

これまでのところ、作業中のプロジェクトテンプレートがありますが、元のプロジェクトのソースファイルを新しいフォルダーにコピーするだけなので、それほどエキサイティングには見えません。組み込みのテンプレートでできるように、新しいプロジェクトをカスタマイズしたいとします。

幸い、template.json構成ファイルを操作して、テンプレートジェネレーターのデフォルトの動作を変更できます。基本的な原則は、ユーザーがコマンドにオプションを渡すことでオーバーライドできるいくつかの設定を定義できることです。dotnet new <TEMPLATE_SHORT_NAME>

見てみましょう。

カスタムアプリケーション名の割り当て

組み込みのテンプレートでコマンドを使用すると、新しいプロジェクトに割り当てる名前を指定できます。これにより、たとえば、アプリケーションに独自のグローバル名前空間を提供できます。通常、これはオプションを使用して実行できます。次のコマンドを実行するときに、このオプションを以前に使用したことがあります。dotnet new-o

dotnet new auth0webapp -o myAuth0WebApp

ただし、このコマンドmyAuth0WebAppは、新しいプロジェクトを含むフォルダーを作成しました。ソースコードを見ると、グローバル名前空間が変更されていないことがわかります。

テンプレートを一般的な動作に準拠させるには、以下に示すように、構成ファイルにいくつかのプロパティを追加する必要があります。template.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "sourceName": "Auth0.NET.Mvc",
  "preferNameDirectory":true,
  "tags": {
    "language": "C#",
    "type": "project"
  }
}

sourceNameおよびpreferNameDirectoryプロパティを追加しました。

sourceNameプロパティは、アプリケーションのグローバル名前空間でプロジェクトの名前を表します。このプロパティに、現在のアプリケーションの名前空間と一致する値を割り当てました。この値は、ユーザーが提供する場合、ユーザーからの値に置き換えられるプレースホルダーとしても機能します。Auth0.NET.Mvc

このpreferNameDirectoryパラメーターを使用すると、出力フォルダー名をプロジェクト名と一致させることができます。

これは、組み込みのプロジェクトテンプレートと同じ方法でカスタム名を指定することにより、新しいプロジェクトを作成できることを意味します。

変更したテンプレートをテストする前に、次のコマンドを使用してプロジェクトテンプレートをアンインストールします。

dotnet new -u <absolute_path_to_your_local_template>

カスタムパラメータの追加

カスタムパラメータを受け入れるようにプロジェクトテンプレートを構成することもできます。たとえば、Auth0テンプレートのユーザーが、新しいプロジェクトの作成中にAuth0構成パラメーターを提供できるようにすることができます。構成ファイルの内容を次のように置き換えましょう。template.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "sourceName": "Auth0.NET.Mvc",
  "preferNameDirectory":true,
  "tags": {
    "language": "C#",
    "type": "project"
  },
  "symbols":{
    "domain": {
        "type": "parameter",
        "description": "Your Auth0 domain.",
        "defaultValue": "{DOMAIN}",
        "replaces":"{DOMAIN}"
    },
    "clientId": {
        "type": "parameter",
        "description": "Your Auth0 client id.",
        "defaultValue": "{CLIENT_ID}",
        "replaces":"{CLIENT_ID}"
    },
    "clientSecret": {
      "type": "parameter",
      "description": "Your Auth0 client secret.",
      "defaultValue": "{CLIENT_SECRET}",
      "replaces":"{CLIENT_SECRET}"
    }
  }
}

追加したsymbol3つのカスタムパラメータを定義するプロパティを、: 、domain、。clientId clientSecretこれらのパラメーターは、上記で学習したAuth0構成データを表します。

各パラメーターは、次の4つのプロパティで定義されます。

  • type:これはシンボルのタイプを定義します(parameterこの場合はそうです)。
  • description:パラメータに割り当てる値の説明。
  • defaultValue:これは、ユーザーが何も割り当てない場合のパラメーターのデフォルト値です。
  • replaces:このプロパティは、プロジェクトテンプレートのソースコードのプレースホルダーを定義します。テンプレートエンジンはこのプレースホルダーを探し、ユーザーが指定した値に置き換えます。

したがって、これらのパラメータをテストするには、プロジェクトテンプレートの現在インストールされているバージョンをアンインストールし、再インストールしてください。

cd templates-playground/templates/auth0-webapp
dotnet new -u <absolute_path_of_templates-playground/templates/auth0-webapp>
dotnet new -i .

テンプレートをインストールしたら、次のコマンドを実行して、使用可能なパラメーターを確認します。

dotnet new auth0webapp -h

の標準オプションとは別に、次の出力が表示されます。dotnet new

...
Auth0 ASP.NET Core App (C#)
Author: Andrea Chiarelli
Options:
  -d|--domain         Your Auth0 domain.
                      string - Optional
                      Default: {DOMAIN}

  -c|--clientId       Your Auth0 client id.
                      string - Optional
                      Default: {CLIENT_ID}

  -cl|--clientSecret  Your Auth0 client secret.
                      string - Optional
                      Default: {CLIENT_SECRET}

テンプレートで3つのカスタムパラメータを使用できるようにしました。短いバージョンが自動的に割り当てられていることに注意してください。

したがって、フォルダーに移動し、次のコマンドを入力して、この新機能をテストします。templates-playground/test

dotnet new auth0webapp \
    -o mySecureWebApp \
    -d <YOUR-AUTH0-DOMAIN> \
    -c <YOUR-AUTH0-CLIENT-ID> \
    -cl <YOUR-AUTH0-CLIENT-SECRET>

パラメータとして提供された値は、の一致するプレースホルダーを置き換えるため、アプリケーションを実行する準備が整います。appsettings.json

オプションを許可する

一般的な文字列パラメーターに加えて、限られた値のセットに制限されているパラメーターを構成できます。たとえば、ユーザーに新しいプロジェクトのターゲットフレームワークを選択させたい場合は、ファイルの内容を次のように変更する必要があります。template.json

{
  "$schema": "http://json.schemastore.org/template",
  "author": "Andrea Chiarelli",
  "classifications": [ "Web", "MVC", "Razor Pages" ],
  "identity": "Auth0.NET.Mvc",
  "name": "Auth0 ASP.NET Core App",
  "shortName": "auth0webapp",
  "sourceName": "Auth0.NET.Mvc",
  "preferNameDirectory": true,
  "tags": {
    "language": "C#",
    "type": "project"
  },
  "symbols":{
    "domain": {
        "type": "parameter",
        "description": "Your Auth0 domain.",
        "defaultValue": "{DOMAIN}",
        "replaces":"{DOMAIN}"
    },
    "clientId": {
        "type": "parameter",
        "description": "Your Auth0 client id.",
        "defaultValue": "{CLIENT_ID}",
        "replaces":"{CLIENT_ID}"
    },
    "clientSecret": {
      "type": "parameter",
      "description": "Your Auth0 client secret.",
      "defaultValue": "{CLIENT_SECRET}",
      "replaces":"{CLIENT_SECRET}"
    },
    "Framework": {
      "type": "parameter",
      "description": "The target framework for the project.",
      "datatype": "choice",
      "choices": [
        {
            "choice": "netcoreapp3.1",
            "description": "Target .NET Core 3.1"
        },
        {
          "choice": "net5.0",
          "description": "Target .NET 5"
        }
      ],
      "defaultValue": "netcoreapp3.1",
      "replaces": "netcoreapp3.1"
    }
  }
}

新しいパラメータ定義を追加しました:Framework。実際には、これは組み込みパラメーターですが、制限された値を使用してカスタムパラメーターを定義するアプローチも同様に有効です。

パラメータの名前が大文字になっていることに注意してください。これは組み込みパラメーターであるため、この場合を維持する必要があります。そうしないと、VisualStudioでこのテンプレートを使用すると問題が発生する可能性があります。

すでに知っているパラメータのプロパティに加えて、さらに2つあります。

  • datatypechoice値を割り当てることにより、このプロパティは値の制限を有効にします。
  • choices:これは、パラメーターの有効な値の配列です。有効な値(choice)とそのdescription。の2つのプロパティを持つ各アイテム。

上記のFramework定義では、有効な値はとであり、前者がデフォルト値であると記載されています。この特定のケースでは、Frameworkパラメーターの有効な値が公式の.NETターゲットフレームワークと一致する必要があることを考慮してください。netcoreapp3.1net5.0

ここで、たとえば、auth0webappテンプレートから.NET 5.0をターゲットとする新しいプロジェクトを生成する場合は、次のコマンドを実行することでそれを実現できます。

dotnet new -auth0webapp -o MySecureWebApp -f net5.0

このサンプルプロジェクトでは、プロジェクトのコードは.NET3.1と.NET5.0の両方で同じままです。フレームワークによってコードが変更される場合は、プリプロセッサディレクティブを使用し#ifてコードを適合させる必要がある場合があります。

テンプレートのパッキングと公開

これまで、.NETプロジェクトテンプレートを作業フォルダーからインストールするだけで、ローカルでテストしてきました。次に、NuGetパッケージを作成して配布したり、NuGetリポジトリに公開したりする方法を学習します。ちなみに、NuGetパッケージを作成することは、VisualStudioでテンプレートを使用するための前提条件です。

テンプレートのNuGetパッケージの作成は非常に簡単です。開始するには、フォルダに移動します。次に、次の内容で名前が付けられた新しいファイルを追加します。templates-playgroundTemplatePack.csproj

<!-- templates-playground/TemplatePack.csproj -->
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <PackageType>Template</PackageType>
    <PackageVersion>1.0</PackageVersion>
    <PackageId>Auth0.Templates</PackageId>
    <Title>Auth0 Templates</Title>
​    <Authors>Andrea Chiarelli</Authors>
​    <Description>Template for creating an ASP.NET web application with Auth0 authentication.</Description>
​    <PackageTags>dotnet-new;templates;auth0</PackageTags>

    <TargetFramework>netcoreapp3.1</TargetFramework>
    
    <IncludeContentInPack>true</IncludeContentInPack>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <ContentTargetFolders>content</ContentTargetFolders>
    <NoWarn>$(NoWarn);NU5128</NoWarn>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="templates\**\*" Exclude="templates\**\bin\**;templates\**\obj\**" />
    <Compile Remove="**\*" />
  </ItemGroup>

</Project>

ご覧のとおり、これはC#プロジェクトファイルです。ただし、コードをコンパイルしてアセンブリを生成するための設定が含まれているのではなく、NuGetパッケージを生成するための設定が含まれています。

ファイルのセクションには、パッケージのタイプ、タイトル、作成者など、パッケージを定義するいくつかの設定があります。特に、この設定はパッケージを識別し、すぐにわかるように、マシン上でパッケージを管理するために使用されます。この設定により、NuGetリポジトリでパッケージを分類するためのいくつかのタグを定義できます。<PropertyGroup><PackageId><PackageTags>

このセクションでは、考慮すべきファイル()とそれらに対して実行するアクション()について説明します。<ItemGroup><Content><Compile>

この設定では、フォルダーの下にあるすべてのファイルを含める必要があり、生成されたファイルをすべて除外する必要があることを指定しています。この設定により、実際にはコンパイルが防止されます。<Content>templates<Compile>

この例で作成しているパッケージにはプロジェクトテンプレートが1つだけ含まれていますが、テンプレートパッケージには1つのファイルに複数のテンプレートを含めることができます。

次に、ファイルの同じフォルダーで、次のコマンドを実行してNuGetパッケージを作成します。TemplatePack.csproj

dotnet pack

このコマンドは、フォルダー内に名前が付けられたパッケージを生成します。これは、公開する場合に、公式のNuGetリポジトリまたはその他のNuGetリポジトリインスタンスにアップロードする必要があるファイルです。Auth0.Templates.1.0.0.nupkgtemplates-playground/bin/Debug

パッケージをローカルでテストするにauth0webappは、マシンからテンプレートをアンインストールしたことを確認し、フォルダーで次のコマンドを実行します。templates-playground

dotnet new -i ./bin/Debug/Auth0.Templates.1.0.0.nupkg

それ以外の場合、NuGetパッケージをNuGetリポジトリにアップロードした場合は、次のコマンドを使用してインストールできます。

dotnet new -i Auth0.Templates

値はファイルからの設定の値であることに注意してください。インストール方法に関係なく、同じ識別子を使用してマシンからパッケージをアンインストールします。Auth0.Templates<PackageId>TemplatePack.csproj

dotnet new -u Auth0.Templates

テンプレートをVisualStudioで使用できるようにする

.NETCLI用の機能するカスタマイズ可能なプロジェクトテンプレートを作成する手順を完了しました。ただし、プロジェクトテンプレートをVisual Studioでも使用できるようにするには、いくつかの追加の構成手順を適用する必要があります。

テンプレートの可視性について

前に述べたように、でインストールされたテンプレートは、NuGetパッケージとしてインストールされたテンプレートのみを表示するVisualStudioには表示されません。これらのテンプレートをVisualStudioで表示するには、追加の手順を実行する必要があります。dotnet new -i

Windowsでは、[ツール] / [オプション]メニュー項目から[オプション]ダイアログを開きます。そのダイアログで、[環境/プレビュー機能]項目を選択し、次の図に示すように、[新しいプロジェクトにすべての.NETCoreテンプレートを表示する]チェックボックスをオンにします。

Windows上のVisualStudioでCLIテンプレートを有効にする

Visual Studio for Macでは、Visual Studio / [設定... ]メニュー項目から[設定]ダイアログを開く必要があります。そこで、次の図のように、[その他]項目の下の[プレビュー機能]を選択し、[新しいプロジェクトにすべての.NETCoreテンプレートを表示する]チェックボックスをオンにします。

macOのVisualStudioでCLIテンプレートを有効にする

テンプレートの可視性を有効にする方法の詳細については、このドキュメントを確認してください

テンプレートをVisualStudioに適合させる

.NET CLIテンプレートの可視性を有効にすると、VisualStudioでテンプレートを使用できるようになります。ただし、さらにいくつかの調整を行わないと、ユーザーエクスペリエンスは最高になりません。たとえば、テンプレート構成をそのままにしておくと、VisualStudioのプロジェクト作成ダイアログにカスタムパラメーターが表示されなくなります。

このギャップを埋めるには、次のコンテンツを含むファイルをフォルダに追加する必要があります。ide.host.jsontemplates-playground/templates/auth0-webapp/template.config

{
  "$schema": "http://json.schemastore.org/vs-2017.3.host",
  "icon": "auth0.png",
  "symbolInfo": [
    {
      "id": "domain",
      "name": {
        "text": "Auth0 Domain"
      },
      "isVisible": "true"
    },
    {
      "id": "clientId",
      "name": {
        "text": "Auth0 Client Id"
      },
      "isVisible": "true"
    },
    {
      "id": "clientSecret",
      "name": {
        "text": "Auth0 Client Secret"
      },
      "isVisible": "true"
    }
  ]
}

このファイルは、VisualStudioに関連するデータを保持する役割を果たします。ide.host.json

それが基づいているスキーマへの参照に加えて、あなたはiconプロパティに気付くかもしれません。このプロパティを使用すると、テンプレートリストでのテンプレートの外観をカスタマイズできます。提供されていない場合、デフォルトの汎用アイコンがプロジェクトテンプレートに関連付けられます。プロパティの値は、テンプレートアイコンとして使用する.png画像のファイル名です。ファイルはフォルダにあるはずです。.template.config

symbolInfoプロパティは、Visual Studioのコンテキストでカスタムパラメータ情報を統合するアイテムの配列です。特に、idプロパティはファイル内のシンボルアイテムと一致する必要があり、プロパティはそのシンボルに表示するラベルを定義します。最後に、プロパティはカスタムパラメータの可視性を有効にします。プロパティのデフォルト値はであるため、明示的に割り当てる必要があります。template.jsonname.textisVisibleisVisiblefalsetrue

お気づきかもしれませんがFramework、ファイルでパラメータを指定する必要もありません。前述のように、パラメーターは特別なものであり、テンプレートエンジンはそれを自動的に認識します。ide.host.jsonFramework

VisualStudioからテンプレートをテストする

これで、VisualStudioでプロジェクトテンプレートを使用する準備が整いました。いつものように、最初にフォルダに移動し、以前のバージョンのパッケージをアンインストールします。次に、新しいパッケージをビルドし、最後にインストールします。実行する必要のあるコマンドは次のとおりです。templates-playground

cd templates-playground
dotnet new -u Auth0.Templates
dotnet pack
dotnet new -i ./bin/Debug/Auth0.Templates.1.0.0.nupkg

この時点で、Visual Studioを起動し、新しいプロジェクトを作成します。使用可能なテンプレートのリストには、以下に示すように、Auth0 ASP.NET CoreAppテンプレートが含まれている必要があります。

VisualStudioプロジェクトテンプレートリスト

プロジェクトテンプレートを選択すると、カスタムパラメータの入力を求められます。

VisualStudioのカスタムパラメーター

.NETプロジェクトテンプレートを使用する準備が整いました。

概要

このチュートリアルを通して、あなたはたくさんの興味深いことを学びました。

テンプレートのインストールとアンインストールにも使用して、以前よりも広範囲に使用する方法を学びました。標準の.NETプロジェクトを.NETCLIのプロジェクトテンプレートに変換する方法を発見しました。また、カスタムパラメータをサポートしてプロジェクトの作成をカスタマイズする方法についても説明しました。dotnet new

プロジェクトテンプレート用のNuGetパッケージを作成し、それを使用してテンプレートをVisualStudioと共有しました。また、プロジェクトテンプレートの構成を完了してVisualStudioで完全に使用できるようにする方法も学習しました。

リンク: https://auth0.com/blog/create-dotnet-project-template/

#auth0 #dotnet