この問題には多くの解決策があります。以下のすべての回答をお読みください。問題の解決にも役立つ可能性があります。これを解決する新しい方法を見つけた場合は、回答に文書化してください
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">
ただし、理由はわかりません
最後に、問題は<configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0">
。 Renderメソッドが誤ったWebGrease Assemblyをロードする原因になりました。
Xmlnsを削除することで問題が解決しました。
この問題は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>
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>
それが誰かを助ける場合に備えて、私は同じ問題を抱えていましたが、それはWebGreaseの依存アセンブリ、つまりAntlr3
が原因であることがわかりました。 NuGetを介してインストールするときに、web.config
のruntime
要素に次を追加しました。
<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>
これを削除するだけで問題が解決しました。
私の場合、問題は 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
エントリの近くにありません(正しい! )。
webフォームサイト.net 4.5で同じ問題に遭遇しました。最後のバージョンへの単純な更新ナゲットパッケージは私を助けてくれました。
私もこれと同じ問題を抱えていましたが、プロジェクトを保存するローカルの開発コンピューターからネットワークドライブにソリューションをコピーした結果でした。マップされたドライブからソリューションを開いたときに参照を適切に機能させることができず、このエラーが引き続き表示されました。特定の問題で見つかった一時的な回避策は、マップされたドライブ文字ではなく、UNCパスからソリューションを開くことだけでした。