1. はじめに
ネットワークが制限された環境、または完全にオフラインの環境で .NET プロジェクト(本記事では例として Avalonia UI プロジェクト)を開発する際、いくつかの課題に直面する可能性があります。本記事では、IDE のインストール、Avalonia UI テンプレートの構成、プライベート NuGet サービスの展開、NuGet パッケージの作成とアップロードを含む、完全なオフライン開発ソリューションを提供します。
2. IDE インストールガイド
Visual Studio 2022 のインストール
Visual Studio 2022 は Microsoft がリリースした最新の IDE であり、Avalonia UI プロジェクトの開発をサポートしています。以下は詳細なオフラインインストール手順です。
- オフラインインストーラの作成:まず、こちらの VS2022 オフラインインストーラ ガイドに従い、Visual Studio 2022 のオフラインインストーラを作成します。
- Avalonia UI 拡張機能のインストール:Visual Studio をインストールした後、Visual Studio Marketplace から Avalonia for Visual Studio 2022 拡張機能をダウンロードしてインストールします。

- インストール中に失敗が発生する場合があります。

WeChat グループ内の @rabbitism の回答(@daidai_cn の助けに感謝)に従い、拡張ファイルを解凍し、下図で選択されている Extension.vsext ファイルを削除してからインストールします。

正常にインストールされました。

JetBrains Rider のインストール
JetBrains Rider IDE は 2020.3 バージョンから Avalonia XAML を内蔵でサポートしており、Avalonia 固有の XAML 機能やカスタムコード検査をファーストクラスでサポートしています。
オフラインインストーラのダウンロード先:Rider のダウンロード:クロスプラットフォーム .NET IDE (jetbrains.com)
3. Avalonia UI テンプレートのインストール
オンラインインストールについては、Avalonia Docs を参照してください。オフラインインストールは、Avalonia.Templates をクリックしてダウンロードします。

インストール方法は上図の .NET CLI コマンドと同じです。
dotnet new install avalonia.templates.11.0.10.1.nupkg

これで、Visual Studio または JetBrains Rider のどちらでも、Avalonia UI テンプレートを使用して新しいプロジェクトを作成できるようになりました。
VS 2022 での Avalonia UI テンプレート:

Rider でのテンプレート利用:

4. NuGet サービスのプライベートデプロイ
プロジェクトを作成しても、プログラムは正常に動作しません。デフォルトのテンプレートは Avalonia UI のいくつかの NuGet パッケージに依存しており、オンラインでインストールする必要があります。関連ライブラリを社内ネットワークにコピーすることもできますが、一つ一つコピーして参照するのは手間がかかります。
チーム内で NuGet パッケージを共有・管理しやすくするために、プライベート NuGet サービスの展開を検討するとよいでしょう。本記事では、軽量 NuGet サーバーとして BaGet をお勧めします。詳細は BaGet プロジェクト説明 を参照してください。
- .NET Core 3.1 SDK をインストールします(このプログラムがサポートする最新の .NET バージョンです。興味があれば Clone して
.NET 8/9に変更することも可能です。PR にサプライズがあります。ユーザーが PR でアップグレードブランチを提供しています)。 - 最新リリースの圧縮ファイル Releases · loic-sharma/BaGet をダウンロードします。
- サービスを起動します:
dotnet BaGet.dll - ブラウザで
http://localhost:5000を開きます。

OK、これでデプロイ完了です。
5. NuGet パッケージの作成(省略可)
オンラインには多くのチュートリアルがあります。ライブラリのプロジェクトファイルを簡単に構成して、NuGet パッケージの生成を有効にできます。CodeWF.EventBus を参考にしてください。
<Project>
<PropertyGroup>
<Company>https://codewf.com</Company>
<Authors>沙漠尽头的狼</Authors>
<Owners>https://codewf.com</Owners>
<AssemblyVersion>$(Version)</AssemblyVersion>
<FileVersion>$(Version)</FileVersion>
<Version>$(Version)</Version>
<Description>通过 CodeWF.EventBus 提供的 事件总线,我们可以很轻松的实现 CQRS 模式。根据业务需求,我们可以创建并维护读模型,将读操作和写操作进行分离,从而提高应用程序的可扩展性和性能。可在各种模板项目使用:WPF、Winform、AvaloniaUI、ASP.NET Core等。The CodeWF.EventBus allows us to easily implement the CQRS mode. According to business requirements, we can create and maintain a read model to separate read and write operations, thereby improving the scalability and performance of the application. Can be used in various template projects: WPF, Winform, AvaloniaUI, ASP. NET Core, etc.</Description>
<ApplicationIcon>Resources\logo.ico</ApplicationIcon>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Title>$(AssemblyName)</Title>
<Copyright>Copyright © https://codewf.com 2024</Copyright>
<AssemblyName>$(AssemblyName)</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace>
<PackageId>$(AssemblyName)</PackageId>
<PackageTags>C# EventBus; WPF; Winform; AvaloniaUI,ASP.NET Core;</PackageTags>
<PackageIcon>logo.png</PackageIcon>
<PackageProjectUrl>https://github.com/dotnet9/CodeWF.EventBus</PackageProjectUrl>
<RepositoryUrl>https://github.com/dotnet9/CodeWF.EventBus</RepositoryUrl>
</PropertyGroup>
<ItemGroup>
<None Include="Resources\logo.png">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
</Project>
ライブラリプロジェクトをビルドすると、対応する NuGet ファイルが生成されます。公開済みの NuGet パッケージはこちらです:https://www.nuget.org/packages/CodeWF.EventBus
6. NuGet パッケージのアップロード
自分で作成した NuGet パッケージだけでなく、NuGet 公式サイト やサードパーティから取得した NuGet パッケージもアップロードできます。
デプロイした NuGet のホームページ http://localhost:5000 を開きます。

Upload a package をクリックして、NuGet パッケージアップロードコマンドの説明に切り替えます。

.NET CLI を使用して NuGet パッケージをアップロードする例を示します。まず NuGet ファイルを準備します。たとえば、NuGet 公式サイトで検索 して Avalonia UI の基本パッケージをダウンロードします。


ダウンロード後、ダウンロードディレクトリで CMD を開き、以下のコマンドを入力します。
dotnet nuget push -s http://localhost:5000/v3/index.json avalonia.11.1.0-rc1.nupkg

上記のメッセージは、NuGet サービスが API キーを設定していることを示しています。簡単のため、一度 NuGet サービスを停止し、その設定ファイル appsettings.json を開いて ApiKey ノードの値を空にし、再度 NuGet サービスを起動します。

アップロードコマンドを再実行すると、成功しました。

NuGet のホームページでも検索できるようになりました。

7. IDE での NuGet ソースの構成
先ほどの NuGet アップロードページで赤文字で表示されていた URL http://localhost:5000/v3/index.json をコピーし、VS で NuGet 検索アドレスとして構成します。

あとは通常のパッケージインストールと同じです。
豆知識:個人の一時的な開発では、上のソースをローカルの NuGet ディレクトリパスに設定しても構いません。
8. まとめ
本記事では、ローカルネットワーク環境で AvaloniaUI に必要な開発ツールとテンプレートを正常にインストールして構成する方法、プライベート NuGet サービスを展開する方法、チーム内で NuGet パッケージを共有・管理するためのパッケージの作成とアップロード方法を紹介しました。
これらの情報が、お客様の AvaloniaUI プロジェクト開発に役立つことを願っています。その他の質問がございましたら、いつでもお気軽にお問い合わせください。