kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

WSL2の .NET SDKが認識されない現象を修復する

WSL2で.NET SDK使ってコンパイルしようとすると「dotnet buildがありません」といわれます。ランタイムはインストールされており、SDKも所定のフォルダー(/usr/share/dotnet/sdk/)にあります。

dotnet buildができない。

SDKはちゃんと所定のフォルダーに入っているが、--list-sdksで出てこない。私はUbuntuのフィードではなく、Microsoftのフィードを使っているのですが、どうもこれがよくないようで、GitHubのissueにも.NET 6時代から割とたくさん登録されています。

learn.microsoft.com

この方法でやっていますが、どうもダメなようです。で、中の人がissueに書いてくれています。

github.com

私はMicrosoftのパッケージフィードを使うのでsenario2です。これをやる前にインストール済みの.NETは完全に消しておきましょう。

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

フィードを登録しなおします。

sudo touch /etc/apt/preferences

preferenceファイルを作成します。そのあとこのファイルを編集して、以下の内容を追記します。

Package: *
Pin: origin "packages.microsoft.com"
Pin-Priority: 1001

これはリポジトリの優先度を設定するファイルなのだそうです。

kwatanabe.hatenablog.jp

これでapt-update & installします。

ちゃんとインストールされました!このPCではあまりWSL2使っていなかったので、インストールできてなかったことも気づいてませんでした。

Visual Studio 2022で .NET 6 Webアプリが作れなかった話

Visual Studio 2022(普段使いはPreviewですがStableでも同じです)で、.NET 6のWeb Appを作ろうとしたんですよ。

作成したプロジェクトを開くとCreateBuilderがエラーになってしまう。

あれ?プレビューだから?と思ってStableでやっても同じ。cliでやってみるかと思ったら、.NET 7入れているからglobal.jsonを設定しないとつかってくれないな、正確なバージョンが必要だったなぁと思って、dotnet --list-sdksで見てみると…あれ?

learn.microsoft.com

….NET 7しか入ってないやんけ。この前まで確かに入れていたような記憶があるのですが、消えたのですかね?仕方ないのでwingetで.NET 6 SDKをインストール。

dotnet newで新規プロジェクトを作るとちゃんと開けました。

※ もちろんVisual Studioで作っても問題ありません。

いつ消えたのかなぁ?Visual Studio更新時にEOLになったコンポーネントを自動的に削除する設定にしていますが、まだこれは大丈夫なはずなんだけど。

Microsoft Developer Day / Nightでお話ししてきました

2/3のお昼にMicrosoft Developer Day、夜にはNightが開催されました。私は厚かましくも(一応夜は「いなければ」ということでお願いしたはずなのですが😅)昼と夜両方お話しさせていただきました。

msdevjp.connpass.com

夜の部のイベント

そして資料です(イベントページにもあります)。昼のイベントに関してはソーシャルアカウントの方から案内があるそうです。資料公開の許可も出しているので、後から入手していただけるはずです。

当日の裏話的な話としては、「質問そんなにこないだろう」と思っていたのですが、あれよあれよとやってきて、10通くらいきたのかな?ちょっと操作を間違ってしまって、publicにするべき回答がprivateのままで皆さんに共有できなかったものもありましたが。セッション終わった後も何通かいただいて、マイグレーションの関心の高さが伺えました。

いつも言っているのですが、「やってみればいい」のです。

  • 最新のOSにVSを入れる
  • ソリューション読み込む
  • ターゲットフレームワークを変更する
  • ビルドしてみる

あとはエラーやdeprecated警告出ているものをドキュメント見ながらやるかやらないか考えるのが早いです。「見積もり作らないといけないから最初にリスト見てチェックしたいんです」とか言っている人が多いのですが、ソースの中身や構造知らない人が机上のチェックだけやっても時間の無駄です。

あと、やる場合、特にGit使って.NET Frameworkから.NET 6にしたいような場合ですが、ブランチではなくfork使って別のレポジトリでやることをお勧めします。SDKスタイルにするタイミングでプロジェクトスタイルやパッケージキャッシュの持ち方が変わるので、ブランチ切り替えてもうまくビルドできなくなります(というかデモの時それでかなり困った)。

松村さんと二人で登壇だったので、分担決めてお互い録画、私が主に編集していました。最初はWCFのCIもあったのですが時間の都合で削りました。40分のセッションなのに90分くらいになって大幅に削らざるを得なくて…。私のところは6回くらい撮り直しています。むちゃくちゃ編集したのですが、もうちょっと繋ぎを上手くできたらなぁと反省。結局30秒くらい足が出ただけですみました。

夜の部は実際に自分で困った話でした。現代のOSはデフォルトで更新するので、「ある日再起動したらWindows 11だった」ということが日常で起きますが、CIもたまにはやっておかないとlatestは定期的に切り替わっていますし、hosted agentの中身もしばしば変わっています。

ずーっと放置ではなくて、デプロイしなくてもビルドは定期的にしましょうというお話しでした。

久しぶりの開発者イベントでしたが、裏に控えていたので、自分のトラック以外は見てないので公開されたら見ようと思います。来場ありがとうございました!

Visual Studio Users Community Japan 勉強会 #6でお話ししました

.NET Confローカルイベントということで、Visual Studio Users Community Japanでお話してきました。今回はMicrosoftでDirector of Development for .NET Platform team, formerly Dev Manager for the Visual Studio C++ and Debugger teams.のSteve Carroll氏が登壇していただけることになり、リモートでお話していただきました。Thank you Steve!

Steve氏は日本語がうまく(少なくとも私の英語よりも)、事前のミーティングでもだいぶ日本語でやってくれて助かりました。DebuggerチームのDev Managerということで、内容割とダダ被り(笑)でちょっと焦りました。

www.slideshare.net

そんなわけで私の発表資料です。Riderもちょっと紹介したのですが、C# 9.0の構文はEAP(早期リリース版)でぼちぼち対応されているそうですね。トップレベルステートメントはこういうサンプルの時に大変重宝するので、早く対応してほしいですね。dotMemoryやdotTraceといった支援ツールもクロスプラットフォーム対応になってくれると助かるけど、どうだろう?

いつもはAzure DevOpsのお話しているわけですが、今回は.NET Core(ともう言わずに単なる.NETですが)時代の障害解析ってどうだろうと改めて調べてみたということになります。ツールそのものはほぼ変わらないですが、dotnet-cliのグローバルツールが新しいですね。クロスプラットフォームで使えるようになったので、最低限のことはできるかなと思います。

なんか二人ほどからダンプ解析のハンズオン依頼されたけど、どうしよう…

(追記)
調べたらサンプルがありました😅。もうちょっと本格的なやつになると厳しいですがツールの使い方ならこれで割とわかるのではないかと思います。

docs.microsoft.com

docs.microsoft.com

docs.microsoft.com