C# SDK 빠른 시작
이 가이드는 C# SDK를 사용하여 일반적인 작업을 수행하는 빠른 시작을 제공합니다. SDK를 설치하는 방법, 액세스 자격 증명을 구성하는 방법, 최신 업그레이드 정보를 얻는 등의 기본 작업을 학습하게 됩니다.
참고 사항
- C# SDK를 사용하여 요청을 보내려면 Client 인스턴스를 초기화해야 합니다. 이 문서에서는 기본 구성을 로드하여 Client를 생성합니다. 자세한 구성 옵션은 클라이언트 구성을 참조하세요.
전제 조건
- UpgradeLink 계정을 등록했습니다.
- AccessKey 및 AccessSecret을 얻었습니다.
- Windows 애플리케이션 업그레이드 전략을 구성했습니다.
자격 증명 얻기

설치
NuGet을 통한 설치
- Visual Studio에 NuGet이 설치되어 있지 않은 경우 먼저 NuGet을 설치하세요.
- NuGet을 설치한 후
Visual Studio에서 프로젝트를 생성하거나 기존 프로젝트를 열고<Tools>-<NuGet Package Manager>-<Manage NuGet Packages for Solution>을 선택하세요.ToolsetLink.UpgradeLinkApi를 검색하고 결과에서ToolsetLink.UpgradeLinkApi를 찾아 최신 버전을 선택한 후 설치를 클릭하여 프로젝트에 추가하세요.
GitHub를 통한 설치
- git이 설치되어 있지 않은 경우 먼저 git을 설치하세요.
- git clone https://github.com/toolsetlink/upgradelink-api-csharp.git
- 소스 코드를 다운로드한 후 아래의 "프로젝트 통합 방법"에 따라 설치하세요.
프로젝트 통합 방법
- GitHub에서 SDK 패키지 또는 소스 코드를 다운로드하고 소스에서 설치하려면
<Solution>을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서<Add>-><Existing Project>를 클릭하세요.- 나타나는 대화 상자에서
upgradeLinkApiCSharp.csproj파일을 선택하고 열기를 클릭하세요.- 다음으로
<Your Project>-<References>를 마우스 오른쪽 버튼으로 클릭하고<Add Reference>를 선택한 후 나타나는 대화 상자에서<Projects>탭을 선택하고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)
{
// NameInMap 특성의 값을 JSON 필드 이름으로 사용
property.PropertyName = nameInMapAttribute.Name;
}
return property;
}
}
// 사용자 정의 JSON serialization 설정
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("Sending WinUpgrade request...");
// 요청 정보 출력
Console.WriteLine("Request Information:");
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($"Serialized Request Body: {bodyStr}");
Console.WriteLine("Note: The request body above matches the serialization format used in the actual request");
var response = _client.WinUpgrade(request);
Console.WriteLine("Request successful!");
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("Request failed - TeaException Details:");
Console.WriteLine($"Exception Message: {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("Exception Data:");
foreach (var key in ex.Data.Keys)
{
Console.WriteLine($" {key}: {ex.Data[key]}");
}
}
Console.WriteLine($"Stack Trace: {ex.StackTrace}");
}
catch (Exception ex)
{
Console.WriteLine($"Request failed: {ex.Message}");
Console.WriteLine($"Exception Type: {ex.GetType().Name}");
Console.WriteLine($"Stack Trace: {ex.StackTrace}");
}
// Assert: 테스트는 결과를 출력하기만 하므로 항상 통과합니다
Assert.Pass("WinUpgrade request has been sent, results have been printed");
}
}
}