現在参画している案件で、ASP.NET Web Siteの保守開発を行っている。
プロジェクトのターゲットフレームワークは.Net Framework 4.5.2。
なので、ValueTupleを使用するにはSystem.ValueTuple.dllをNuGetでダウンロードし、
プロジェクトから参照できるようにしておく必要がある。
(Web Siteの場合、binにdllファイルを配置するだけ)
しかし、dllをbinに配置しただけだと以下のようなビルドエラーが表示されてしまう。
BC30002: Type 'ValueTuple' is not defined.
上記エラーを修正するためには、Web.configのassemblyBindingセクションに下記を追加する
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" culture="neutral" publicKeyToken="cc7b13ffcd2ddd51" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
これでビルドエラーが消え実行できるようになるが、ValueTupleを使用しているページを表示すると・・・
以下のようなコンパイルエラーが発生してしまった。
BC30560: 'ValueTuple' is ambiguous in the namespace 'System'.
原因は環境依存で、Windows 10 Fall Creators Updateから.Net Framework4.7が標準インストールされ、4.7ではValueTupleがGACの方にも追加されてしまったからのようだ。
ということで、ターゲットフレームワークが4.7以上の場合、System.ValueTuple.dllの参照は削除しなければならないと思うのだが、ターゲットフレームワークが4.7未満のプロジェクトはどうしたらよいのか・・・
解決策はターゲットフレームワークを4.7にするしか無いような気がする。
以下、参考URL
[https://github.com/dotnet/roslyn/issues/18775:title]