System.Web.Mvc 5.2.2.0 vs. 5.2.3.0 versioning issue with aspnet_compiler
Asked Answered
P

2

6

I have problems when turning on compilation of views in Visual Studio. I have a fairly standard ASP.NET MVC 5 application, with a lot of references. I reference System.Web.Mvc 5.2.3.0 (latest as of now), but the compilation seems to have problems with v. 5.2.2.0 vs 5.2.3.0. The excellent tool AsmSpy (https://github.com/mikehadlow/AsmSpy) tells me which assemblies reference which version of System.Web.Mvc:

Reference: System.Web.Mvc
   5.1.0.0 by Autofac.Integration.Mvc
   5.0.0.0 by Glimpse.Mvc5
   5.0.0.0 by Microsoft.Web.Mvc
   3.0.0.0 by Mindscape.Raygun4Net.Mvc
   5.2.3.0 by Myrepo.Web.Common
   5.2.3.0 by MyApp
   5.2.2.0 by Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc

So, the guilty one is Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc. But, I have added an Assembly binding redirect to the root web.config of the app, like this:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- lots more -->
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <!-- lots more -->
    </assemblyBinding>
  </runtime>

In an effort to try to get to the bottom of the problem, I have turned on Diagnostic build logging, which spits out north of 260,000 lines of log, including:

16>  Unified primary reference "System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35". (TaskId:183)
16>      Using this version instead of original version "5.1.0.0" in "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\packages\Autofac.Mvc5.3.3.4\lib\net45\Autofac.Integration.Mvc.dll" because of a binding redirect entry in the file "obj\Debug\MyWeb.csproj.App.config". (TaskId:183)
16>      Using this version instead of original version "5.0.0.0" in "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\packages\Glimpse.Mvc5.1.5.3\lib\net45\Glimpse.Mvc5.dll" because of a binding redirect entry in the file "obj\Debug\MyWeb.csproj.App.config". (TaskId:183)
16>      Using this version instead of original version "3.0.0.0" in "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\packages\Mindscape.Raygun4Net.Mvc.5.1.0\lib\net40\Mindscape.Raygun4Net.Mvc.dll" because of a binding redirect entry in the file "obj\Debug\MyWeb.csproj.App.config". (TaskId:183)
16>      Using this version instead of original version "5.2.2.0" in "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\packages\Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc.2.0.0\lib\net45\Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc.dll" because of a binding redirect entry in the file "obj\Debug\MyWeb.csproj.App.config". (TaskId:183)
16>      Using this version instead of original version "5.0.0.0" in "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\Web\Common\bin\Debug\Microsoft.Web.Mvc.dll" because of a binding redirect entry in the file "obj\Debug\MyWeb.csproj.App.config". (TaskId:183)
16>      Resolved file path is "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll". (TaskId:183)
16>      Reference found at search path location "{HintPathFromItem}". (TaskId:183)
16>          For SearchPath "{CandidateAssemblyFiles}". (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Agent.AttributeFilter.dll", but its name "NewRelic.Agent.AttributeFilter" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Agent.Configuration.dll", but its name "NewRelic.Agent.Configuration" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Agent.Core.dll", but its name "NewRelic.Agent.Core" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Agent.LabelsService.dll", but its name "NewRelic.Agent.LabelsService" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Agent.LazyMap.dll", but its name "NewRelic.Agent.LazyMap" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Collections.dll", but its name "NewRelic.Collections" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Core.dll", but its name "NewRelic.Core" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Dispatchers.dll", but its name "NewRelic.Dispatchers" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Memoization.dll", but its name "NewRelic.Memoization" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.CallStack.AsyncLocal.dll", but its name "NewRelic.Providers.CallStack.AsyncLocal" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.TransactionContext.Asp.dll", but its name "NewRelic.Providers.TransactionContext.Asp" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.TransactionContext.Default.dll", but its name "NewRelic.Providers.TransactionContext.Default" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.TransactionContext.Wcf3.dll", but its name "NewRelic.Providers.TransactionContext.Wcf3" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.Asp35.dll", but its name "NewRelic.Providers.Wrapper.Asp35" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.HttpClient.dll", but its name "NewRelic.Providers.Wrapper.HttpClient" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.MongoDb.dll", but its name "NewRelic.Providers.Wrapper.MongoDb" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.Mvc3.dll", but its name "NewRelic.Providers.Wrapper.Mvc3" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.NServiceBus.dll", but its name "NewRelic.Providers.Wrapper.NServiceBus" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.Wcf3.dll", but its name "NewRelic.Providers.Wrapper.Wcf3" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.WebApi1.dll", but its name "NewRelic.Providers.Wrapper.WebApi1" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.WebApi2.dll", but its name "NewRelic.Providers.Wrapper.WebApi2" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.WebOptimization.dll", but its name "NewRelic.Providers.Wrapper.WebOptimization" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Providers.Wrapper.WebServices.dll", but its name "NewRelic.Providers.Wrapper.WebServices" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Reflection.dll", but its name "NewRelic.Reflection" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.SystemExtensions.dll", but its name "NewRelic.SystemExtensions" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.SystemInterfaces.dll", but its name "NewRelic.SystemInterfaces" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Testing.Assertions.dll", but its name "NewRelic.Testing.Assertions" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.Trie.dll", but its name "NewRelic.Trie" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.TypeInstantiation.dll", but its name "NewRelic.TypeInstantiation" didn't match. (TaskId:183)
16>          Considered "newrelic\Extensions\NewRelic.WeakActions.dll", but its name "NewRelic.WeakActions" didn't match. (TaskId:183)
16>          Considered "newrelic\NewRelic.Agent.Core.dll", but its name "NewRelic.Agent.Core" didn't match. (TaskId:183)
16>          Considered "newrelic\NewRelic.Agent.Extensions.dll", but its name "NewRelic.Agent.Extensions" didn't match. (TaskId:183)
16>          Considered "newrelic\NewRelic.Profiler.dll", but its name "NewRelic.Profiler" didn't match. (TaskId:183)
16>      Found related file "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.xml". (TaskId:183)
16>      The ImageRuntimeVersion for this reference is "v4.0.30319". (TaskId:183)

BUT, still, when I compile the views using aspnet_compiler.exe, it complains. And no matter where I put an assembly binding redirect (Applications's root Web.config, Web.config in Views folder), aspnet_compiler.exe doesn't want to respect it. And, it doesn't seem possible to get aspnet_compiler.exe to output anything about what it's actually doing (no log verbosity level settings...)

All I get when compiling the views, is a lot of warnings regarding version 5.2.2.0 vs version 5.2.3.0 of System.Web.Mvc:

16>ASPNETCOMPILER : warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
16>ASPNETCOMPILER : warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
16>ASPNETCOMPILER : warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
(lots of more lines)

16>Done executing task "AspNetCompiler". (TaskId:234)
16>Done building target "MvcBuildViews" in project "MyWeb.csproj".: (TargetId:376)
16>Target "Build: (TargetId:377)" in file "C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets" from project "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\Web\MyWeb\MyWeb.csproj" (target "Rebuild" depends on it):
16>Done building target "Build" in project "MyWeb.csproj".: (TargetId:377)
16>Target "AfterRebuild: (TargetId:378)" in file "C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets" from project "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\Web\MyWeb\MyWeb.csproj" (target "Rebuild" depends on it):
16>Done building target "AfterRebuild" in project "MyWeb.csproj".: (TargetId:378)
16>Target "Rebuild: (TargetId:379)" in file "C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets" from project "C:\Users\ErikBrandstadmoen\Source\Repos\myrepo\Web\MyWeb\MyWeb.csproj" (entry point):
16>Done building target "Rebuild" in project "MyWeb.csproj".: (TargetId:379)

Does anyone have any clues on where to continue troubleshooting? I can of course just ignore the CS1702 warning, but I feel that's like driving with my eyes half closed. Any help is appreciated.

Physics answered 29/9, 2015 at 19:51 Comment(8)
Try adding the desired assembly version in the Compilation tag in web.config. <compilation debug="true" targetFramework="4.5" optimizeCompilations="false" tempDirectory="bin\server\Debug"> <assemblies> <add assembly="System.Web.Mvc, Version=5.2.3.0 Culture=Neutral, PublicKeyToken=31bf3856ad364e35"/> </assemblies> </compilation>Suppositive
If you are referring to the Web.config in the Views folder, it is already there...Physics
and what about the main web.config? have you tried adding it there as well?Goop
Also, check if you don't reference 5.2.2.0 in any other places in web.configs (maybe one or more got missed when you updated to 5.2.3.0?).Goop
I have thoroughly checked every single .cs,.cshtml,.config,package.config,etc for the value 5.2.2.0 without any hits. And, yes, I have tried the mail web.config.Physics
I had the same problem recently and finally solved it, check my solution on stackoverlowTatary
I had the same problem recently and finally solved it, check my solution on stackoverlowTatary
Did you find a solution to this problem? My build log is riddled with these error messages, while I've already configured "nowarn" for 1702.Brigham
U
2

I don't know whether this will help or not but I had the same problem as you did before I noticed that my main "projectname.csproj" had set its version of Mvc 5.2.3.0 to private and my "projectname.infrastructure.csproj" had set its version to 5.2.2.0. I can only assume that this was the main cause of my version issues.

This is what my "projectname.csproj" looked like before I changed it...

<Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">    
    <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
    <Private>True</Private>
</Reference>

...And this is what it looked like after altering it...

<Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">    
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
</Reference>

After having done so I rebuilt my solution and debugged my projectname. Since then I havent come across any issues.

Urbina answered 11/11, 2015 at 12:53 Comment(0)
R
1

I have just had the same issue with the same nuget package where Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc is dependant on System.Web.Mvc Version=5.2.2.

I solved this my installing the required version of MVC and then updating the web.config for the project and for the views folder.

The thing that caught me out. is the

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      <add namespace="JQueryUIHelpers" /></namespaces>
    </pages>
  </system.web.webPages.razor>

I had to downgrade the MVC version for the type as well.

Rife answered 4/11, 2015 at 9:0 Comment(3)
So, basically, you downgraded MVC to 5.2.2 to satisfy Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc's dependency? But this shouldn't be necessary, should it? Isn't this what assembly binding redirects are for?Physics
There's an issue about this @ github.com/IdentityModel/Thinktecture.IdentityModel/issues/149Manchineel
I had the same problem recently and finally solved it, check my solution on stackoverlowTatary

© 2022 - 2024 — McMap. All rights reserved.