Rhino,GrasshopperのカスタムコンポーネントでExcel(.xlsx)のデータを読み込もうとしたら例外が発生しました。
ClosedXML
Excel(.xlsx)の読み込みはClosedXMLを使用しています。NuGetでClosedXMLをインストールして、カスタムコンポーネントをビルド。
この時点では特に問題なし。
その後、実際にGrasshopperで実行すると例外が発生します。
”Could not load file or assembly 'ClosedXML,...”
NuGetでインストールしたパッケージが参照できていないようです。
binフォルダを確認すると、確かに参照しているNuGetパッケージのファイルが1個も存在しません。カスタムコンポーネントのDLLだけが生成されています。
どうもデフォルトではNuGet関連のファイルはコピーされないようです。
対策
対策を調べると、単純にプロジェクトファイル(.csproj)を編集し、以下のプロパティを追加すればいいようです。
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
これでリビルドしてみると。。。、NuGetパッケージの関連ファイルも一緒に出力されています。
動作を確認すると、今度は例外も発生せず、意図した動きになりました。
今回はClosedXMLでしたが、NuGetパッケージを使う場合は注意が必要ですね。
動作環境
以下の環境で動作を確認しています。
- Windows11 Pro(64bit, 23H2)
- Rhinoceros 8 SR8
- Visual Studio Professional 2022(17.10.3)