参照されていないアセンブリに定義されています。ワオ
はじめに
CS0012 型 'SecurityToken' は、参照されていないアセンブリに定義されています。アセンブリ 'System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' に参照を追加する必要があります。
というエラーの対処法について。
背景
Microsoft Azure Docsにあるサンプルコードを参考に、自分で新しくプロジェクト立てた時にハマッた。
<詳細>
認証回りのLogicを書く [ IIssuerSecurityTokenProvider ] がInterfaceとして明示的に追加できるのに、Runしたときに"参照できないアセンブリ"とか言い始めてキレたので残す。
対象
error "参照されてないアセンブリ" に関しての知識を蓄えたので、その辺で困ってる方どうぞ。
環境
- C# MVC 4.5 + Web API
- Visual Studio 2015
方法
本来ならこの問題は
Install-Package System.IdentityModel
で解決すれば困らないですけど。
今回は、このパッケージが落とせなかったので、
ソリューションエクスプローラー > "参照" > 参照の追加 > "System.IdentityModel" にチェック > OK
でいける。。。はず!(僕はこれで行きました)
ローカルにあったんかい!!!!って感じでした(笑)( ´∀` )
以下の補足は、今回検索しているうちにクリティカルそうなのをまとめただけです。参考にどうぞ。
補足1. nuget 確認(僕はやりました)
これは"参照できないアセンブリ"が出てきた全般に言えるんですけど、ちゃんと入ってますかってことです。
ほっとんどないはずですけど、今たまたまfix中でInstall-Package ****が走らないとか。(←今回これ)
Install したつもりだと思いますけど、とりあえず再インストールしましょ。
nuget consoleに
Update-Install -Reinstall
で、Package.configをもとに再インストールしてくれるので、それで様子見ましょう。
だめなら次!
補足2. 仰る通りアセンブリ参照に足してみる(僕はだめでした)
プロジェクト直下の Web.config をいじります。
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="xxxxxxxxxxxxx" /> <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" /> </dependentAssembly> .... </assemblyBinding> </runtime>
みたいなところありますよね。。
このフォーマットで仰る通り追記してみる!
今回のパターンだと。。。
<dependentAssembly> <assemblyIdentity name="System.IdentityModel" publicKeyToken="xxxxxxxxxxx" /> </dependentAssembly>
こんな感じで動くのかな。。。
ちゃんと下のBindingRedirectとか設定すると確実なんかな。。。
以上です!!!
ばいん