web-dev-qa-db-ja.com

ファイルまたはアセンブリ 'WebGrease'の依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません

この問題には多くの解決策があります。以下のすべての回答をお読みください。問題の解決にも役立つ可能性があります。これを解決する新しい方法を見つけた場合は、回答に文書化してください

System.Web.OptimizationをASP.NET Webフォームソリューションに追加しようとしています。 NuGetパッケージを介してMicrosoft ASP.NET Web Optimization Frameworkを追加しました。 Microsoft.Web.InfrastractureおよびWebGrease(1.5.2)を参照に追加しました。

ただし、実行すると

<%= System.Web.Optimization.Scripts.Render("~/bundles/js")%>

実行時エラーが発生します

Could not load file or Assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)

AssemblyBindingをWeb.Configに追加しようとしました。

<runtime>
  <legacyUnhandledExceptionPolicy enabled="1"/>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.5.1.25624" newVersion="1.5.2.14234"/>
      </dependentAssembly>
    </assemblyBinding>
</runtime>

しかし、運はありません。

私のWebサイトのWeb設定にこの行が含まれていることに気付きました

 <configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0">

に置き換えた場合

 <configuration>

その後、すべてが機能し、実行時エラーは発生しません。残念ながら、xmlnsが必要です。私のプロジェクトの他のコンポーネントはそれに依存しています。

スキーマがv2.0を指しているときに、最適化が古いバージョンをロードしようとするのはなぜですか?最新または唯一の利用可能なWebGrease.dllを強制的にロードする方法はありますか?

変更せずに他に何ができるか

 <configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0"> ?

あなたが提供できる助けをありがとう!

編集:1)FusionLog結果の添付。たぶん役立つでしょう

=== Pre-bind state information ===
LOG: User = [USER]
LOG: DisplayName = WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Projects/PROJECT_NAME/trunk/www.PROJECT_NAME.com/
LOG: Initial PrivatePath = C:\Projects\PROJECT_NAME\trunk\www.PROJECT_NAME.com\bin
Calling Assembly : System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\PROJECT_NAME\trunk\www.PROJECT_NAME.com\web.config
LOG: Using Host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35

2)確認済み、問題は

<configuration  xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0">

ただし、理由はわかりません

17
Roman Mik

最後に、問題は<configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0">。 Renderメソッドが誤ったWebGrease Assemblyをロードする原因になりました。

Xmlnsを削除することで問題が解決しました。

16
Roman Mik

この問題はprodサーバーで発生しましたが、開発者のマシンではすべて正常に動作しました。これらの行は助けました:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.0" newVersion="1.5.2.14234"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
24
Der_Meister

NewVersion = "1.0.0.0"が参照ファイルのバージョンと一致するようにweb.configファイルを変更しました。

<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.0.0.0" />
  </dependentAssembly>
5
DaniDev

それが誰かを助ける場合に備えて、私は同じ問題を抱えていましたが、それはWebGreaseの依存アセンブリ、つまりAntlr3が原因であることがわかりました。 NuGetを介してインストールするときに、web.configruntime要素に次を追加しました。

  <dependentAssembly>
    <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
  </dependentAssembly>

これを削除するだけで問題が解決しました。

3
Dan Diplo

私の場合、問題は XML Processing Instruction(PI)<?blah ... ?>)web.configファイル内。完全に合法的なXML!しかし、このエラーメッセージが表示され、間違った場所をすべて探してしまいました。

私のweb.configは次のように見えました-connectionStringsセクションのXML PIに注意してください:

<configuration>
    ...
    <connectionStrings>
        <?blah ... ?>
        <add name="AppDb" ... />
    ...
    </connectionStrings>
    ...
    <runtime>
        <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
            ...
            <dependentAssembly>
                <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
                <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
            </dependentAssembly>
            ...
        </assemblyBinding>
    </runtime>
    ...
</configuration>

XML PI <?blah ... ?>connectionStringsセクションにありました。つまり、assemblyBindingセクション、またはbindingRedirectなどのWebGreaseエントリの近くにありません(正しい! )。

1
Barumpus

webフォームサイト.net 4.5で同じ問題に遭遇しました。最後のバージョンへの単純な更新ナゲットパッケージは私を助けてくれました。

1
Radekk

私もこれと同じ問題を抱えていましたが、プロジェクトを保存するローカルの開発コンピューターからネットワークドライブにソリューションをコピーした結果でした。マップされたドライブからソリューションを開いたときに参照を適切に機能させることができず、このエラーが引き続き表示されました。特定の問題で見つかった一時的な回避策は、マップされたドライブ文字ではなく、UNCパスからソリューションを開くことだけでした。

0
Pat Migliaccio