System.Web.Mvc 5.2.2.0 и 5.2.3.0 проблема с версиями aspnet_compiler

У меня проблемы при включении компиляции представлений в Visual Studio. У меня довольно стандартное приложение ASP.NET MVC 5, с множеством ссылок. Я ссылаюсь на System.Web.Mvc 5.2.3.0 (последний на данный момент), но, похоже, проблемы компиляции с v. 5.2.2.0 против 5.2.3.0. Отличный инструмент AsmSpy ( https://github.com/mikehadlow/AsmSpy) сообщает мне, какие сборки ссылаются на какую версию 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

Итак, виновным является Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc. Но я добавил перенаправление привязки сборки в корневой web.config приложения, например так:

  <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>

Чтобы попытаться найти причину проблемы, я включил ведение журнала сборки диагностики, которое выплевывает к северу от 260000 строк журнала, в том числе:

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)

НО, тем не менее, когда я компилирую представления, используя aspnet_compiler.exe, он жалуется. И независимо от того, куда я помещаю перенаправление привязки сборки (корневой каталог приложений Web.config, Web.config в папке Views), aspnet_compiler.exe не хочет его уважать. И, кажется, невозможно заставить aspnet_compiler.exe выводить что-либо о том, что он на самом деле делает (без настроек уровня многословия журнала...)

Все, что я получаю при компиляции представлений, это много предупреждений относительно версии 5.2.2.0 против версии 5.2.3.0 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)

У кого-нибудь есть какие-либо подсказки, где продолжить устранение неполадок? Конечно, я могу просто проигнорировать предупреждение CS1702, но я чувствую, что это все равно что ехать с полузакрытыми глазами. Любая помощь приветствуется.

2 ответа

Я не знаю, поможет ли это или нет, но у меня была та же проблема, что и у вас, прежде чем я заметил, что мой основной "projectname.csproj" установил свою версию Mvc 5.2.3.0 на private и мой "projectname.infrastructure.csproj". "установил свою версию на 5.2.2.0. Я могу только предположить, что это было основной причиной проблем с моей версией.

Вот как выглядел мой "projectname.csproj" до того, как я его изменил...

<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>

... И вот как это выглядело после изменения...

<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>

Сделав это, я перестроил свое решение и отладил имя проекта. С тех пор я не сталкивался с какими-либо проблемами.

У меня только что была та же проблема с тем же пакетом nuget, где Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc зависит от System.Web.Mvc Version=5.2.2.

Я решил эту проблему, установив требуемую версию MVC, а затем обновив web.config для проекта и для папки views.

То, что меня поймало. это

<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>

Мне пришлось понизить версию MVC для этого типа.

Другие вопросы по тегам