UiPathのカスタムアクティビティ開発で、外部ライブラリを使用する

[UiPathでJSON文字列をDictionaryで生成する](https://qiita.com/masatomix/items/da8efe3691758ebcafe0) に書いたDictionaryから JSON文字列を作成するTIPSについて、あ、そういうアクティビティを作ったら便利かな、と思って作り始めていますが、

```C#
Newtonsoft.Json.JsonConvert.SerializeObject(jsonDic)
```

コレを呼び出すには プロジェクトがNewtonsoft.Json ライブラリを参照できている必要があります。また成果物のnupkgにもその依存関係を記述しておく必要があります。それらを設定する時の作業メモ。


##作業手順
結論をいうと外部ライブラリの参照は、Visual Studioプロジェクト内でライブラリの依存関係を設定すればOKです。Visual Studioの NuGetパッケージの管理画面で依存関係を設定すれば、そのままnupkgにもその依存関係が反映されるようです。

ということで流れは以下の通り。

- UiPath Studioがライブラリをダウンロードするのに使用するNuGetサーバを、Visual StudioのNuGetパッケージ管理画面で追加
- そこから必要なライブラリ(今回はNewtonsoft.Json) を指定

すればOK。


### 今回のソースコード
修正前ですが、
https://github.com/masatomix/UiPath_Path/tree/0.1.32
にあります。

### UiPath StudioのオフィシャルのNuGetサーバの追加
はじめに、UiPath Studioがライブラリのダウンロードに使用するNuGetサーバを、Visual Studioからも参照できるようにします。

メニューバーの ツール >> NuGetパッケージマネージャ >> パッケージマネージャ設定 を開き、パッケージソースとして、 https://www.myget.org/F/workflow/ を追加します。名前は「UiPathオフィシャル」としました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/6a491a5e-d928-e6f5-e303-2704224e685a.png)


### NuGetサーバからライブラリのダウンロード
メニューバーの ツール >> NuGetパッケージマネージャ >> ソリューションのNuGetパッケージ管理 を開きます。

下記のような検索画面になるので、右上のパッケージソースを「UiPathオフィシャル」、検索ボックスに「Newtonsoft」と入れると、サイトを検索して結果を一覧してくれます。今回は Newtonsoft.Jsonを選択し、インストールをクリックしましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/74f1f721-af45-d00f-4489-08d6e6895c04.png)

よろしいですか？みたいなのをOKすると、

```
'.NETFramework,Version=v4.5' を対象とするプロジェクト 'Utils' に関して、パッケージ 'Newtonsoft.Json.8.0.3' の依存関係情報の収集を試行しています
依存関係情報の収集に 1.93 sec かかりました
DependencyBehavior 'Lowest' でパッケージ 'Newtonsoft.Json.8.0.3' の依存関係の解決を試行しています
依存関係情報の解決に 0 ms かかりました
パッケージ 'Newtonsoft.Json.8.0.3' をインストールするアクションを解決しています
パッケージ 'Newtonsoft.Json.8.0.3' をインストールするアクションが解決されました
'UiPath オフィシャル' からパッケージ 'Newtonsoft.Json 8.0.3' を取得しています。
パッケージ 'Newtonsoft.Json.8.0.3' をフォルダー 'Z:\git\Path\packages' に追加しています
パッケージ 'Newtonsoft.Json.8.0.3' をフォルダー 'Z:\git\Path\packages' に追加しました
パッケージ 'Newtonsoft.Json.8.0.3' を 'packages.config' に追加しました
スクリプト ファイル 'Z:\git\Path\packages\Newtonsoft.Json.8.0.3\tools\install.ps1' を実行しています...
'Newtonsoft.Json 8.0.3' が Utils に正常にインストールされました
NuGet の操作の実行に 14.96 sec かかりました
経過した時間: 00:00:17.2103937
========== 終了 ==========
```

うまくいったようです。実際、コレをやるまでは、ライブラリがないってエラーになってたのが、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/c83cb8b6-5416-5c45-45d5-eb4706262c11.png)

エラーが解消されましたね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/68bfd5d9-724b-7996-8046-2b4d2397c6b9.png)


### nupkg作成
さて、nupkgを作成してみると、、、、

```
Z:\git\Path\Utils> nuget.exe pack Utils.csproj -Prop Configuration=Release
'Utils.csproj' からパッケージをビルドしています。
MSBuild auto-detection: using msbuild version '15.8.169.51996' from 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\bin'.
'Z:\git\Path\Utils\bin\Release' のファイルをパックしています。
メタデータに 'Utils.nuspec' を使用しています。
packages.config が見つかりました。依存関係として登録されているパッケージを使用します
Successfully created package 'Z:\git\Path\Utils\kino.UiPath.Utils.Activities.0.1.35.nupkg'.
```

中身を、[NuGet Package Explorer](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer/releases) でみてみると

![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/776d2de7-5445-116c-fb56-54ff9bd7e7fa.png)

nupkgにも追加されているようですね！UiPath Studioにインストールして、Newtonsoft.Jsonライブラリが呼び出せることも確認しておきましょう。

おつかれさまでしたー。


### 参考:UiPath Studio 2018.3 が参照しているNuGetサーバについて

さて先にでてきた、UiPathオフィシャルの https://www.myget.org/F/workflow/ ですが、これらの情報は UiPath Studio 2018.3の設定から取ってくることができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/73777/58ad2ed5-fd59-addf-cdd4-0cbeb8fca0f7.png)

抜き出してみると以下の通り。

| 名前   | URL       | 
|:-----------------|:----------|
| オフィシャル | https://www.myget.org/F/workflow/|  
| コミュニティ | https://gallery.uipath.com/api/v2|  
| nuget.org | https://api.nuget.org/v3/index.json ← これは手動で追加したかも |  
| ローカル |`C:\Users\[ユーザ名]\AppData\Local\UiPath\app-18.3.1\.\Packages`|


したがって、UiPath Studioのカスタムアクティビティ開発で外部ライブラリを参照するには、Visual Studioのパッケージマネージャから上記らを設定しておくのがよいかもしれませんね。

### 関連リンク

- https://www.myget.org/gallery/workflow  2018.3でオフィシャルってのはたぶんココを検索してるっぽい
- https://gallery.uipath.com/ 2018.3系でコミュニティってなってるのはたぶんココ(2018.2系ではGallery)