kkamegawa's weblog

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

Git Credential Managerの最新版を取得する

私はGit Credential Manager Core(GCM)をdotnet global tool使ってインストールしているのですが、nugetサイトが一向に更新されなくて困ってました。どうも署名を付けたパッケージをnugetへ発行できない状態のままずるずると引きずっています。

github.com

何が困るかといえば、現在nuget.orgに公開されているGCM 2.4.1って .NET 7に依存していて、.NET 7ランタイムを別途OSに追加しなくてはいけません(self-containedじゃない)。現時点では .NET 7はEOLなのでちょっと困る。

ということで、めんどくさいですが

dotnet tool uninstall -g  git-credential-manager

まず消します。

$latestRelease = Invoke-WebRequest https://github.com/git-ecosystem/git-credential-manager/releases/latest -Headers @{"Accept"="application/json"} -UseBasicParsing
$json = $latestRelease.content | ConvertFrom-Json
$latestVersion = $json.tag_name

$outputFolder = [environment]::GetFolderPath('UserProfile') | Join-Path -ChildPath 'Downloads' | Join-Path -ChildPath 'gcm'
new-item -ItemType Directory -Path $outputFolder -Force
$outputPath = Join-Path $outputFolder -ChildPath 'gcm-credential-manager.nupkg'

$gcmversion = $latestVersion.substring(1)
$url = "https://github.com/git-ecosystem/git-credential-manager/releases/download/v$gcmversion/git-credential-manager.$gcmversion.nupkg"
Invoke-WebRequest $url -OutFile $outputPath -UseBasicParsing

その時点のGit Credential Managerの最新版をダウンロードします。

dotnet tool install -g --add-source $outputFolder git-credential-manager
remove-item $outputFolder -force

最新版をローカルソースからインストールして、削除します。こんなことしなくてもnuget.orgからインストールできるようになりますように。

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の中身もしばしば変わっています。

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

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