kkamegawa's weblog

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

Visual Studioの新しいソリューション形式slnx

先日Visual Studio 2022 17.0 Preview 3が公開されました。新しいプレビューが公開されると、プレビュー機能のダイアログ(今はタブになりましたが)を一通り見るのですが、気になる項目が増えていました。

もちろん有効にします(非推奨とか、古い互換性のための機能でない限り原則有効にします😉)。

Visual Studioのソリューションを選択して保存時にslnxが増えています。

読み込むときにも選択肢として増えています。何が違うのでしょう。

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.10.34804.81
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp1", "BlazorApp1\BlazorApp1\BlazorApp1.csproj", "{BFD7AF15-7028-43D2-AC5D-1AD1B7D7C4C7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp1.Client", "BlazorApp1\BlazorApp1.Client\BlazorApp1.Client.csproj", "{82BD4B72-63B3-4C4F-992D-09FF5586C07D}"
EndProject
Global
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {B7807233-0A06-4B9F-B06C-4A4C48D34E24}
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {82BD4B72-63B3-4C4F-992D-09FF5586C07D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {82BD4B72-63B3-4C4F-992D-09FF5586C07D}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {82BD4B72-63B3-4C4F-992D-09FF5586C07D}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {82BD4B72-63B3-4C4F-992D-09FF5586C07D}.Release|Any CPU.Build.0 = Release|Any CPU
        {BFD7AF15-7028-43D2-AC5D-1AD1B7D7C4C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {BFD7AF15-7028-43D2-AC5D-1AD1B7D7C4C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {BFD7AF15-7028-43D2-AC5D-1AD1B7D7C4C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {BFD7AF15-7028-43D2-AC5D-1AD1B7D7C4C7}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
EndGlobal

Blazorのプロジェクトをテンプレートで作っただけのおなじみの(?)sln構成です。これをslnxにするとこうなります。

<Solution>
  <Project Path="BlazorApp1\BlazorApp1.Client\BlazorApp1.Client.csproj" Type="Classic C#" />
  <Project Path="BlazorApp1\BlazorApp1\BlazorApp1.csproj" Type="Classic C#" />
</Solution>

簡単!.NETのプロジェクトがSDKスタイルになった時のようです。前々から「projectのGUIDや構成定義は必要なのか」とか思っていたので、すべてcsprojに行ってくれたのは助かります。ただ、これまだ始まったばかりのようで、関連付けも行われていません。

そして、当然ですが、dotnetコマンドでもサポートされていないようでビルドができません。

devenvコマンドならビルドができます(もちろんPreview版のVisual StudioのDeveloper Command Promptを起動します)。

プレビューを使わないといけないからCIで使えないし、このslnのファイル構成を当てにしている拡張機能やツールもたくさんあるでしょうから、どのくらいでデフォルト有効になるのかちょっとわからないですが、XMLになってパースしやすくなるのと、サイズが劇的に小さくなるのは非常にうれしいですね。Visual Studio 2022 17.10正式版ではサポートになるのかな?楽しみです。

Visual Studio SubscriptionのAzure特典でWindows Client OSとVisual Studio入りイメージを使う

免責事項開始
本件はMicrosoftサポートに問い合わせて得られた結果を書いていますが、ライセンスに関することはAzureサポートにお問い合わせください。
免責事項終了

いつのころからか定かではない(多分DevBoxがリリースされたころ)のですが、Visual Studioサブスクリプション特典のAzureサブスクリプションを使ってVisual Studio入りイメージを使おうとすると上記のエラーが出るようになりました。確実に以前は使えており、数年前にデプロイしたWindows 10 + Visual Studio入りイメージがAzure上にあります。

2023年5-6月ごろだったか、このエラーに初めて遭遇して、「一時的なものだろう」と思っていたのですが、まったく直る気配もなかったので、8月に問い合わせ始めて、ようやく今日回答がもらえました。まとめるとこんな感じ。

  • Visual Studio サブスクリプションの特典Azureサブスクリプションの場合、クレジットカードなどを登録して上限解除しなければVisual Studio入りイメージは使えない(これはサードパーティーオファーなどと同じ)
  • ただし、Azureサポートが試したところ、サードパーティーオファーと異なり、「無料枠から」クレジットが消費され、上限を超えた場合(Enterpriseの場合$200/month)に登録した課金方法への請求が行われる

とのことでした。「以前は大丈夫だったのに」と言って証拠のデプロイ済みVMも見せたのですが、いつ変わったかはサポートでもわからないといわれました。そして、多くの人は個人MSアカウント(outlook.jpなど)を使ってAzureサブスクリプションを使っているかもしれません。Virtual Desktopが出たころからですがこんなチェックが増えています。

一番下のLicensingI confirm I have an eligible Windows 10/11 license with multi-tenant hosting rights.(Windows 10/11のマルチテナントホスティングライセンスを保有しています)という宣言です。知られている通り、Windows 10/11をAzureで使う場合Windows VDAもしくはWindows E3/E5のライセンスが必要です。Visual Studioサブスクリプションにはないのでは?ということはWindows Client OSが使えないのでは?ということになってしまいます。うーん、困った。

これも聞いたところ、「Visual Studioサブスクリプションの場合は使ってもよい(チェックを入れればよい)」のだそうです。根拠はたぶんこちら。

Visual Studio のサブスクライバーは、Microsoft Windows Virtual Desktop サービスで Azure Dev/Test の個人クレジットを使用できるようになりました。

出展:learn.microsoft.com

現実的にAzure Virtual Desktopを使う場合、Entraが必要で、個人MSアカウントでは無理(だよね?)なわけですが、ここでやるということになるのでしょうか。でも、正直これは困るのでこのサブスクリプションをEntraのテナント側に引っ越そうかなと思っています…。

あくまでも本記事は個人のメモなので、Azureサポートにご確認ください(大事なことなので二回目)

AzureのPaaSのローカル開発環境まとめ

という投稿を読んで、昔からAzureというかMicrosoftのツールはローカルでのエミュレータや開発環境が提供されているので気にも留めていなかったのですが、AWSのLocalStackはコンテナーで一式あるので便利ですね。LocalStackで無償で使えるのは一部の機能で有償のProが必要になるケースもあるので、完全に無料でローカル開発ができるわけではないようです。

AzureのPaaSのうちローカルで開発するためのエミュレーターなどをあつめてみました。もともとWeb AppsはIIS(Express)があるし*1、SQL DatabaseもSQL Server (Express)やLocalDbで開発やローカルテストはほぼ問題なかったですし、さらに今はLinux版がありDockerコンテナー内で容易に動くようになりました。

自分の思いつく範囲で書いてみましたが、これは?とかあれば教えてください。

SQL Database

learn.microsoft.com

どの環境でも動かすならDockerが一番簡単です(Windows版SQL ServerのDockerコンテナー提供はなくなりました)。Developer EditionかExpress Editionで使えば無料です。

learn.microsoft.com

www.microsoft.com

Windows版はLocal DbかSQL Server Express, Developer Edtionをローカルインストールするしかないでしょう。Developer Editionの機能はEnterprise相当なので、うっかりStandardで使えない機能を使ってしまったとかないようにしてください。データベースのリストアができなくなります。

(追記)

learn.microsoft.com

現在プレビューですが、SQL Database Emulatorがあると教えてもらいました。知らなかった。ありがとうございます。

Azure CosmosDB

learn.microsoft.com

CosmosDBもエミュレーターがあります。

Azure Functions / Logic Apps

learn.microsoft.com

VS Codeおよび、Visual Studioで使えます。実際はストレージアカウントも必要になることが多いので、次のストレージエミュレータも入れてください。

Azure Storage

learn.microsoft.com

これ単独で使うことはあまりないのですが、Azure PaaSが前提にすることが多いので、入れないといけないことが多いですね。昔のエミュレーターはWindows専用でしたが、今はクロスプラットフォームのエミュレーターに移行しました。Visual Studioをインストールするときには昔のエミュレーターが追加インストールされますね。

API Management

learn.microsoft.com

面白いところではAPI managementもセルフホストゲートウェイがあります。もともとは直接イントラから出せないような要件向きっぽいですが。ただ、これ使ってローカル開発しているという人の話は聞いたことがないです。

IoT Edge

learn.microsoft.com

使ったことはないのですが、こういう感じでローカル開発できるそうです。

Stream Analytics

learn.microsoft.com

同上。使って開発したことはないです…。

Azure Machine Learning

learn.microsoft.com

OpenAIの陰に隠れたような気がしますが、こんな感じで環境作れます。Azureにはサイエンス用ということでこの辺がプリインストールされたVMもあります。

Azure Kubernetes Services

learn.microsoft.com

AKSというか、kubernetesであればmicro k8sとかminikubeとかそもそもローカルで開発するためのものも多く提供されているので、好きなものを選べばいいんじゃないでしょうか。

kubernetes.io

microk8s.io

(おまけ) Dev TonelとBridge to Kubernetes

learn.microsoft.com

まだプレビューのはずですが、直接接続できない環境でもデバッグできるようになります。

learn.microsoft.com

KubernetesをデバッグするときはBridge to Kubernetesを使うといいようですね。

*1:macOSには…IISないですね。

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になったコンポーネントを自動的に削除する設定にしていますが、まだこれは大丈夫なはずなんだけど。