C# SDK クイックスタート
このガイドでは、C# SDK を使用して一般的な操作を実行するためのクイックスタートガイドを提供します。 SDK のインストール方法、アクセス認証情報の設定方法、最新のアップグレード情報の取得などの基本操作を学びます。
注意事項
- C# SDK を使用してリクエストを送信するには、Client インスタンスを初期化する必要があります。この記事では、デフォルト設定を読み込むことで Client を作成します。詳細な設定オプションについては、「クライアントの設定」を参照してください。
前提条件
- UpgradeLink アカウントを登録していること。
- AccessKey と AccessSecret を取得していること。
- Windows アプリケーションのアップグレード戦略を設定していること。
認証情報の取得

インストール
NuGet 経由でのインストール
- Visual Studio に NuGet がインストールされていない場合は、まず NuGet をインストールしてください。
- NuGet をインストールした後、
Visual Studioで新しいプロジェクトを作成するか既存のプロジェクトを開き、<ツール>-<NuGet パッケージマネージャー>-<ソリューションの NuGet パッケージの管理>を選択します。ToolsetLink.UpgradeLinkApiを検索し、結果でToolsetLink.UpgradeLinkApiを見つけて最新バージョンを選択し、インストールをクリックしてプロジェクトに追加します。
GitHub 経由でのインストール
- git がインストールされていない場合は、まず git をインストールしてください。
- git clone https://github.com/toolsetlink/upgradelink-api-csharp.git
- ソースコードをダウンロードした後、以下の「プロジェクト統合方法」に従ってインストールします。
プロジェクト統合方法
- GitHub から SDK パッケージまたはソースコードをダウンロードし、ソースからインストールしたい場合は、
<ソリューション>を右クリックし、コンテキストメニューで<追加>-><既存のプロジェクト>をクリックします。- 表示されるダイアログで、
upgradeLinkApiCSharp.csprojファイルを選択し、開くをクリックします。- 次に、
<あなたのプロジェクト>-<参照>を右クリックし、<参照の追加>を選択し、表示されるダイアログで<プロジェクト>タブを選択し、upgradeLinkApiCSharpプロジェクトにチェックを入れて、OK をクリックします。
クイックスタート
次の例は、Client を初期化して Win アプリケーションの最新のアップグレード情報を取得する方法を示しています。
Win アプリケーションの最新アップグレード情報を取得する
csharp
using System;
using System.Reflection;
using NUnit.Framework;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using ToolsetLink.UpgradeLinkApi;
using ToolsetLink.UpgradeLinkApi.Models;
namespace UpgradeLinkApi.Tests
{
[TestFixture]
public class ClientTests
{
// [NameInMap] 属性を処理するためのカスタム JSON コントラクトリゾルバー
private class NameInMapContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
// NameInMap 属性を見つける
var nameInMapAttribute = member.GetCustomAttribute(typeof(Tea.NameInMapAttribute)) as Tea.NameInMapAttribute;
if (nameInMapAttribute != null)
{
// JSON フィールド名として NameInMap 属性の値を使用する
property.PropertyName = nameInMapAttribute.Name;
}
return property;
}
}
// カスタム JSON シリアル化設定
private static readonly JsonSerializerSettings _jsonSettings = new JsonSerializerSettings
{
ContractResolver = new NameInMapContractResolver(),
NullValueHandling = NullValueHandling.Ignore
};
private Client _client;
private Config _config;
[SetUp]
public void Setup()
{
// テスト用にクライアントを構成する
_config = new Config
{
AccessKey = "mui2W50H1j-OC4xD6PgQag",
AccessSecret = "PEbdHFGC0uO_Pch7XWBQTMsFRxKPQAM2565eP8LJ3gc",
// Protocol = "HTTP",
// Endpoint = "127.0.0.1:8888"
};
_client = new Client(_config);
}
[Test]
public void WinUpgrade_Should_Send_Request_And_Print_Result()
{
// 準備
var request = new WinUpgradeRequest
{
WinKey = "npJi367lttpwmD1goZ1yOQ",
Arch = "x64",
VersionCode = 1,
AppointVersionCode = 0,
DevModelKey = "",
DevKey = ""
};
// 実行
try
{
Console.WriteLine("WinUpgrade リクエストを送信しています...");
// リクエスト情報を出力
Console.WriteLine("リクエスト情報:");
Console.WriteLine($" WinKey: {request.WinKey}");
Console.WriteLine($" Arch: {request.Arch}");
Console.WriteLine($" VersionCode: {request.VersionCode}");
Console.WriteLine($" AppointVersionCode: {request.AppointVersionCode}");
Console.WriteLine($" DevModelKey: {request.DevModelKey}");
Console.WriteLine($" DevKey: {request.DevKey}");
// リクエストボディをシリアル化して出力する(クライアントと同じカスタムコントラクトリゾルバーを使用)
string bodyStr = Newtonsoft.Json.JsonConvert.SerializeObject(request, _jsonSettings);
Console.WriteLine($"シリアル化されたリクエストボディ: {bodyStr}");
Console.WriteLine("注: 上記のリクエストボディは、実際のリクエストで使用されるシリアル化形式と一致します");
var response = _client.WinUpgrade(request);
Console.WriteLine("リクエストが成功しました!");
Console.WriteLine($"response.code: {response.Code}");
Console.WriteLine($"response.msg: {response.Msg}");
Console.WriteLine($"response.traceId: {response.TraceId}");
// レスポンスデータを出力する(クライアントと同じカスタムコントラクトリゾルバーを使用)
if (response.Data != null)
{
Console.WriteLine($"Data: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Data, _jsonSettings)}");
}
}
catch (Tea.TeaException ex)
{
Console.WriteLine("リクエストに失敗しました - TeaException の詳細:");
Console.WriteLine($"例外メッセージ: {ex.Message}");
// TeaException の内部プロパティを取得するためにリフレクションを使用
var properties = ex.GetType().GetProperties();
foreach (var property in properties)
{
try
{
var value = property.GetValue(ex);
Console.WriteLine($"{property.Name}: {value}");
}
catch (Exception)
{
// アクセスできないプロパティをスキップ
}
}
// 例外の Data プロパティを出力
if (ex.Data != null)
{
Console.WriteLine("例外データ:");
foreach (var key in ex.Data.Keys)
{
Console.WriteLine($" {key}: {ex.Data[key]}");
}
}
Console.WriteLine($"スタックトレース: {ex.StackTrace}");
}
catch (Exception ex)
{
Console.WriteLine($"リクエストに失敗しました: {ex.Message}");
Console.WriteLine($"例外タイプ: {ex.GetType().Name}");
Console.WriteLine($"スタックトレース: {ex.StackTrace}");
}
// アサート: 結果を出力することのみに関心があるため、テストは常に合格します
Assert.Pass("WinUpgrade リクエストが送信され、結果が出力されました");
}
}
}