【问题标题】:System.Web.Mvc 5.2.2.0 vs. 5.2.3.0 versioning issue with aspnet_compilerSystem.Web.Mvc 5.2.2.0 与 aspnet_compiler 的 5.2.3.0 版本控制问题
【发布时间】:2015-11-11 20:53:25
【问题描述】:

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

为了试图找出问题的根源,我打开了诊断构建日志记录,它会吐出 260,000 行日志以北,包括:

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 输出任何关于它实际在做什么的信息(没有日志详细级别设置......)

我在编译视图时得到的只是很多关于 System.Web.Mvc 版本 5.2.2.0 和 5.2.3.0 版本的警告:

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 警告,但我觉得这就像半闭着眼睛开车一样。任何帮助表示赞赏。

【问题讨论】:

  • 尝试在 web.config 的 Compilation 标记中添加所需的程序集版本。 &lt;compilation debug="true" targetFramework="4.5" optimizeCompilations="false" tempDirectory="bin\server\Debug"&gt; &lt;assemblies&gt; &lt;add assembly="System.Web.Mvc, Version=5.2.3.0 Culture=Neutral, PublicKeyToken=31bf3856ad364e35"/&gt; &lt;/assemblies&gt; &lt;/compilation&gt;
  • 如果您指的是 Views 文件夹中的Web.config,它已经存在...
  • 那么主 web.config 呢?您是否也尝试将其添加到那里?
  • 另外,请检查您是否在web.configs 的任何其他地方没有引用 5.2.2.0(更新到 5.2.3.0 时可能遗漏了一个或多个?)。
  • 已经彻底检查了每个 .cs、.cshtml、.config、package.config 等文件中的 5.2.2.0 值,没有任何命中。而且,是的,我已经尝试过邮件 web.config。

标签: c# asp.net-mvc aspnet-compiler thinktecture-ident-model


【解决方案1】:

我不知道这是否会有所帮助,但在我注意到我的主要“projectname.csproj”已将其 Mvc 5.2.3.0 版本设置为私有和我的“projectname.csproj”之前,我遇到了与您相同的问题。 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>

完成此操作后,我重建了我的解决方案并调试了我的项目名称。从那以后我没有遇到任何问题。

【讨论】:

    【解决方案2】:

    我刚刚在 Thinktecture.IdentityModel.Owin.ResourceAuthorization.Mvc 依赖于 System.Web.Mvc Version=5.2.2 的同一个 nuget 包中遇到了同样的问题。

    我解决了这个问题,我安装了所需版本的 MVC,然后更新了项目和视图文件夹的 web.config。

    让我抓狂的事情。是

    <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 版本。

    【讨论】:

    猜你喜欢
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多