NuGet パッケージの見え方

はじめに

2025/12/02 現在
NuGet パッケージ (.nupkg)の登録・公開をしましたが、実際どのような表示で公開されているのか
nuget.org と Visual Studio での表示を解説します。

Nugetパッケージの作成 - kttFox’s diary
Nugetパッケージの公開 - kttFox’s diary
上記のページと一緒にどうぞ。
NuGet パッケージ (.nupkg) での設定名称は青色で表記します。
nuget.org での設定名称は緑色で表記します。

nuget.org

オレンジ色で囲った場所が設定に影響される主な項目です。

パッケージ名

NuGet パッケージ (.nupkg)の パッケージID

バージョン

NuGet パッケージ (.nupkg)の パッケージバージョン
現在選択中のバージョンです。
デフォルトでは最新のバージョンページが表示されます。
Versions タブより選択できます。

メインタブ

README

次の順で存在している情報を表示します。

  1. NuGet パッケージ (.nupkg)の READMEファイル
  2. nuget.orgで設定した Readme情報
  3. NuGet パッケージ (.nupkg)の 説明

nuget.orgの情報は即座に反映されます。

Frameworks

対応しているターゲットフレームワークが表示されます。

Dependencies

対応しているターゲットフレームワーク依存関係を表示します。
他のNugetパッケージを利用している場合には、その依存関係が表示されます。

Used By

このパッケージを利用している他のNuGetパッケージやGitHubリポジトリを表示します。
nuget.orgが自動的に収集してくれます。

Versions

現在公開している パッケージバージョン の一覧を表示します。
バージョンを選択するとそのバージョンのページが表示され、そのバージョンのREADME、Frameworksなどを確認できます。

Release Notes

NuGet パッケージ (.nupkg)の リリースノート
設定していない場合は表示されません。

サイドバー

Project website

NuGet パッケージ (.nupkg)の プロジェクトのURL
設定していない場合は表示されません。

Source repository

NuGet パッケージ (.nupkg)の リポジトリURL
設定していない場合は表示されません。

License Info(画像では MIT license)

NuGet パッケージ (.nupkg)の パッケージライセンス
設定していない場合は表示されません。
SPDXライセンス式埋め込みファイル で表示方法が変わります。

nuget.orgで設定した Sponsorship Links
設定していない場合は表示されません。

Sponsorship Links はここにしか表示されません。。。

タグ

NuGet パッケージ (.nupkg)の タグ
設定していない場合は表示されません。

著作権

NuGet パッケージ (.nupkg)の 著作権
設定していない場合は表示されません。

Visual Studio

参照(パッケージ検索)とインストール済みでは少し違いますが、ほとんど一緒なので参照タブで説明します。


一覧(左側)

名称

NuGet パッケージ (.nupkg)の パッケージID

作成者

NuGet パッケージ (.nupkg)の 作成者

バージョン

NuGet パッケージ (.nupkg)の パッケージバージョン
最新のバージョン もしくは 現在インストール済みバージョンが表示されます。

パッケージ説明

NuGet パッケージ (.nupkg)の 説明
2行目まで表示されます。

選択パッケージ(右側)

名称

NuGet パッケージ (.nupkg)の パッケージID

バージョン

NuGet パッケージ (.nupkg)の パッケージバージョン
nuget.orgの DeprecationListing で設定したバージョンの表示

----- ここより下は選択しているバージョンの情報が表示されます。 -----

README

NuGet パッケージ (.nupkg)の READMEファイル
READMEファイル が存在しない場合、「README がありません」という内容が表示されます。

ここではnuget.orgで設定したREADMEは表示されません。

パッケージの詳細

説明

NuGet パッケージ (.nupkg)の 説明

バージョン

NuGet パッケージ (.nupkg)の パッケージバージョン

所有者

nuget.org アカウントの名前
nuget.orgのアカウントページへのリンクが付きます。
インストール済みタブでは非表示

作成者

NuGet パッケージ (.nupkg)の 作成者

ライセンス

NuGet パッケージ (.nupkg)の ライセンス

ダウンロード

選択しているNuGet パッケージ (.nupkg)の全バージョン合計のダウンロード数
最新バージョン以外を選択している場合は非表示

公開日

NuGet パッケージ (.nupkg)を nuget.org に登録した日付

プロジェクトURL

NuGet パッケージ (.nupkg)の プロジェクトURL

タグ

NuGet パッケージ (.nupkg)の タグ

依存関係

NuGet パッケージ (.nupkg)の 依存関係



以上です。
よければ参考にしてNuGet パッケージ (.nupkg)を作成してください。

NuGet パッケージの公開

はじめに

2025/12/02 現在
いよいよNuGet パッケージ (.nupkg)の公開です。
公開自体は簡単です、作ったNuGet パッケージ (.nupkg)をアップロードするだけ!

NuGet パッケージ (.nupkg)の公開

一度アップロードして登録したものは削除できないので気をつけましょう。
(非表示は可能)

nuget.org の Upload からファイルを選択します

アップロードするとすぐに中身を解析してくれて内容を表示してくれます。
 READMEファイルが無いので警告されています。(特に問題ありません)
 他にもパッケージ情報に変なところがあると警告してくれます。
 画像が大きくなっちゃったので オリジナルサイズはこちら

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kttFox/20251204/20251204175434.png

Package Visibility
Package Visibility
 □ List package in search results

チェックを外しておいても良いかもしれません。
外しておくとパッケージを非表示で登録できます。(後から変更可能)

Import Documentation

READMEファイルがあればそちらが優先されます。

READMEファイルをつけていない場合、nuget.orgで表示するドキュメントを設定できます。
Nugetパッケージのバージョン毎に設定でき、いつでも変更可能です。

マークダウンドキュメント(*.md)
Custom : ここで入力
Url:ファイルのURLで指定する
File:ファイルを添付する

なので READMEファイル は設定しない方が良いかも

登録

あとは Submit を押すだけ!
おめでとうございます。NuGet パッケージ (.nupkg)を登録できました!

公開には少し時間がかかります(10分ぐらい)
検証とインデックス作成が終わるとアイコンも表示され公開状態になります。


登録したパッケージの管理

なんとも質素な管理ページです。

Owners

所有者の管理です。
複数人の所有者も可能です。

Deprecation

選択バージョンのパッケージを廃止(非推奨)にします。(非表示にはなりません)

Listing

選択バージョンの表示・非表示を切り替えます。
すべてのバージョンを非表示にするとパッケージ自体を非表示にすることができます。
非表示にしてもパッケージ名と正確なバージョン番号を指定することでコマンドからインストールできてしまいす。

Readme

選択バージョンのnuget.orgで表示されるREADMEを変更できます。
登録時と同じです。

NuGet パッケージ (.nupkg)内に READMEファイル が存在する場合はそちらが優先されるので変更できません。

nuget.orgのページにスポンサーリンクを表示することができます。
特定のプラットフォームしか対応していません。


以上です。
後からどんな設定ができるか分かるとアップロードしやすいのではないでしょうか。
みなさんもNuGet パッケージ (.nupkg)を公開しましょう!

NuGet パッケージ (.nupkg)のバージョンアップ

同じパッケージIDでバージョンを変更してアップロードします。
存在しないバージョンであれば古くても大丈夫でした。(あまり意味はありませんが)

パッケージの内容を間違えてしまった場合でも上書きはできません。
すでに存在しているとして怒られてしまいます。

最後に

この記事用にNugetTest****としてアップロードしたら1日で50~100ぐらいのダウンロードがありました。
新しいもの好きの人が多いようで驚きです。
名前が悪かったかな・・・?
(現在は非公開にしています)

続く => NuGetパッケージの見え方(nuget.org, Visual Studio) - kttFox’s diary

NuGet パッケージの作成

はじめに

2025/12/02 現在
NuGet アカウントを作成したらNuGet パッケージ (.nupkg)をアップロードするためにパッケージを作成しましょう。

まずはNuGet パッケージ (.nupkg)を作成します。
Visual Studio 2026、Project Sdk形式 で作成しています。

タグでNuGet パッケージ (.nupkg)の内容表示で使用される項目を表記します。
nuget.org Visual Studio


ターゲットフレームワーク

nuget.org Visual Studio


まずはターゲットフレームワークです。
ライブラリの対応しているフレームワークを記述するだけですが、

2025/12/02 現在の全部をターゲットにするおすすめは以下になります。

net462
netstandard2.0
netstandard2.1
net8.0
net9.0
net10.0

.NET Framework は net462 と netstandard2.0 で対応
.NET系は netstandard2.1 で対応
新しい.NET系 はそれぞれ個別にnet8.0 net9.0 net10.0 と記述します。

.NET ライブラリのクロス プラットフォーム ターゲット - .NET | Microsoft Learn
わざわざ net462 を入れるのは以下の理由があるようです。

.NET Framework から .NET Standard 2.0 を使用する場合、.NET Framework 4.7.2 で対処されたいくつかの問題があります。
.NET Framework 4.6.2~4.7.1 をまだ使用している開発者向けの体験を改善するには、.NET Framework 4.6.2 用にビルドされたバイナリを提供してください。

net8.0 net9.0 net10.0 と個別なのは、それぞれのパフォーマンス改善が目的のようです。

パフォーマンス改善が目的なら全て対応すれば良いと思うのですが、
ターゲットフレームワーク毎にDLLファイルが生成されるためNugetパッケージの容量が増える問題が出てきます。
また、.NETのサポート的にもいい塩梅なところが上記のおすすめになります。
.NET および .NET Core の公式サポート ポリシー | .NET

Microsoftが公開しているNuGet パッケージ (.nupkg)もこの構成になっています。
NuGet Gallery | Microsoft.Extensions.DependencyInjection 10.0.0

依存関係(他のNuGet パッケージを利用)

nuget.org Visual Studio
.NETのライブラリ作者ができるだけ破壊的変更が無いように作ってくれているのであまりありませんが、
他のNuGet パッケージ (.nupkg)を利用している場合は依存関係のバージョン管理を確認しておきましょう。
特定のバージョンで破壊的変更があるなど、最小バージョン や 最大バージョン を指定することが必要になる場合があります。

Notation Applied rule Description
1.0 x ≥ 1.0 最小バージョン (両端を含む)
[1.0,) x ≥ 1.0 最小バージョン (両端を含む)
(1.0,) x > 1.0 最小バージョン(排他的)
[1.0] x == 1.0 正確なバージョンの一致
(,1.0] x ≤ 1.0 最大バージョン (両端を含む)
(,1.0) x < 1.0 最大バージョン(排他的)
[1.0,2.0] 1.0 ≤ x ≤ 2.0 正確な範囲 (両端を含む)
(1.0,2.0) 1.0 < x < 2.0 正確な範囲、排他的
[1.0,2.0) 1.0 ≤ x < 2.0 包括的な最小バージョンと排他的な最大バージョンの混在
(1.0) 不正な 不正な

NuGetパッケージのバージョン依存関係の解決ルール #C# - Qiita
NuGet パッケージ バージョン リファレンス | Microsoft Learn


NuGet パッケージ (.nupkg)の作成

この後 nuget.org に公開すると削除はできなくなります。(非公開は可能)
特に パッケージID は他の人も使えなくなってしまうので慎重につけてください。


プロジェクトの設定で「ビルド時に NuGet パッケージを生成」にチェックを入れます。
これだけで .nupkgファイルが生成されます。

以降はNuGet パッケージ (.nupkg)の説明を記述していきます。

パッケージID

nuget.org Visual Studio
nuget.org で重複しない名前を設定します。
ここで設定した名前がパッケージ名として表示されます。

タイトル

デフォルトで良いです。

パッケージバージョン

nuget.org Visual Studio
初期値として $(VersionPrefix) が設定されており、UI上では変更できないようです。
バージョンは DLL パッケージ と統一したいので、後からVersionPrefixを直接書き換えます。

気にしない方は、自分で入力してもOKです。

表記自体は メジャー.マイナー.パッチ の3つです。
-rc や beta の表記もできるようです詳しくは下のURLから

1.0.1
6.11.1231
4.3.1-rc
2.2.44-beta.1

NuGet Package Version Reference | Microsoft Learn

作成者

nuget.org Visual Studio
nuget.org アカウント名と同じものを入れておくと良いでしょう。

会社

デフォルトで良いです。



製品

デフォルトで良いです。

説明

nuget.org Visual Studio
パッケージの説明です。
テキストで記述します。改行可能です。
Visual Studio の NuGet パッケージ検索時やインストール済みの一覧では2行目まで表示されます。

著作権

nuget.org Visual Studio
自分の著作物だと主張しておきましょう。

プロジェクトのURL

nuget.org Visual Studio
パッケージのホームページです。
[Project website] としてリンクが表示されます。

ぜひ設定しておきましょう。

アイコン

nuget.org Visual Studio
プロジェクトのアイコンです。

README

nuget.org Visual Studio
マークダウン(.md)ファイルを設定します。
NuGet パッケージ (.nupkg)に内包されます。

Visual Studio上では表示されなくなりますが、
nuget.org にアップロード後に同等の機能があるので、ここでは設定しないほうがいいかもしれません。

リポジトリURL

nuget.org
Githubなど、ソースコードがある場合に設定します。
nuget.org に [Source repository] としてリンクが表示されます。



リポジトリの種類

基本的にGitだと思うので、空欄で良いでしょう。

タグ

nuget.org Visual Studio
パッケージを検索するときに使用されます。
説明では「セミコロンで区切って並べたリスト」となっていますが、
カンマスペース(, )でも大丈夫でした。

リリースノート

nuget.org
テキストで改行可能です。
記述しておくと nuget.org で [Release Notes] のページで表示されます。
未設定だと [Release Notes] の選択タブが消えるので、未設定で問題なさそうです。

.NETツールとしてパック

dotonet tool コマンでインストールできるようにしたい場合はチェックを入れます。
今回は .NETツール の説明はしません。

パッケージ出力パス

NuGet パッケージ (.nupkg)ファイルが出力される場所です。



アセンブリバージョン
ファイルバージョン

パッケージの説明とは関係ないのでそのままでOK

パッケージライセンス

nuget.org Visual Studio
なし、SPDXライセンス式、埋め込みファイル から選択できます。
好きなライセンスを選択してください。

シンボルパッケージを生成する

今回は説明しないのでデフォルトのままで。

$(VersionPrefix)

最後に $(VersionPrefix) を変更します。
現在UI上では変更できなさそうなので、直接 プロジェクトファイル(.csproj) を編集します。

VersionPrefix の項目がなければ追加してください。

ビルド

ここまで設定ができたらビルドするだけです。
パッケージ出力パスの場所に.nupkgファイルが出力されます。


続く => Nugetパッケージの公開 - kttFox’s diary

nuget.org アカウントの作成

はじめに

2025/12/02 現在
nuget.org アカウントの作成がちょっと難しかったのでメモ
nuget.org アカウントは NuGet パッケージ (.nupkg) を公開するときに使用するアカウントです。

個々のアカウント - NuGet.org | Microsoft Learn
このURLの通りなのですが、

nuget.org アカウント

nuget.org アカウントを作成するためにMicrosoftアカウントが必要なので、先にMicrosoftアカウントを作成しましょう。
MicrosoftアカウントがGithubでログインがあったりしますが、この後のユーザー名の入力が表示されずGithubのユーザー名になってしまします。(ハマりました)
素直にMicrosoftアカウントを取って使用したほうが良さそうです。

無事にMicrosoftアカウントのサインインができたらユーザー名の入力になります。
Nugetアカウントのユーザー名は、後から変更不可で唯一の名前の必要があります。
(他のユーザーと重複不可)

メールアドレスはMicrosoftアカウントのものが自動的に入っていますね。

Register ボタンを押せば登録完了です。


アカウント設定


メールアドレス と ログイン用 Microsoftアカウント は後から変更可能です。



アイコンなのですが、gravatar.com に登録されている同じメールアドレスのアイコンを取得して使用します。
なので別途gravatar.comアカウントも同じメールアドレス作成してください。
gravatar.comアカウントを作成したら1時間ほどで反映されました。

nuget.orgのサイトで設定できるようにして!と要望もあるのですが、対応はしてもらえなさそうです。
Enable users to change profile pictures/avatars on NuGet.org · Issue #4992 · NuGet/NuGetGallery · GitHub



以上です。

ユーザ名の変更はできないので最初にしっかり決めましょう。
サポートにメールで依頼すると変更可能ですが、英語でのやり取りになります。

続く=> Nugetパッケージの作成 - kttFox’s diary

[WPF] デザイナー用データをStaticで定義する

C# - Qiita Advent Calendar 2025 - Qiita に参加しています。
4日目の記事です。

WPFつかってますか?!
Visual Studioではデザインビューといって、WPF の画面を 視覚的に作成・調整するためのビューがあります。
UIのレイアウトだけではなく、サンプルデータも表示させることができる優れモノです。

このサンプルデータですが、みなさんデザイン時のデータはどうしているでしょうか?
DataContext を定義して設定していますか?

DataContext を直接設定したり、

<Window xmlns:local="clr-namespace:WpfApp1">
    <Window.DataContext>
        <local:ViewModel/>
    </Window.DataContext>
</Window>

デザイン属性を使うことができます。

<Window xmlns:local="clr-namespace:WpfApp1"
			xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
			xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

			d:DataContext="{d:DesignInstance local:ViewModel}"
			d:DataContext="{d:DesignInstance {x:Type local:ViewModel}}"
			d:DataContext="{d:DesignInstance {x:Type local:ViewModel},IsDesignTimeCreatable=True}" 
/>

このデザイン属性で、自分の好きな値のデータを表示したいですよね!

なんと d:DataContext に Static のインスタンスを渡すことができるんです。
書き方も簡単です。

<Window xmlns:r="clr-namespace:WpfApp1.Resources"
			d:DataContext="{x:Static r:design.MainWindowViewModel}" />

なので、適当なStaticプロパティを作って d:DataContext に渡してあげればOKです。


サンプルのためにこんな画面を用意しました。
渡した ViewModel のプロフィールデータを表示する画面です。
サンプルデータが無いと、何もなくて分かりづらいです。

<Window x:Class="WpfApp1.MainWindow"
		xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
		xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
		xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
		Title="{Binding Title}"
		SizeToContent="WidthAndHeight"
		SnapsToDevicePixels="True"
		mc:Ignorable="d">

	<Grid Margin="10">
		<Grid.RowDefinitions>
			<RowDefinition Height="Auto" />
			<RowDefinition Height="*" />
		</Grid.RowDefinitions>

		<Grid Margin="10">
			<Grid.RowDefinitions>
				<RowDefinition Height="Auto" />
				<RowDefinition Height="Auto" />
				<RowDefinition Height="*" />
			</Grid.RowDefinitions>

			<TextBlock FontSize="20"
					   FontWeight="Bold"
					   Text="プロフィール" />
			<Border Grid.Row="1"
					Width="180"
					Height="180"
					HorizontalAlignment="Center"
					BorderBrush="Gray"
					BorderThickness="1">
				<Image Source="{Binding Image}" />
			</Border>

			<Grid Grid.Row="2"
				  Margin="0,0,0,20"
				  HorizontalAlignment="Center"
				  VerticalAlignment="Top"
				  TextElement.FontSize="16">
				<Grid.ColumnDefinitions>
					<ColumnDefinition Width="Auto" />
					<ColumnDefinition Width="*" />
				</Grid.ColumnDefinitions>

				<StackPanel Width="250"
							HorizontalAlignment="Left">
					<TextBlock Margin="0,0,0,3"
							   Text="名前" />
					<TextBox Text="{Binding Name}" />

					<TextBlock Margin="0,10,0,3"
							   Text="URL" />
					<TextBox Text="{Binding URL}" />

					<TextBlock Margin="0,10,0,3"
							   Text="自己紹介" />
					<TextBox Height="80"
							 AcceptsReturn="True"
							 HorizontalScrollBarVisibility="Disabled"
							 Text="{Binding Description}"
							 TextWrapping="Wrap"
							 VerticalScrollBarVisibility="Visible" />
				</StackPanel>

				<Grid Grid.Column="1"
					  Margin="20,18,0,0">
					<Grid.RowDefinitions>
						<RowDefinition Height="Auto" />
						<RowDefinition Height="1*" />
					</Grid.RowDefinitions>

					<TextBlock Margin="0,0,0,3"
							   Text="タグ" />
					<ListBox Grid.Row="1"
							 Width="200"
							 ItemsSource="{Binding Items}" />
				</Grid>
			</Grid>
		</Grid>

		<Button Grid.Row="1"
				Width="80"
				Height="30"
				HorizontalAlignment="Right"
				VerticalAlignment="Bottom"
				Content="OK" />
	</Grid>
</Window>

ViewModel の定義はこんな感じに

using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace WpfApp1; 

public class MainWindowViewModel : ViewModel {
	public string? Title { get; set => SetProperty( ref field, value ); }

	public string? Image { get; set => SetProperty( ref field, value ); }

	public string? URL { get; set => SetProperty( ref field, value ); }

	public string? Name { get; set => SetProperty( ref field, value ); }

	public string? Description { get; set => SetProperty( ref field, value ); }

	public List<string>? Items { get; set => SetProperty( ref field, value ); }
}

public class ViewModel : INotifyPropertyChanged {
	public event PropertyChangedEventHandler? PropertyChanged;

	protected bool SetProperty<T>( ref T field, T newValue, [CallerMemberName] string? propertyName = null ) {
		if( !Equals( field, newValue ) ) {
			field = newValue;
			PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
			return true;
		}

		return false;
	}
}

ここにデザイン用データを作成します。
適当に design クラスにしました。
リリース時に残っていると恥ずかしいので #if DEBUG で囲っておきます。
※クラス定義後に一度Visual Studioでビルドをかけること

namespace WpfApp1.Resources;  // Resources に作成しています

#if DEBUG // DEBUG時だけ有効
public static class design { // クラス名はわかれば何でも良い
	public static MainWindowViewModel MainWindowViewModel { get; } = new() {
		Title = "プロフィール",

		Image = "Resources/kttFoxIcon.png",
		URL = "https://kttfox.hatenablog.jp/",
		Name = "kttFox",
		Description = "C#大好き\nWindowsアプリケーション(WPF)をよく作っています!",
		Items = [
			"C#",
			".NET",
			"Visual Studio",
			"WPF",
			"Windows Forms"
		]
	};
}
#endif

d:DataContext を設定します。
WpfApp1.Resources の名前空間にクラスを作ったので、こちらも追加。

<Window x:Class="WpfApp1.MainWindow"
		xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
		xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
		xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
		xmlns:r="clr-namespace:WpfApp1.Resources"
		Title="{Binding Title}"
		Width="564"
		Height="536"
		d:DataContext="{x:Static r:design.MainWindowViewModel}"
		SnapsToDevicePixels="True"
		mc:Ignorable="d">


画像ファイルも表示できて、好きなサンプルデータで表示できました。

みなさんもデザイン表示を見ながら画面設計してください!

この記事のソースコード
https://github.com/kttFox/Qiita_AdventCalendar2025

Visual Studio 2026 の名称 -「プログラムから開く」編

Visual Studio 2026 をインストールするとプログラム名はなんとVisual Studioになります。
プログラムの説明にもVS2026はバージョンの表記がありません。

VS2022のプロパティ

VS2026のプロパティ

スタートメニューなんかはショートカットなので自分で名前を変更するだけですが、
右クリックメニューの「プログラムから開く」は変更することができません。

分かりづらいぞ。。。


色々探しましたがキャッシュのレジストリしか見つかりませんでした。
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache

devenv.exe の FriendlyAppName の定義をキャッシュしているようで、この値を書き換えることで変更することができました。

一度実行すればいいと思うので、PowerShell を置いておきます。
Community / Professional / Enterprise すべて書き換え(多分あってる?)
# MuiCache パス
$MuiCachePath = "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache"

# エディションごとの FriendlyAppName を設定する配列
$VSPaths = @(
    "C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\devenv.exe.FriendlyAppName",
    "C:\Program Files\Microsoft Visual Studio\18\Professional\Common7\IDE\devenv.exe.FriendlyAppName",
    "C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\devenv.exe.FriendlyAppName"
)

$FriendlyName = "Microsoft Visual Studio 2026"

# それぞれのパスに対して MuiCache を書き換える
foreach ($path in $VSPaths) {
    Set-ItemProperty -Path $MuiCachePath -Name $path -Value $FriendlyName
}

表示名称の変更ができました!


今までは 2022 の表記 だったのに、今回のバージョンから 18 の表記でいろいろな場所で見づらい!

.NET Upgrade Assistant が使えなくなりました

Visual Studio 2022の拡張機能で古いプロジェクト形式(MSBuild プロジェクト形式)から新しい形式(Project Sdk形式)に簡単に変更できるものがあったのですが、Visual Studio 2022 v17.14.16 から使用できなくなってしまいました。
ソリューションエクスプローラーから簡単にできたのに残念です。

.NET Upgrade Assistant
.NET Upgrade Assistant - Visual Studio Marketplace
.NET Upgrade Assistant not compatible with VS Pro 2022 (17.14.16) · Issue #1652 · dotnet/upgrade-assistant · GitHub

今後はCopilotチャットボットでやってね!ってことみたい。。。
GitHub Copilot アプリの最新化の概要 | Microsoft Learn

 
 
コマンドライン ツールからはまだ使えるみたいなので、最悪これ使うかー
kttfox.hatenablog.jp


2025/11/20 追記
ぎりぎり生きているみたい

Project Sdk形式のビルドイベント

MSBuild プロジェクト形式から新しいProject Sdk形式にした場合に、ビルドイベントについてはコンバートされないようです。

MSBuild プロジェクト形式のときは以下のような形でした。

<Project>
<PropertyGroup>
 <PreBuildEvent>
 ビルド前イベント
 </PreBuildEvent>

 <PostBuildEvent>
 ビルド後イベント
 </PostBuildEvent>
</PropertyGroup>
</Project>

Project Sdk形式では以下のような形になります。

<Project>
  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="ビルド前イベント" />
  </Target>
  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="ビルド後イベント" />
  </Target>
</Project>

ダブルクォーテーション”(")や改行( )はHTMLエンティティに変換されて記述されます。
.csprojを直接変更するのは到底無理でしょう・・・

問題点

Project Sdk形式では実行されるのですが、$(ProjectDir)のようなマクロが空欄の状態で実行されてしまいます。

プロジェクト形式を変換したあとは気をつけましょう。

追記 2025/02/26

それぞれの形式が混ざるとマクロが空欄になるようです。
<PreBuildEvent> <PostBuildEvent> の状態であれば問題ありませんでした。

以下のような形で混ざってしまうとだめでした。

<PropertyGroup>
  <PreBuildEvent>
  ビルド前イベント
  </PreBuildEvent>
</PropertyGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
  <Exec Command="ビルド後イベント" />
</Target>

Project Sdk形式にして新しくなったプロジェクト デザイナーでマクロを編集するとこの問題が発生するので気をつけましょう

[WPF] 特定のXamlがデザイナーで開いてくれない問題

とりあえず殴り書き、

MSBuild プロジェクト形式から新しいProject Sdk形式にした場合、特定のXaml(Window)がデザイナーモードで表示されずにXmlエディターとして開いてしまう事がありました。

結論としては
.vs フォルダを削除したら直りました!

[VS2022] 現在のドキュメントの変更履歴をクリア

Visual Studioで編集していると、ファイルの変更履歴として黄色や緑のバーが表示されます。
この変更履歴をリセットする方法が意外にも用意されていません。

一応方法としては、
ファイルを開き直す、変更履歴の設定をON/OFFする

探していたらVisualCommanderでこの機能のコマンドが公開されていました。
How to reset track changes in Visual Studio? - Stack Overflow

Visual Commander - Visual Studio Marketplace
https://vlasovstudio.com/visual-commander/commands.html#ClearChanges

ただ、古いバージョンでしか動かないコードだったので、
VS2022で動作するように修正しました。

using EnvDTE80;
using System;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;

public class C  :VisualCommanderExt.ICommand {
	public void Run( DTE2 DTE, Package package ) {
		serviceProvider = package;
		Reload( DTE.ActiveDocument.FullName );
	}
	private void Reload( string file ) {
		ThreadHelper.ThrowIfNotOnUIThread();

		var rdt = (IVsRunningDocumentTable)serviceProvider.GetService( typeof( SVsRunningDocumentTable ) );
		IVsHierarchy h;
		uint id;
		IntPtr data;
		uint cookie;
		ErrorHandler.ThrowOnFailure( rdt.FindAndLockDocument(
			(uint)_VSRDTFLAGS.RDT_NoLock,
			file,
			out h,
			out id,
			out data,
			out cookie ) );
		try {
			var persistDocData = (IVsPersistDocData)Marshal.GetObjectForIUnknown( data );
			{
				int dirty;
				ErrorHandler.ThrowOnFailure( persistDocData.IsDocDataDirty( out dirty ) );
				if( dirty != 0 )
					return;
			}
			ErrorHandler.ThrowOnFailure( persistDocData.ReloadDocData( (uint)_VSRELOADDOCDATA.RDD_RemoveUndoStack ) );
		} finally {
			Marshal.Release( data );
		}
	}
	private IServiceProvider serviceProvider;
}


追加するコマンドの [References..] に1つ追加します。

Microsoft.VisualStudio.Shell.Framework

こんな感じ


以上です。


最新のVS2022だと変更記録の表示がGitの履歴になってしまうから使うかな?

[Git] コミットのAuthorDateとCommitDateを合わせる方法

git rebase をすると CommitDate が今の時間に変更されます。
AuthorDateと同一にしたい場合は --committer-date-is-author-date オプションを使用します。

git rebase HEAD~10 --committer-date-is-author-date

git - インタラクティブリベースしたコミットのタイムスタンプを戻す #Git - Qiita
Git のコミットのタイムスタンプには author date と committer date の 2 種類があるという話 - ひだまりソケットは壊れない
コミットのAuthorDateとCommitDateを合わせる方法 | 全国個人事業主支援協会

[.NET] 出力フォルダにターゲットフレームワークのフォルダを作らない

プロジェクト ファイルの形式がProject SDKに変更されたことで、
出力フォルダにターゲットフレームワークのフォルダが作成されるようになりました。

 <Project Sdk="Microsoft.NET.Sdk">

複数のターゲットフレームワークの場合は有効ですが、一つの場合はフォルダが深くなるだけで正直必要ありません。
この機能を無効化するプロパティを設定しましょう。

<PropertyGroup>
  <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>

これで今まで通りbin\debug\フォルダに出力されるようになります。

Project SDK形式になってから直接編集する設定が多いのでどうにかしてほしいところ。。。
 
 
ビルド出力ディレクトリを変更する - Visual Studio (Windows) | Microsoft Learn
Microsoft.NET.Sdk の MSBuild プロパティ - .NET | Microsoft Learn
[.NET5] 出力フォルダの中に「net5.0-windows」フォルダができないようにする #.NET5 - Qiita

PowerPoint ストーリーボードのアドイン

Visual Studio をインストールするとPowrPointのアドイン(ストーリーボード)も追加されて便利な図形が使用できました。
作成するアプリケーションのイメージ図を作るときに重宝します。

Visual Studio 2015ではPowerPoint用ストーリーボード・アドオンが下位エディションでも使える - きよくらの備忘録

残念ながらVS2019からはこのアドインは廃止されたようです。
使用するためにはVS2015、VS2017のどちらかのインストールでアドインが含まれています。


そもそもがTeam Foundation Serverに含まれているようで、
2019年にAzure DevOps Server にブランドを変更したときにサポートを終了したようです。
Connect Azure Boards to an Office client to track your work - Azure Boards | Microsoft Learn
Storyboard your ideas with Microsoft PowerPoint - TFS | Microsoft Learn

なので、古いVisual Studioをインストールしたくない場合は、Team Foundation Server Office Integration 2015、2017でも大丈夫です。
MSアカウントがあるならmy.visualstudio.comからダウンロードできます。
https://my.visualstudio.com/Downloads?q=Team%20Foundation%20Server

.NET6、.NET7のインテリセンス(IntelliSense)やツールチップを日本語の表記にする

.NET5 まで

.NETからインテリセンスの表示が英語のみになってしまいました。
.NET Core 3.0、.NET Core 3.1、.NET 5まではローカライズされたファイルを配置すれば日本語化できます。
https://learn.microsoft.com/ja-jp/dotnet/core/install/localized-intellisenselearn.microsoft.com

dotnet.microsoft.com

ただし、.NET 6.0からはローカライズされたファイルの配布が無くなってしまいました。



.NET6以降

探していたら中国の方がいいツールを作られていました。
github.com
Githubでは中国語のファイルしか配布されていませんが、自分でビルドすることで指定した言語のファイルを作成することができるようです。
オンラインドキュメントからインテリセンスのファイルを作成するみたいで、すごく時間がかかりますが自分で作成して使いましょう!

使うオプションの説明

ContentCompareType (デフォルトはOriginFirst)
-cc, --content-compare

OriginFirst 英語原文と翻訳後の順で表記します
LocaleFirst 翻訳後と英語原文の順で表記します
None 翻訳後の説明のみ表記します

使い方

1. dotnet ツールとしてインストール
dotnet tool install -g islocalizer
2. 日本語のインテリセンスファイルを作成

net7.0 のファイルを作ります。
日本語 英語の順で表示するようにオプションを付けました。

islocalizer build -m net7.0 -cc LocaleFirst

以下のような感じで処理が進みます。

[10:10:10 I] Start generate. PackName: null, Moniker: net7.0, Locale: ja-jp, ContentCompareType: LocaleFirst.
[10:10:10 I] Processing pack [Microsoft.AspNetCore.App.Ref:net7.0]. Progress 1/3.
[10:10:10 I] Progress PackRef[1/3]->File[1/132]. Processing [Microsoft.AspNetCore.App.Ref:7.0.13:Microsoft.AspNetCore.Antiforgery] now.
[10:10:10 I] Progress PackRef[1/3]->File[2/132]. Processing [Microsoft.AspNetCore.App.Ref:7.0.13:Microsoft.AspNetCore.Authentication.Abstractions] now.
[10:10:10 I] Progress PackRef[1/3]->File[3/132]. Processing [Microsoft.AspNetCore.App.Ref:7.0.13:Microsoft.AspNetCore.Authentication.Cookies] now.
[10:10:10 I] Progress PackRef[1/3]->File[4/132]. Processing [Microsoft.AspNetCore.App.Ref:7.0.13:Microsoft.AspNetCore.Authentication.Core] now.
[10:10:10 I] Progress PackRef[1/3]->File[5/132]. Processing [Microsoft.AspNetCore.App.Ref:7.0.13:Microsoft.AspNetCore.Authentication.OAuth] now.
[10:10:10 I] Progress PackRef[1/3]->File[6/132]. Processing [Microsoft.AspNetCore.App.Ref:7.0.13:Microsoft.AspNetCore.Authentication] now.
・・・(略)

オンラインドキュメントをダウンロードして生成しているので、全部で1時間ぐらいはかかります。
--parallel-count オプションを付けて並列処理数を増やせば早くなるかも?
あまり多すぎるとMicrosoftへのアクセスが遮断されちゃうぞ!

2回目からはキャッシュされているのでちょっとマシになる。

処理が終わるとzipファイルが生成されます。

[10:20:09 W] localization pack is saved at C:\Users\********\AppData\Local\Temp\IntelliSenseLocalizer\output\net7.0@ja-jp@None.zip.

ここのパスは覚えておきましょう。

3. 生成したインテリセンスのファイルをインストール
islocalizer install C:\Users\********\AppData\Local\Temp\IntelliSenseLocalizer\output\net7.0@ja-jp@None.zip

既定の場所にファイルを配置してくれます。

いくつかのテキストがうまく取得できていなかったので、修正プルリクしてみました

Fixed some text that was not retrieved from the Japanese online doc. by kttFox · Pull Request #7 · stratosblue/IntelliSenseLocalizer · GitHub