Visual Studio 2022 で「appsettings.json」や「JSON ファイル」が見当たらず足止めされる――この症状は、ワークロードや .NET SDK の問題よりも、プロジェクト言語が F# になっていることが主因であるケースが非常に多いです。本稿では“なぜそうなるのか”の仕組みと、最短で復旧するための手順(C# で作り直す/F# のまま応急処置)を、実務で迷わない粒度で整理します。
問題の全体像:Visual Studio に JSON / appsettings テンプレートが出てこない
次のような状況に心当たりがある場合、本記事の手順で解決できます。
- Visual Studio 2022(Community を含む)でプロジェクトを右クリック → [追加] > [新しい項目] を開いても、「JSON ファイル」や「アプリ設定 (appsettings.json)」が候補に出ない。
- ASP.NET & Web 開発ワークロードも、.NET 8 / 9 の個別コンポーネントもインストール済み。
- チュートリアルどおりに appsettings.json を追加したいのに、テンプレートが表示されないため先へ進めない。
結論(最短の答え)
- 原因の多くは「プロジェクト言語が F# になっている」こと。Visual Studio はプロジェクトの言語(C# / F# / VB など)に合わせて「新しい項目」ダイアログのテンプレートを自動フィルタします。F# プロジェクトでは C# 向けの標準項目(appsettings.json など)が非表示になります。
- 最も確実な解決は C# プロジェクトを作り直すこと。C# の Web / クラスライブラリ テンプレートで作成すれば、「JSON ファイル」や「アプリ設定」が確実に出ます。
- F# のまま続ける応急処置としては、「テキスト ファイル」を追加してappsettings.jsonという名前で保存します。必要に応じてビルド出力へコピーする設定を追加します。
この問題が起きる仕組み:テンプレートの言語フィルタ
Visual Studio の「新しい項目」ダイアログは、開いているプロジェクトの能力(言語・SDK・プロジェクトタイプ)に合わせてテンプレートを出し分けます。言い換えると、プロジェクトが F# (.fsproj) であれば F# 領域の項目テンプレートが優先され、C# (.csproj) 向けテンプレートは一覧に出てきません。これが「JSON / appsettings が見えない」の正体です。
| 観点 | F# プロジェクト(.fsproj) | C# プロジェクト(.csproj) |
|---|---|---|
| 新しい項目の既定テンプレート | F# 向け項目中心(C# 向け項目は多くが非表示) | C# 向け項目(JSON ファイル / appsettings.json など)が表示 |
| 学習資料・サンプルとの親和性 | ASP.NET Core の解説は C# 中心のため差異が多い | 公式・コミュニティのサンプルと差異が少ない |
| appsettings.json の自動追加 | テンプレートにより異なる(出ないことがある) | Web テンプレートだと既定で含まれることが多い |
まず確認:いま開いているのは F# プロジェクトか?
- ソリューション エクスプローラーでプロジェクト直下のファイル拡張子を見ます。.fsproj なら F#、.csproj なら C#です。
- プロジェクト名を右クリック → [プロジェクト ファイルの編集]を開き、先頭のファイル名が*.fsprojかどうかを確認します。
- [追加] > [新しい項目]ダイアログで、検索ボックスに
jsonと入力してもヒットが空であれば、F# プロジェクトである可能性が高いです。
正攻法:C# で作り直してテンプレートを復活させる
最も手戻りが少ないのは、C# のプロジェクトテンプレートで新規作成し直す方法です。特に ASP.NET Core のチュートリアルや依存性注入の解説は C# 前提で書かれているため、学習・検証がスムーズになります。
Visual Studio の UI から
- [スタート] > [新しいプロジェクトの作成]を開く。
- テンプレート一覧で 「ASP.NET Core Web アプリ」(C#) もしくは 「ASP.NET Core Web API」(C#)、または 「クラス ライブラリ」(C#) を選択。
- フレームワークは .NET 8 もしくは .NET 9を指定。
- プロジェクト作成後、(Web テンプレートの場合は最初から appsettings.json が含まれることが多いので)[追加] > [新しい項目]を開き、「JSON ファイル」や「アプリ設定」が表示されることを確認。
.NET CLI で一気に作る(好みで)
dotnet new webapi -o MyApi -f net8.0 --language "C#"
cd MyApi
dotnet run
生成直後から appsettings.json と appsettings.Development.json が配置され、最小構成で動作確認できます。
応急処置:F# のまま appsettings.json を使いたい場合
どうしても F# プロジェクトで続ける必要がある場合は、次の要領で最低限の対応を行います。
- プロジェクトを右クリック → [追加] > [新しい項目] → 「テキスト ファイル」を選択し、appsettings.json という名前で保存。
- ソリューション エクスプローラーでそのファイルを選択し、プロパティで次の設定を確認/変更します。
- ビルド アクション:
コンテンツ - 出力ディレクトリにコピー:
新しい場合はコピーする(または常にコピーする)
- ビルド アクション:
- 必要なら .fsproj に明示的に追記します(自動設定が効かない場合)。
<ItemGroup> <Content Include="appsettings*.json" CopyToOutputDirectory="PreserveNewest" /> </ItemGroup> - ホスト ビルダーを使うアプリでは、既定で
appsettings.jsonが読み込まれます。念のため明示する場合は次のようにします(擬似コード)。// C# の例(F# でも Host.CreateApplicationBuilder を使う考え方は同じ) var builder = Host.CreateApplicationBuilder(args); builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); var value = builder.Configuration["MyOptions:ApiKey"];
ただし、学習教材やサンプルコードは C# 前提が圧倒的に多いため、学習・検証段階は C# プロジェクトへ切り替えるほうが迷いにくいのが実務的な結論です。
チェックリスト:それでも見えないときの確認ポイント
| 項目 | 確認方法 | 期待値 / 対処 |
|---|---|---|
| プロジェクト言語 | .csproj / .fsproj の拡張子を確認 | .csprojになっていること。.fsprojなら C# テンプレートは出ない。 |
| ワークロード | Visual Studio インストーラーで「ASP.NET & Web 開発」 | チェック済みであること。外れていたら有効化して再起動。 |
| .NET SDK | ターミナルで dotnet --list-sdks | 想定する .NET 8 / 9 が表示される。 |
| テンプレート検索 | [新しい項目] で json 検索 | 「JSON ファイル」「アプリ設定」がヒットする(C# プロジェクト) |
| テンプレート キャッシュ | 開き直しても変わらない | 必要に応じて再構築(後述) |
テンプレート キャッシュを再構築する(最終手段)
プロジェクト言語を正しても挙動が変わらない場合、Visual Studio のテンプレート キャッシュを再構築します。Developer Command Prompt for VS 2022 を管理者で開き、次を実行します。
"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe" /installvstemplates
エディションが Professional / Enterprise の場合は Community の部分を読み替えてください。改善しない場合は、Visual Studio インストーラーの修復も選択肢です。
補足:C# プロジェクトでの appsettings.json 活用テンプレート
環境別ファイルの基本
appsettings.json… 既定値(共通)appsettings.Development.json… 開発時に上書きappsettings.Production.json… 本番で上書き
ASP.NET Core では ASPNETCORE_ENVIRONMENT の値(Development / Staging / Production など)に応じて読み込み順が決まります。
最小 API のサンプル(.NET 8 以降)
using Microsoft.Extensions.Options;
var builder = WebApplication.CreateBuilder(args);
// 既定で appsettings.json / appsettings.{Environment}.json は追加済み。
// 追記で構いませんが、初期状態のままでも OK。
builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
// 強く型付けしたオプションをバインド
builder.Services.Configure(
builder.Configuration.GetSection("MyOptions"));
var app = builder.Build();
app.MapGet("/ping", () => "ok");
app.MapGet("/opt", (IOptions opts) => Results.Json(opts.Value));
app.Run();
public sealed class MyOptions
{
public string ApiKey { get; set; } = string.Empty;
public int TimeoutSec { get; set; } = 30;
}
appsettings.json の例
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"MyOptions": {
"ApiKey": "dev-xxxx",
"TimeoutSec": 15
}
}
クラス ライブラリでの扱い
クラス ライブラリ(C#)には既定で appsettings.json は含まれません。ホスト側(Web/コンソール)で読み込み、必要なセクションをライブラリのオプションクラスに渡すのが定石です。どうしてもライブラリ単体で JSON を同梱するなら、次のように コンテンツ + 出力コピー を指定します。
<ItemGroup>
<Content Include="appsettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
ユーザー シークレットを併用(開発で鍵を置かない)
API キーなど秘匿情報は appsettings.json に書かず、ユーザー シークレットを使うのが安全です。
dotnet user-secrets init
dotnet user-secrets set "MyOptions:ApiKey" "dev-secret-key"
ケーススタディ:よくあるつまずきと対策
ケース1:新規 Web プロジェクトを作ったのに appsettings.json が無い
「空のプロジェクト」やミニマルなテンプレートを選ぶと、初期ファイルが最少構成で生成されることがあります。[追加] > [新しい項目] から 「アプリ設定」または 「JSON ファイル」を追加してください。
ケース2:検索窓で「json」と打ってもヒットしない
ダイアログ上部のフィルタが「F#」や特定のカテゴリに絞られていると項目が隠れます。「すべての言語」または「C#」に切り替えるか、根本的に C# プロジェクトを開き直してください。
ケース3:.NET SDK を入れ替えたら出なくなった
SDK の更新直後はテンプレート キャッシュが古い場合があります。Visual Studio を再起動しても変わらなければ、前述の /installvstemplates で再構築を試みます。
実務で迷わない判断フロー
| 状況 | 推奨アクション | メリット | リスク/コスト |
|---|---|---|---|
| 学習・検証用途(チュートリアルに沿いたい) | C# プロジェクトで作り直す | サンプルとの乖離が少ない/情報量が多い | 既存コードの移行が必要 |
| 既に F# 資産があり短期での確認が目的 | テキストとして appsettings.json を追加 | 最小コストで JSON を利用可能 | 教材との表記差が混乱を生みやすい |
| どちらでもないがテンプレートが出ない | テンプレート キャッシュ再構築 | 環境依存の不整合を解消 | 管理者権限や多少の時間が必要 |
確認のためのコマンド集
# SDK 一覧
dotnet --list-sdks
# ランタイム一覧
dotnet --list-runtimes
# テンプレート一覧
dotnet new --list
# C# Web API テンプレートを .NET 9 で作る例
dotnet new webapi -o MyApi -f net9.0 --language "C#"
トラブルを未然に防ぐ小さなコツ
- プロジェクト作成時に「言語: C#」を明示してからテンプレートを選ぶ。
- ソリューション内で C# と F# を混在させる場合、JSON を追加する対象プロジェクトが C# かどうかを毎回確認する。
- 新規学習や PoC は Web API (C#) テンプレートから始めると迷いが少ない。
まとめ
Visual Studio で「appsettings.json / JSON ファイルが出てこない」問題は、プロジェクトが F# になっていることが原因であることが多く、C# プロジェクトで作り直せば解消します。F# のままでもテキストとして追加すれば機能上は使えますが、チュートリアルや解説資料の大半が C# 前提であるため、学習・検証は C# へ切り替えるのが最短ルートです。また、環境に依存するトラブルはテンプレートキャッシュの再構築やワークロードの再確認で解決できます。ここまでの手順を順番に実施すれば、JSON / appsettings テンプレートを再び問題なく利用でき、ASP.NET Core の学習や実装を滞りなく進められます。

コメント