Autodesk Inventor API Hacking (Versionあれこれ)

# 0. はじめに
[Freeradical](https://www.freeradical.jp)の中の人、[yamarah](https://qiita.com/yamarah)です。
本稿では、Autodesk InventorのAddIn開発における、様々なVersionにまつわる情報をまとめます。
時折、作ったAddInがInventorのVersionによって動作したり、しなかったりということが起きますが、大抵はこれらのVersionの不整合が原因です。

# 1. InventorのVersion
まずは、Inventor自体のVersionです。現時点での最新Versionは、Inventor 2023です。
例えばInventor 2023の場合に、2023という数字とは別に、内部的には連番で管理されている番号があります。
Version番号は、Inventor.Application.SoftwareVersionからアクセスできるので、VBAのイミディエイトで確認してみます。

```
? ThisApplication.SoftwareVersion.DisplayVersion
2023
? ThisApplication.SoftwareVersion.Major
 27
? ThisApplication.SoftwareVersion.Minor
 0
```

内部的には、Inventor 2023のVersionは`27`で、今後updateが入ると、Minorの数字が上がっていきます。
また、必ずしも保証されているわけではありませんが、Inventorは1年に1回のMajor updateがあり、その度にMajorの数字が1つ増えます。

つまり、

```
Major = DisplayVersion - 1996;
```

だということですね。
以後はInventorのVersionと言えば、2023(DisplayVersion)ではなく、`27`(Major)の方を指すので、注意してください。

# 2. InteropのVersion
AddInは、直接Inventorとやり取りするわけではなく、途中に仲介者がいます。それが、Interopです。
なぜ間に仲介者(Interop)を挟むのかは色々な事情があるのでしょうが、確かなことは、InventorのVersionが上がっても、AddInをrecompileすることなく使えるということです。
![InteropVersion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424028/e91c9ce3-eedf-9b49-911f-0c30af0d9e42.png)
この場合、InteropのVersionは24.0.0.0です。ピリオドで区切られた1つ目の数字がMajorで、2つ目がMinorです。3つ目以降は常に0という認識で問題ないです。

さて、このVersionの意味するところですが、これはAddInがlinkされるVersionであり、AddInはこのVersion以前のInventorには対応しなくなります。
今回ですと、Majorが`24`ですので、このままcompileすると、そのAddInはInventor 2019では使えないというわけです。

でしたら、大は小を兼ねる的な発想で(数字の大小は逆だが)、出来るだけ古いInteropを使えば良いのでしょうか?
その場合は、新しいVersionで追加されたAPIが使えません。Major`24`で追加されたAPIを使いたければ、InteropもVersion`24.x.x.x`を使わないといけないのです。

さて、先ほど、

> 確かなことはInventorのVersionが上がっても、AddInをrecompileすることなく使えるということです。

と書きましたが、実は極まれに例外があります。
Major Versionが上がった直後に、1つ前のVersionのMinorが上がり、そのInteropを使った場合です。
実際にあったのは、Inventor 2020のリリースとほぼ同時に、Inventor 2019に対しUpdateがかかり、その際にInteropのMinorの数字が上がったのです(`23.2.0.0`になった)。
Inventor 2020にしてみれば、自分よりも古いVersionのはずですが、全く見知らぬInterop`23.2.0.0`からのアクセスなので、拒否されてしまいました。

# 3. addinファイルに指定するVersion
さて、InteropのVersionと、AddInが動作するInventorのVersionの関係を説明しましたが、もう1つ別の要素があります。
それは、拡張子が`addin`のファイルです。templateで自動作成された`addin`ファイルを見てみましょう。

```xml
<Addin Type="Standard">
  <!--Created for Autodesk Inventor Version 24.0-->
  <ClassId>{dad03fdd-e24c-4cd9-af01-631e3e11fb0a}</ClassId>
  <ClientId>{dad03fdd-e24c-4cd9-af01-631e3e11fb0a}</ClientId>
  <DisplayName>SampleInventorAddIn</DisplayName>
  <Description>SampleInventorAddIn</Description>
  <Assembly>SampleInventorAddIn.dll</Assembly>
  <LoadOnStartUp>1</LoadOnStartUp>
  <UserUnloadable>1</UserUnloadable>
  <Hidden>0</Hidden>
  <SupportedSoftwareVersionGreaterThan>23..</SupportedSoftwareVersionGreaterThan>
  <DataVersion>1</DataVersion>
  <UserInterfaceVersion>1</UserInterfaceVersion>
</Addin>
```

ここに記載されている、`<SupportedSoftwareVersionGreaterThan>`のキーより新しいVersionのInventorでないと、動作しません。
少しややこしいのですが、Greater Thanですので、この場合は`23`__よりも新しい__ということで、`24`以降(つまり、Inventor 2020以降)が動作対象バージョンとなります。
ちなみに、2行目の`<!--Created for Autodesk Inventor Version 24.0-->`は、コメントなので無視して大丈夫です。

なお、この`addin`ファイルはAddIn自体のdllと同じディレクトリに配置され、Inventorはこのファイルを見てAddInを読み込むかどうかを判断します。

# 4. AddIn自体のVersion
AddIn自体のVersionは、Inventorからは無視されますが、ソースに変更を加えたら数値を上げると良いでしょう。
設定個所は、2か所あります。

* AssemblyInfo.cs
* \<AddIn名\>.X.manifest

それぞれに別の値を設定することが出来ますが、特別な理由がない合わせておいた方が良いでしょう。
また、ピリオドで区切られた4つの数字には、それぞれに意味がありますが、ここでは割愛します。(事実上、勝手につけて問題ない)

# 5. Visual StudioのVersion
現時点で最新のInventor 2023のSDKがサポートするVisual StudioのVersionは2015, 2017, 2019です。
もし、InventorのSDKが対応していないVersionのVisual Studioで開発したい場合でも、[別の記事](https://qiita.com/yamarah/items/cee08eb8f2b7aecbda83 "Autodesk Inventor API Hacking (概略)")に書いた通り、恐らく可能です。
その場合は、[記事](https://qiita.com/yamarah/items/cee08eb8f2b7aecbda83 "Autodesk Inventor API Hacking (概略)")に従ってtemplateを自分でコピーする必要があります。
既にtemplateを必要としない場合は、もちろんコピーする必要すらありません。

# 6. .NET FrameworkのVersion
templateからprojectを作ると、.NET Framework 4.5が選択されるようです。
最近のInventorのVersionと、動作環境に上げられている.NET FrameworkのVersionをまとめてみましょう。

|Inventor|.NET Framework|
|:--|:--|
|2017|4.6以降|
|2018|4.6以降|
|2019|4.7以降|
|2020|4.7以降|
|2021|4.8以降|
|2022|4.8以降|
|2023|4.8以降|

では、どのVersionの.NET Frameworkを`対象のフレームワーク`のとし選択すれば良いかですが、別に`4.5`のままでもInventor 2023で動作します。
もちろん、AddIn自体が`4.8`に依存する機能を使っているのでしたら、それを選択する必要があります。注意が必要なのは、全てのWindowsに最新の.Net Frameworkがinstallされている保証がないということです。例えば、Windows 8でInventor 2018が動作している環境では、`4.7`が無いかもしれません。

# 7. ExcelのVersion
関係はないですが、ついでにExcelのVersionもまとめておきます。
Inventor2019と2020は、一部の動作に64 bit版を要求しているので、注意してください。大抵の作業は、32 bit版でも動作すると思います。

|Inventor|Excel|
|:--|:--|
|2017|2010, 2013, 2016|
|2018|2010, 2013, 2016|
|2019|2010, 2013, 2016|
|2020|2010, 2013, 2016|
|2021|2016以降|
|2022|2016以降|
|2023|2016以降|

# 8. WindowsのVersion
Inventor2023でWindows11がサポートされました。(いずれも64bit版)

|Inventor|Windows|
|:--|:--|
|2019|7, 8.1, 10|
|2020|7, 10|
|2021|10|
|2022|10|
|2023|10, 11|

# 99. 親の記事に戻る
[Autodesk Inventor API Hacking (概略)](https://qiita.com/yamarah/items/cee08eb8f2b7aecbda83)