UiPath WindowsレガシーからWindowsプロジェクトへの変換における問題・注意事項とトラブルシューティングについて(22.10.3版)

# 0. 背景
　この記事執筆時点(2022年12月)のUiPath Platformの最新版は22.10ですが、2世代前の21.10より自動化プロジェクト（以下単にプロジェクトと記載します）の属性として、対応OS（英語表記はCompatibilityですが、製品内日本語表記に合わせて記載します）が追加され、「Windowsレガシー」、「Windows」、「クロスプラットフォーム」の合計３種類が選択できるようになりました。

　従来のUiPath Studioで作成したプロジェクトはWindowsレガシーに該当しますが、これの非推奨化がUiPath社より示されており、23.4よりWindowsレガシープロジェクトの、新規作成ができなくなる旨アナウンスされています。（ただし既存プロジェクト／プロセスの実行、編集は引き続き可能とのことです。）またUiPath Studio 22.10では、Windowsレガシープロジェクトを開くと、上部に変換を促すメッセージが表示され、ここから変換ツールが利用できるようになりました。
![warning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/e3011da1-75ca-9aef-e7c6-603b513c915b.png)
　一方で、このような変換を促すメッセージを見て、そのままWindowsプロジェクトに変換を行った結果、動作しない事例も散見されます。
　この記事では、執筆時点(2022/12/2)の最新バージョンであるUiPath Studio 22.10.3の変換ツールを使用してWindowsプロジェクトに変換する際の問題となる事項や注意事項およびその対応案を記述します。（下記は現在把握しているものだけになりますので他にもあるかもしれないことご留意ください。）

　なお現在何らかのトラブルに直面している場合は３章の[エラーメッセージ・状況別逆引きクイックリファレンス](#3-エラーメッセージ状況別逆引きクイックリファレンス)をまずは参照ください。


# 1. 各「対応OS」(Compatibility)の概要

　各「対応OS」の特徴は下表の通りになります。中期的には今後Windowsまたはクロスプラットフォームが主流になる見込みです。

|項目|Windowsレガシー|Windows|クロスプラットフォーム|
|----|---|---|---|
|動作<br />プラットフォーム| Windows(32bit,64bit)|Windows(64bit) |Windows Liunx MacOS (64bit)|
|対応する.net|.net Framework4.6.1|.net 6|.net 6|
|UiPathのロボット実行プロセス|32bit|64bit|64bit|
|ロボットが実行時読み込むファイル|xaml|dll<br />(要コンパイル)|dll<br />(要コンパイル)|
|備考|非推奨化: 23.4では新規プロジェクト作成不可となる予定

 新規にプロジェクト作成するときに、対応OSの項目を変更することにより設定できます。
![compatibility1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/df56b8b5-3b5c-03d1-fd0d-dc660ec99ec0.png)

現在のプロジェクトの対応OSを確認するためには、Studioのウインドウの右下部分を参照するか
![compatibility2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/6cffd98b-6ffd-bfdb-635a-02ac9ca5093a.png)
またはプロジェクトパネルの依存関係を参照します。
![compatibility3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/f28f43fe-a123-e8fb-473d-8f012165e6f1.png)


# 2 問題となる事項・注意すべき事項

## 2-1. アクティビティパッケージのバージョンが変わる問題

　これは、ある意味必然ですが、21.10より過去にリリースされたアクティビティパッケージはWindowsプロジェクト対応していませんので、自動的に21.10.x系の最新版にアップデートされます。つまり挙動が変わる可能性があるため、動作検証が必要になるということです。

左側Windowsレガシー、右側Windowsに変換後です。SystemとUiAutomationが21.10系になっています。
![img20221105-convert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/bc5f4745-d703-a8ab-2afc-00823f476179.png)

## 2-2. アクティビティパッケージが対応していない問題
　Windowsプロジェクトは.net6ベースのため、Windowsレガシーで用いられる.net Framewaork 4.6.1ベースのアクティビティは動作しません。UiPath社純正のアクティビティパッケージはかなりの部分がWindowsプロジェクト対応(.net6対応)していますが、未だ対応していないものもあります。(UiPath.IPC.Activites Package等)
またマーケットプレイス内のアクティビティパッケージは全般的にWindowsプロジェクト対応が遅れている状況です。

WindowsレガシープロジェクトでのIPCパッケージ検索画面
![IPC1s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/298c41b1-c80d-e247-8b4e-44a693451157.png)

WindowsプロジェクトでのIPCパッケージ検索画面(パッケージが見つかりません)
![IPC2s2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/c3aaf389-b865-2742-51f1-0dda57f66861.png)

　変換ツール使用時はアクティビティの定義が見つからないエラーとなります。以下例です。

    xxxx.xaml: Cannot create unknown type '{clr-namespace:UiPath.XXX.Activities;assembly=UiPath.XXX.Activities}ActivityName'.

　対応方法としては、Wnidowsプロジェクト対応版がリリースされるまで待つ、あるいは代替手段・アクティビティを採用するのいずれかになります。


## 2-3. アクティビティが無い問題
　アクティビティパッケージ自体はWindowsプロジェクト対応していたとしても、その内部のアクティビティの一部が対応できておらず表示されないケースがあります。例えば、WebAPI Activities PackageのSOAP要求アクティビティや、Mail Activities PackageのExcahnge関連のアクティビティがこれに該当します。

WindowsレガシープロジェクトでのMailパッケージの内容
![mail1-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/48ccf5cb-f598-ccb2-d4bf-9889d29ab3b0.png)


WindowsプロジェクトでのMailパッケージの内容
(ExchangeとIBM Notesのフォルダ自体が存在せずアクティビティも使えない）
![mail2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/da71d5a6-f8a2-e8ec-cdbb-b94405bbffbf.png)

　変換ツール使用時はこちらもアクティビティの定義が見つからないエラーとなります。以下例です。

    xxxx.xaml: Cannot create unknown type '{clr-namespace:UiPath.XXX.Activities;assembly=UiPath.XXX.Activities}ActivityName'.

　対応方法としては2-1同様、Wnidowsプロジェクト対応版がリリースされるまで待つ、あるいは代替手段・アクティビティを採用するのいずれかになります。

## 2-4. アクティビティの表示不正
　特に変換ツール使用時に問題になると思われますが、アクティビティパッケージのバージョンによっては、デザイナーパネル上のアクティビティの表示が従来と異なるものとなり、アクティビティによっては正しい設定ができなくなる場合があります。
　対応方法としては、現在採用しているアクティビティパッケージよりも新しいものがリリースされていれば、バージョンを上げてみるになります。
　例えば下記の例はSystem.Activities package 22.4.4+Studio 22.10.3の例ですが、22.4.5にすることにより解消します。

System.Activities Package22.4.4　WindowsレガシープロジェクトでのForEachアクティビティ
![disp3_Legacy22_4_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/ab0f4cfa-f962-8b32-08ce-c8a51e0698f5.png)

System.Activities Package22.4.4　WindowsプロジェクトでのForEachアクティビティ
(プロパティパネルで入力ができず、デザイナーパネル上のアクティビティでも項目が限定的）
![disp1-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/0d9e79ff-a5c8-4687-7246-13c42693c01f.png)


System.Activities Package22.4.5　WindowsプロジェクトでのForEachアクティビティ
![disp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/8fedc4c5-4a41-107b-d8f4-5b030b444db2.png)


## 2-5. 特定の文字エンコーディングがサポートされていない問題
　 Windowsプロジェクトでテキストファイル読み込みアクティビティ等使う際に、エンコーディングに例えば"Shift_JIS"を指定しても、コンパイル時にShift_JIS is not a supported encoding name　となり使用することができません。
 これは.net6の仕様によるものです。これを解消するには、事前に以下をコールします。
 
    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)

　UiPathの場合、以下の様にメソッド呼び出しアクティビティで呼び出す必要があります。

![encoding1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477147/fb057275-d36f-ab65-12ab-2fe463ab76b3.png)


## 2-6. ダブルクォーテーション問題
　日本語環境ではそれほど問題になっていませんが、一部の国・地域では比較的インパクトの大きい問題です。
　従来のVB+Windowsレガシー環境では、文字列リテラルを表すダブルクォーテーションは、"(文字コード0x22)以外にも例えば全角の”などでも正常に動作していました。
　しかしWindowsプロジェクトでは、静的バリデーションでは依然として問題となりませんが、コンパイラーが対応できず（ただしコンパイル時にエラーにならず）、実行時に以下のエラーとなります。

    Expression activity type ‘VisualBasicValue’1’ requires compilation in order to run

なおUiPath Community Forumは、ダブルクォーテーションを通常入力すると、”等に自動変換されます。そのため安易にForum上の式をコピーぺーストしていた場合、この問題にひっかかるケースがあります。

対応方法は、文字列リテラルを表すダブルクォーテーションをすべて" (0x22)に統一することになります。
静的バリデーションでも検出せず、実行時エラーになるので、ちょっと厄介な問題です。

## 2-7. ReadPDFwithOCRアクティビティが動作しない(C#)
　WindowsプロジェクトのC#の環境で発生します。出力のテキストプロパティに変数を設定し、その変数が使用されていると、コンパイラーが対応できず（ただしコンパイル時にエラーにならず）、実行時に以下のエラーになります。

    Expression activity type ‘VisualBasicValue’1’ requires compilation in order to run

おそらくアクティビティのバグと思われるので、バグfix版のリリースを待つしかないようです。

## 2-8. 32bit/64bit問題
　Windowsレガシーベースの自動化プロセスは32bitプロセスで動作していましたが、Windowsベースの自動化プロセスは64bitプロセスとして動作します。このとき外部プロセスを呼び出す際にbit数が変わるものが出てきます。
例えばInvokePowershellアクティビティ等が該当します。
対応方法としては、このアクティビティ自体の動作を変更することはできないので、PowerShellのスクリプトを改修する、StartProcess等で32bit版PowerShellをコールする等が考えられます。


## 2-9. デバッグ実行できなくなる事象
 特にマイグレーションツールで変換後、極まれに以下のエラーでデバッグ実行ができないケースがあります。（通常実行は可能です）

    An item with the same key has already been added. Key: VisualBasicValue `1_1

これは同一xamlファイル中にID_refとしてVisualBasicValue `1_1が重複定義されていることが原因です。
対応方法ですが、テキストエディタで重複キー部分を修正し、重複しないようにします。（参照されていないであろう方の1_1の部分を1_2にする等。）

## 2-10. 実行できない（xamlファイル指定)
　従来のWindwsレガシープロジェクトでは、xamlファイルを--fileオプションで指定することによりUiRobot.exe executeから実行できましたが、Windowsプロジェクトではこれができず、以下のエラーメッセージが出力されます。

    UiRobot コマンド ラインから実行できるのは、.NET 6 の .nupkg ファイルまたはパブリッシュされたプロセスのみです。

　これはWindowsプロジェクトの仕様です。対応方法は、パブリッシュした上で、--fileオプションでnupkgファイルを指定するか、--processオプションでプロセスを指定してください。なお実行フォルダは%USERPROFILE%.nuget以下の所定のフォルダになりますので、相対パス指定をしている場合は、それを含めた改修が必要になるかもしれません。


# 3. エラーメッセージ・状況別逆引きクイックリファレンス

|&nbsp;|エラーメッセージまたは状況|参照先&nbsp;|
|---|---|---|
|プロジェクト読み込み時|xxxx.xaml: Cannot create unknown type<br /> '{clr-Namespace:UiPath.XXX.Activities;assembly<br />=UiPath.XXX.Activities}ActivityName'.|[2-2. アクティビティパッケージが対応していない問題](#2-2-アクティビティパッケージが対応していない問題)<br />または<br />[2-3. アクティビティが無い問題](#2-3-アクティビティが無い問題)|
|実装時|プロパティが設定できない。|[2-4. アクティビティの表示不正](#2-4-アクティビティの表示不正)|
|コンパイル時|XXX is not a supported encoding name|[2-5. 特定の文字エンコーディングがサポートされていない問題](#2-5-特定の文字エンコーディングがサポートされていない問題) |
|デバッグ実行開始時|An item with the same key has already been added. Key: VisualBasicValue `1_1|[2-9. デバッグ実行できなくなる事象](#2-9-デバッグ実行できなくなる事象)|
|実行時|Expression activity type ‘VisualBasicValue’1’ requires compilation in order to run|[2-6. ダブルクォーテーション問題](#2-6-ダブルクォーテーション問題)<br/>または<br/>[2-7. Read PDF with OCRアクティビティが動作しない(C#)](#2-7-readpdfwithocrアクティビティが動作しないc)|
|実行時|UiRobot コマンド ラインから実行できるのは、.NET 6 の .nupkg ファイルまたはパブリッシュされたプロセスのみです。|[#2-10. 実行できない（xamlファイル指定)](#2-10-実行できないxamlファイル指定)
|実行時|Windowsレガシーの時と挙動が異なる|[#2-1 アクティビティパッケージのバージョンが変わる問題](#2-1-アクティビティパッケージのバージョンが変わる問題)<br />または<br />[#2-8. 32bit/64bit問題](#2-8-32bit64bit問題)|

以上