Nuget でNpgsql Unsafeのバージョン問題

VisualStudio

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

.Net FrameWork4.7.2へ

.net FrameWorkのバージョンアップ作業の中で古くから使っていたNpgsqlも併せてバージョンアップする事に。コンパイル時、DatabaseをOPENする時にエラーが出るソリューションがあります。エラーが出るソリューションは、System.Runtime.CompilerServices.Unsafeで問題がでています。

解決はしていないのですが、問題発生状況についてメモです。

PostgresqlへのコネクションをOpenする時にエラー

System.Runtime.CompilerServices.Unsafe

アセンブリバージョン4.0.4.1を要求されています。

しかし、実際にインストールされているのは、

アセンブリバージョン4.0.5.0です。

このため、ファイルまたはアセンブリが見つからないと表示されてしまいます。指定されたバージョンが見つからないという意味のようです。

Nugetパッケージの状況としては、

System.Runtime.CompilerServices.Unsafe v4.6.0を利用しており、

app.configには、

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

と、アセンブリバージョンは4.0.5.0を要求しているのですが、コンパイルすると、アセンブリバージョン4.0.4.1を探しに行ってしまうのが問題です。

呼び出し元のプロジェクトでNuGetする

呼び出し元のプロジェクトを右クリックし、NuGetパッケージの管理をします。

Npgsqlをインストール

Npgsqlをいったんインストールします。

インストールされたパッケージをすべて更新します。

更新が終わったら全て削除します。

これを行う事で、

System.Runtime.CompilerServices.Unsafe

によるエラーは出なくなりました。

それでも解決しない時

これは、どうなのかわかりませんが、上記で解決しない時に、

app.config 内のNugetで取得したパッケージのバージョン情報が書かれている部分をアンコメントしたら、エラー出なくなりました。

			<!--<dependentAssembly>
				<assemblyIdentity name="Mono.Security" publicKeyToken="0738EB9F132ED756" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
			</dependentAssembly>-->
			<!--<dependentAssembly>
				<assemblyIdentity name="Microsoft.Ink" publicKeyToken="31BF3856AD364E35" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-6.1.0.0" newVersion="6.1.0.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-7.0.0.2" newVersion="7.0.0.2" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
			</dependentAssembly>
			<dependentAssembly>
				<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
			</dependentAssembly>-->

環境移行によるNugetの問題 このプロジェクトは、このコンピュータ上にない NuGetパッケージを参照しています。

新しく開発環境を変えました。

このプロジェクトは、このコンピュータ上にない NuGetパッケージを参照しています。と表示され、これがなかなか解決できない。

全部NuGetパッケージを削除し、もう一度バーンジョンを合わせながらインストールし直したり、ソリューションをクリーンしたりと、手を尽くしたけど解決せず。

原因 既存のプロジェクトの参照

でした。既存のプロジェクトを参照していたのですが、そちらの方で一度ソリューションを起動させ、NuGetパッケージを復元して、ソリューションをクリーン、ソリューションをリビルトしたらコンパイルが通りました。

その状態で、プロジェクトを参照したらあっけなく問題は解決しました。

解決方法

  • プロジェクト単体で起動
  • ソリューションのクリーン
  • NuGetパッケージの復元
  • ソリューションのリビルド

プロジェクトを参照しているときには、親元のソリューションの方にパッケージが入ってしまいます。意図しているプロジェクトにNuGetパッケージが反映されないという事が発生し、パッケージが見つからないとなって永遠に解決できません。

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