rksoftware

Visual Studio とか C# とかが好きです

Visual Studio の 16.3.2 がリリースされました

Visual Studio のアップデート 16.3.2 がリリースされました。

記事が遅れてしまいましたが、リリースされていました。.NET Core 3.0 に夢中で遅れてしまいましたが見てみましょう。

■ 更新内容

問題の解決

  • Xcode 11 サポートの問題が対策されました。

今回私は偶然 Xamarin やってなかったので踏みませんでしたが、Xamarin やってるときはバージョンアップ様子見してしまいますよね。
とりあえずアップデートです。

■ 更新方法

Visual Studio の更新はメニューの ツール > ツールと機能を取得 で開くインストーラーから行えます。

秋葉原 C# もくもく会 #103 勉強会を開催しました

■ C# もくもく会

C# もくもく会 #103 を開催しました。

C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。 定期開催していますので、お時間のある時に遊びに来ていただければと思います。
ちょっと詰まった時、ネット上で聞くのははずかしいなぁ、という課題のできた時などにも思い出していただけると嬉しいです。
f:id:rksoftware:20191005095831j:plain

■ 今週の成果発表

今週は、読書の日でした。良いエンジニアリングは基礎力から!

  • C# 8 のドキュメント読んだりなどしました
  • C# の絵本60ページくらい読みました
  • .NET Conf の動画見てました
  • Visual Studio Code の本読んでました
  • C# の本 38 ページよみました

会場のコワーキングスペースで作られたインスタグラムに関する神サービスにユーザーが増え、インスタグラムの聖地になりつつあります。
ちなみにこの勉強会ですが、実は公序良俗に反しなければどのような技術を扱っても大丈夫です。そもそも C# エンジニアが C# だけしか使わないというわけではありませんし。

■初心者歓迎

このもくもく会には、入門者の方も多くご参加いただいています。 突然 C# やらなければならなくなって途方に暮れている方、何となく C# をやってきたけど改めて見直してみたい方なども大歓迎です。
入門セミナー代わりでのご参加も歓迎です。プログラミング入門者の方も是非遊びに来てください。

特に C# で課題をお持ちでなくても是非遊びに来てください。

■ 目指す勉強会スタイル

世界一敷居の低い勉強会を目指しています。

何か聞きたいことがある場合は、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

何か共有したい情報を見つけた場合も、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

そんなスタイルでやっています。

■ 次回予定

次回は 2019/10/10 に開催予定です。

C# に関心のある方、是非遊びに来てください。

C# 8.0 の新機能を確認する (目次?)

.NET Core 3.0 はいくつもの注目機能がありますが、その中でも 4 番目くらいに (私が) 注目したいのが C# 8.0 です。
特に、Null 許容参照型と switch 式は多言語の同等機能を本当にうらやましく思っていたので、直ぐに使っていきたいと思っています。

ということで、素早く実践投入して行きたいので C# 8.0 の機能を確認して行きましょう。

■ ドキュメント

まずは https://docs.microsoft.com/ を確認です。https://docs.microsoft.com/ は日本語と英語の両方を確認し、日本語が最新まで追いついていれば日本語を、そうでなければ英語も参照しながら確認するのがおススメです。

実は C# や Visual Studio 関連であれば機械翻訳サービスに投げても比較的品質のいい日本語が得られます。それを参考にしつつ英語サイトを見るのもいい判断だと思います。

英語サイト

日本語サイト

■ 新機能名(目次?)

順に機能を確認して行きますが、その目次として機能名を上記サイトから持ってきて一覧しておきます。
確認するたび、リンクをしていきます。

確認し終わって全部リンクできました!

.NET Core 3.0 単一ファイルの実行可能ファイルの実行時のアセンブリ

.NET Core 3.0 の新機能で 単一ファイルの実行可能ファイル というものがあります。PublishSingleFile という方がなじむ方もいるかもしれません。

■ PublishSingleFile

簡単に言うと、 .dll なんかを一つの .exe ファイルに固めて発行する機能です。配布時にファイル一つだけをコピーするだけで配置できます。私も期待しています。

■ アセンブリの扱いは変わってしまうの?

そこで気になるのが、これまで複数アセンブリ (.dll) で構成されることを前提に書いていたコードはどうなるのか? ですよね。
結論から言うとあまり変わりません。ただし、Assembly.Location と CurrentDirectory は気にする必要はあります。

次の記事はプレビューの頃に PublishSingleFile の実行時にどうなるか試した記事です。

簡単にまとめると、実行時にアセンブリ (.dll) が Temp に展開されて、展開されたアセンブリが使われます。

■ 改めて試してみる (結論)

リリース版で改めて試してみます。まずは結論から。

次のコードで、実行時にどうなっているか確認してみます。プロジェクトは C:\TestProject に作ったものとしています。

using System;

namespace TestProject
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"CurrentDirectory       : {Environment.CurrentDirectory}");
            Console.WriteLine($"CommandLine            : {Environment.CommandLine}");
            Console.WriteLine($"EntryAssembly.FullName : {System.Reflection.Assembly.GetEntryAssembly().FullName}");
            Console.WriteLine($"Assembly.FullName      : {typeof(Program).Assembly.FullName}");
            Console.WriteLine($"EntryAssembly.Location : {System.Reflection.Assembly.GetEntryAssembly().Location}");
            Console.WriteLine($"Assembly.Location      : {typeof(Program).Assembly.Location}");

            Console.ReadKey();
        }
    }
}

実行結果

CurrentDirectory       : C:\TestProject
CommandLine            : C:\Users\{ユーザ名}\AppData\Local\Temp\.net\TestProject\{ランダムな文字列}\TestProject.dll
EntryAssembly.FullName : TestProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Assembly.FullName      : TestProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
EntryAssembly.Location : C:\Users\{ユーザ名}\AppData\Local\Temp\.net\TestProject\{ランダムな文字列}\TestProject.dll
Assembly.Location      : C:\Users\{ユーザ名}\AppData\Local\Temp\.net\TestProject\{ランダムな文字列}\TestProject.dll

アセンブリが Temp に展開されてい使われているのが分かります。

■ 確認手順

今回、基本はコマンドラインで操作します。IDE を使ってもいいのですが、コマンドの方が書きやすいので。

プロジェクトの新規作成

console がコンソールアプリプ色ジェクトを作ることを指定しています。

> dotnet new console --name TestProject

コードを書く

using System;

namespace TestProject
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"CurrentDirectory       : {Environment.CurrentDirectory}");
            Console.WriteLine($"CommandLine            : {Environment.CommandLine}");
            Console.WriteLine($"EntryAssembly.FullName : {System.Reflection.Assembly.GetEntryAssembly().FullName}");
            Console.WriteLine($"Assembly.FullName      : {typeof(Program).Assembly.FullName}");
            Console.WriteLine($"EntryAssembly.Location : {System.Reflection.Assembly.GetEntryAssembly().Location}");
            Console.WriteLine($"Assembly.Location      : {typeof(Program).Assembly.Location}");

            Console.ReadKey();
        }
    }
}

発行する

> dotnet publish -c Release -r win10-x64 /p:PublishSingleFile=true

実行する

> bin\Release\netcoreapp3.0\win10-x64\publish\TestProject.exe

実行結果は前述のとおりです。

各フォルダのファイルを確認

(.pdb) ファイルを含む)

フォルダ ファイル数 サイズ(合計)
1 単一ファイルの発行 .exe と .pdb の 2 ファイル 69,017,600 バイト
2 単一ファイルでない発行 225 個のファイル 69,427,200 バイト
3 Temp のファイル 223 個のファイル 69,255,168 バイト

2 と 3 の違いは次の 2 ファイルです。

  • TestProject.exe
  • TestProject.pdb

■ 注意点

発行しなおすたびに {ランダムな文字列} が変わってどんどん Temp にフォルダとアセンブリが増え続けます。古いバージョンを消してくれたりはしません。Temp なので構わないと言えば構わないのですが。
油断しているとディスク使用量が増えていてちょっとびっくりしたりします。

Visual Studio の 16.3.1 がリリースされました

Visual Studio のアップデート 16.3.1 がリリースされました。

前回、マイナーアップデート(16.2.5)が異例の短期間でのアップデートと書きました。
今回はそれよりも更に短期間の超異例の短期間アップデートです。

■ 更新内容

問題の解決

  • XAML デザイナーが NET Core 3.0 アプリで表示されない問題が対策されました

今回のメジャーアップデートの目玉の一つで、大きく関心を得るているだろう重要な機能の不全の対策です。いかに重視している機能か想像できます。

ちなみに

メジャーアップデート直後になぜか次の記事の PV が増えていて疑問だったのですが、この影響だったのですね。
Windows フォームアプリケーションを扱うなら必須の考え方を書いただけの記事ですし、そもそも XAML (WPF) でもないのですが。

これら記事も PV が増えていましたがこちらはまあ、増えますよねという記事で納得です。

どうにせよ長年待ち続けた .NET Core 3.0 です。楽しんで行きましょう!

■ 更新方法

Visual Studio の更新はメニューの ツール > ツールと機能を取得 で開くインストーラーから行えます。

秋葉原 C# もくもく会 #102 勉強会を開催しました

極まりつつあるインスタ映え

f:id:rksoftware:20190928124655j:plain

■ C# もくもく会

C# もくもく会 #102 を開催しました。

C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。 定期開催していますので、お時間のある時に遊びに来ていただければと思います。
ちょっと詰まった時、ネット上で聞くのははずかしいなぁ、という課題のできた時などにも思い出していただけると嬉しいです。
f:id:rksoftware:20190928124500j:plain

■ 今週の成果発表

今週は、足元固めの日でした。良いエンジニアリングは基礎力から!

  • XAML やってました
  • Microsoft Learn
  • WinForms のチャートコントロール
  • ASP.NET Core の勉強
  • .NET Core アンインストールして 3.0 インストールしました
  • インスタ映えを研究してました

会場のコワーキングスペースでインスタグラムみ関する神サービスが作られたので、インスタグラムを極めつつあります。
ちなみにこの勉強会ですが、実は公序良俗に反しなければどのような技術を扱っても大丈夫です。そもそも C# エンジニアが C# だけしか使わないというわけではありませんし。

■初心者歓迎

このもくもく会には、入門者の方も多くご参加いただいています。 突然 C# やらなければならなくなって途方に暮れている方、何となく C# をやってきたけど改めて見直してみたい方なども大歓迎です。
入門セミナー代わりでのご参加も歓迎です。プログラミング入門者の方も是非遊びに来てください。

特に C# で課題をお持ちでなくても是非遊びに来てください。

■ 目指す勉強会スタイル

世界一敷居の低い勉強会を目指しています。

何か聞きたいことがある場合は、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

何か共有したい情報を見つけた場合も、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

そんなスタイルでやっています。

■ 次回予定

次回は 2019/10/03 に開催予定です。

C# に関心のある方、是非遊びに来てください。

.NET Core をアンインストールする

.NET Core ももう 3.0 がリリースされました。

これまでの長い .NET Core の歴史の中で皆さんのマシンの中に複数のバージョンがインストールされているのではないでしょうか?
私の感覚では特別に .NET Core 頑張って使っていなくても 5 ~ 20 バージョンくらいはインストールされているのではないかと思います。

■ 過去を清算しましょう

私は (マシンがモバイルかつ VM で複数 OS 使っているので) マシンのディスク容量と日々戦っているのでここで一回過去は捨てて .NET Core 3.0 だけインストール使したいと思いたちました。

■ アンインストール方法

公式ドキュメントに載っているとおりです。

Windows の場合

[プログラムの追加と削除] からアンインストールします。バージョンごとにアンインストールふる必要があるので何気に時間がかかりました。
定時退社後の夜の時間では終わらないかもしれません。休日に時間を作るか、残業せず定時に退社して挑みましょう。

mac の場合

sudo rm -rf {インストールディレクトリ} でインストールディレクトリを消します。こちらはそれほど時間がかからないので、気軽に始めましょう。

■ 結果

それぞれの OS で 10 GB 程度空き容量が増えました (VM 使っているので正しくは分からないですが)。素晴らしい。
これでもう一つくらい開発環境を作れそうです。