Upgrading WebGrease to version 1.3.0 causes error

2019-02-14 10:14发布

问题:

First off, answers to this question,do NOT solve my error:

Upgrading WebGrease to version 1.3.0 gets me error

I have the following bindingredirect on my production server:

<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>

I have the following DLL's on my production server that are required for the Microsoft ASP.NET Web Optimization Framework:

  1. System.Web.Optimization.dll 1.0.0.0 (this is NOT pre-release version)
  2. Antlr3.Runtime.dll 3.3.1.7705
  3. Webgrease.dll 1.3.0.0

I am getting the following error:

Could not load file or assembly 'WebGrease, Version=1.0.0.0, 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)

I have checked the GAC, I have deleted all Temporary ASP.NET folders, I have tried removing the newVersion attribute from my config <bindingRedirect>. I am not sure what is telling ASP.NET to look for WebGrease 1.0

回答1:

Finally figured out why this was not working for me despite other users saying that it was working for them.

I had the following binding redirection in my web.config file to force the System.Web.Optimization assembly to use the newer version instead:

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

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

</configuration>

It was just like other users had, but it didn't work. Then I used the fusion log viewer (Fuslogvw.exe) to figure out more information and discovered that the binding process didn't even look at the redirect instruction.

Finally figured out that there must not be an XML namespace on the root ... . If I remove the following from my <configuration> element it works: xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"

Also, just make sure you have the following XML namespace specified on the <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> element.

Finally!!



回答2:

I got the same problem. I have a solution with different projects within. I have disinstalled Microsoft.AspNet.Web.Optimization and WebGrease from all projects, and deleted manually all bin and obj folders.

Then I have installed Microsoft.AspNet.Web.Optimization only in the project that need this package.

At this point I have deleted all files from packages folder.

When I had opened Visual Studio again it had started to reinstall all packages from scratch.

In the end I did a git-diff and this was the result:

$ git diff App.config
diff --git a/App.config
index ceec0aa..8937482 100644
--- a/App.config
+++ b/App.config
@@ -18,7 +18,7 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
       </dependentAssembly>
     </assemblyBinding>
   </runtime>


$ git diff Web.config
diff --git a/Web.config b/Web.config
index 7287953..f196254 100644
--- a/Web.config
+++ b/Web.config
@@ -106,7 +106,7 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
       </dependentAssembly>
     </assemblyBinding>
   </runtime>


$ git diff myproj.csproj
diff --git a/myproj.csproj b/myproj.csproj
index 12987d0..a214bf7 100644
--- a/myproj.csproj
+++ b/myproj.csproj
@@ -24,6 +24,7 @@
     </SccAuxPath>
     <SccProvider>
     </SccProvider>
+    <WebGreaseLibPath>..\packages\WebGrease.1.5.2\lib</WebGreaseLibPath>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -47,8 +48,8 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Antlr3.Runtime, Version=3.3.1.7705, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processo
-      <HintPath>..\packages\WebGrease.1.3.0\lib\Antlr3.Runtime.dll</HintPath>
+    <Reference Include="Antlr3.Runtime">
+      <HintPath>..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll</HintPath>
     </Reference>
     <Reference Include="Kendo.Mvc">
       <HintPath>..\Dll\kendo\Kendo.Mvc.dll</HintPath>
@@ -84,9 +85,8 @@
       <Private>True</Private>
       <HintPath>..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll</HintPath>
     </Reference>
-    <Reference Include="System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, pr
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\packages\Microsoft.AspNet.Web.Optimization.1.1.0\lib\net40\System.Web.Optimization.dll</HintPath>
+    <Reference Include="System.Web.Optimization">
+      <HintPath>..\packages\Microsoft.AspNet.Web.Optimization.1.1.2\lib\net40\System.Web.Optimization.dll</HintPath>
     </Reference>
     <Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processor
       <Private>True</Private>
@@ -129,9 +129,8 @@
       <Private>True</Private>
       <HintPath>..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
     </Reference>
-    <Reference Include="WebGrease, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchite
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\packages\WebGrease.1.3.0\lib\WebGrease.dll</HintPath>
+    <Reference Include="WebGrease">
+      <HintPath>..\packages\WebGrease.1.5.2\lib\WebGrease.dll</HintPath>
     </Reference>
   </ItemGroup>
   <ItemGroup>
@@ -760,7 +759,6 @@
     <Content Include="Views\Home\Index.cshtml" />
     <Content Include="Views\Shared\Error.cshtml" />
     <Content Include="Views\Shared\_LoginPartial.cshtml" />
-    <Content Include="Views\Shared\_Layout.cshtml" />
     <Content Include="Views\Web.config" />
   </ItemGroup>
   <ItemGroup>
@@ -800,6 +798,7 @@
       <Generator>RazorGenerator</Generator>
       <LastGenOutput>index1.generated.cs</LastGenOutput>
     </Content>
+    <Content Include="Views\Shared\_Layout.cshtml" />
   </ItemGroup>
   <PropertyGroup>
     <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>

In particular, both App.config and Web.config had these differences:

       <dependentAssembly>
         <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
       </dependentAssembly>
     </assemblyBinding>