魔王のサタンぶろぐ

参照されていないアセンブリに定義されています。ワオ

はじめに

CS0012   型 'SecurityToken' は、参照されていないアセンブリに定義されています。アセンブリ 'System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' に参照を追加する必要があります。

というエラーの対処法について。

背景

Microsoft Azure Docsにあるサンプルコードを参考に、自分で新しくプロジェクト立てた時にハマッた。

<詳細>

認証回りのLogicを書く [ IIssuerSecurityTokenProvider ] がInterfaceとして明示的に追加できるのに、Runしたときに"参照できないアセンブリ"とか言い始めてキレたので残す。

対象

error "参照されてないアセンブリ" に関しての知識を蓄えたので、その辺で困ってる方どうぞ。

環境

方法

本来ならこの問題は

Install-Package System.IdentityModel

で解決すれば困らないですけど。

www.nuget.org

今回は、このパッケージが落とせなかったので、

ソリューションエクスプローラー > "参照" > 参照の追加 > "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とか設定すると確実なんかな。。。

以上です!!!

ばいん