---
code: client_csharp_sdk_installation
name: "C#"
wikiToken: Uicgw2qEcizaeMk7k42cWndNnAe
parentWikiToken: FTcTwinIOi3OiRkK4MPc2Ex7neg
updateTime: 1760333667000
sourceUrl: https://docs-v2.thinkingdata.cn/?version=v5.0&lan=zh-CN&code=client_csharp_sdk_installation
---
# C#

::: tip 提示

 在接入前, 请先阅读接入前准备。

C# SDK 支持在Windows、Mac平台运行。

 :::

**最新版本:** 2.0.1

**更新时间:** 2025-10-13

**资源下载: **SDK源码 下载

::: warning 注意

当前文档适用于 v2.0.0 及以后的版本，历史版本请参考 C# 接入指南（旧）

::: 

### 一、集成SDK

### 1.1 下载SDK

下载在 GitHub 获取C# SDK 源码，将`TDAnalyticsSDK`目录下的文件添加至项目中。

SDK依赖Newtonsoft.Json框架用作json解析，如您是使用`Visual Studio`，请使用`NuGet`加入`Newtonsoft.Json`库。

### 1.2 添加动态库

- 下载dll，然后解压（下载任意一个即可）
- github链接
- 官网链接
- Windows平台，可以找到windowswen文件夹下的dll文件，复制到项目根目录即可。（注意：如果dll和项目已有dll冲突，使用项目已有的即可）
- Mac平台
- 第一步：通过homebrew安装sqlite、curl、zlib 、openssl这4个库
- 第二步：找到macOS文件夹下的dll文件，复制到项目根目录即可
### 二、初始化

引入`ThinkingData.Analytics`，使用ThinkingdataAnalytics类初始化 AE 实例。

```
using ThinkingData.Analytics;
TDAnalytics.Init(APPID,SERVER_URL)
```

参数说明:

- `APPID`: 您的项目的 APPID，可通过在 AE 后台项目管理页面获取
- `SERVER_URL`: 数据上传的 URL
- 如果您对接的是云服务，填入: https://global-receiver-ta.thinkingdata.cn
- 如果您使用私有化部署版本，请为数据采集地址绑定域名，并配置 HTTPS 证书：https://数据采集地址绑定域名
### 三、常用功能

在使用常用功能之前，建议你先了解用户识别规则；SDK默认会生成随机数作为访客ID，并持久化存储访客ID在本地；用户未登录之前，会以访客ID作为身份识别ID。注意:访客 ID 在用户重新安装 App 以及更换设备时将会变更。

#### 3.1 设置账号ID

在用户进行登录时，可调用 `Login` 来设置用户的账号 ID， AE 平台将会以账号 ID 作为身份识别 ID，并且设置的账号 ID 将会在调用 `Logout` 之前一直保留。多次调用 `Login` 将覆盖先前的账号 ID 。

```
TDAnalytics.`Login`("TA");
```

`Login` 可以多次调用，每次调用会判断传入的账号 ID 与先前保存的 ID 是否一致，一致则忽略调用，不一致则会覆盖先前的 ID。

<!-- unsupported block: 34 -->

**该方法不会上传登录事件**

#### 3.2 发送事件

您可以调用 `track` 来上传事件，建议您根据先前梳理的埋点文档来设置事件的属性以及发送信息的条件，此处以用户购买某商品作为范例:

```
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("channel", "ta");//字符串
dic.Add("id", 618834);//数字
dic.Add("isSuccess", true);//布尔
dic.Add("create_date", Convert.ToDateTime("2019-7-8 20:23:22"));//时间
List<string> arr = new List<string>();
arr.Add("value");
dic.Add("arr", arr);//数组
TDAnalytics.Track("product_buy", dic);
```

- 事件的名称是字符串类型，只能以字母开头，可包含数字，字母和下划线 "_"，长度最大为 50 个字符。
- 事件的属性为Dictionary类型
- Key 为该属性的名称，为字符串类型，规定只能以字母开头，包含数字，字母和下划线 "_"，长度最大为 50 个字符，对字母大小写不敏感，AE 会统一转化为小写字母
- Value 为该属性的值，支持字符串、数字、布尔、时间、对象
<!-- unsupported block: 34 -->

**用户属性的要求与事件属性保持一致**

#### 3.3 设置用户属性

对于一般的用户属性，您可以调用 `UserSet`来进行设置，使用该接口上传的属性将会覆盖原有的属性值，如果之前不存在该用户属性，则会新建该用户属性，类型与传入属性的类型一致，此处以设置用户名为例：

```
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TA"}});
```

### 四、最佳实践

以下示例代码包含以上所有操作，我们推荐按照如下步骤使用:

```
using ThinkingData.Analytics;
//初始化SDK
TDAnalytics.Init(APPID,SERVER_URL)
//如果用户已登录，可以设置用户的账号ID作为身份唯一标识
TDAnalytics.Login("TA");
//发送事件
Dictionary<string, Object> dic = new Dictionary<string, object>();
dic.Add("channel", "ta");//字符串
dic.Add("id", 618834);//数字
dic.Add("isSuccess", true);//布尔
dic.Add("create_date", Convert.ToDateTime("2019-7-8 20:23:22"));//时间
List<string> arr = new List<string>();
arr.Add("value");
dic.Add("arr", arr);//数组
TDAnalytics.Track("product_buy", dic);
// 复杂数据对象
Dictionary<string, object> json = new Dictionary<string, object>();
json.Add("key", "value");
dic.Add("object", json);
// 复杂数据对象组
List<Dictionary<string, object>> arr1 = new List<Dictionary<string, object>>();
Dictionary<string, object> json1 = new Dictionary<string, object>();
json1.Add("key", "value");
arr1.Add(json1);
dic.Add("objects", arr1);
//设置用户属性
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TA"}});
```
