いざOpen棟梁!…が初歩でつまずく

とある案件にて、Open棟梁を使った開発を行うことになりました。

開発対象のプロジェクトは「.NET Framework 4.7.2」で行うため、Open棟梁の開発基盤(テンプレート)は「Visual Studio 2017, .NET Framework 4.7 / .NET Core 2.0 版」を使うことにしました。

サンプル実行時にシステムエラーが発生し、初歩的なことで手間取ったので記録しておきます。(同じようなことがあった人は参考にしてください)

  1. ダウンロードしたファイルを展開・所定の場所に配置し、開発基盤のターゲットフレームワークを「.NET Framework 4.7」から「4.7.2」に修正。
  2. Open棟梁の本体(アセンブリになっている部分)をNuGetで取得。
  3. 開発基盤をビルド。
  4. 試しにサンプルソースを上記と同様の設定をして、ビルド
  5. 手元のPostgreSQLのDBにサンプルのテーブル・データを展開。
  6. サンプルを実行。DBアクセスする処理を行うと以下のシステムエラーが発生。

System.IO.FileNotFoundException: ファイルまたはアセンブリ 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

 詳細をみたところ、Open棟梁本体側で使用しているNpgsqlでUnsafeを使っていたようです。というわけで、ないものは追加です。

NuGetで「Unsafe」を調べるとMicrosoftが公開していたので、Open棟梁開発基盤に「Unsafe」の最新安定版を早速インストール。

改めて、開発基盤・サンプルをリビルドして、サンプルを実行したのですが、またしても同様のエラーが発生しました。

その後紆余曲折したのですが、

開発基盤の[参照]の「System.Runtime.CompilerServices.Unsafe」を見てみるとバージョンが「4.0.4.1」となっていたのでした。リビジョンが違いました。

というわけで、最新安定版を参照させるべくアプリケーション構成ファイル(app.config)に以下のリダイレクトの設定を追記することにしました。

<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.0.4.0" newVersion="4.0.4.1" />
</dependentAssembly>

そして、サンプルを改めて実行。エラーなく想定どおりに動作しました。

他のプロジェクトを巻き込んで何かをするときは、その構成を理解することは重要ですね。

「ファイル・アセンブリがない」→「該当バージョンのアセンブリがない」と考えられればもう少し早く問題が解決できるだろうと思います。今後注意ですね。

参考:
http://csps.hitachi-solutions.co.jp/opentouryo/
https://docs.microsoft.com/ja-jp/dotnet/framework/configure-apps/redirect-assembly-versions

 

タイトルとURLをコピーしました