TargetFramework设置在ASP.net MVC中的web.config中意味着什么?

g.p*_*dou 66 asp.net asp.net-mvc

我们的ASP.NET MVC 5 Web应用程序之一具有以下web.config设置:

<system.web>
  <compilation debug="true" targetFramework="4.6" />
  <httpRuntime targetFramework="4.5" />
  <!--... many other things -->
</system.web>
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚为什么有两个targetFramework设置,编译目标4.6然后尝试在4.5下运行似乎是错误的...

显然我错过了什么,但是什么?

Tet*_*oto 46

targetFramework存在的原因web.config是为了在每个.NET Framework版本的更改之间保持兼容性问题.targetFrameworkon compilationhttpRuntime属于每个开发和部署环境之间的区别.

根据MSDN博客:

<compilation targetFramework="4.6" />
Run Code Online (Sandbox Code Playgroud)

选择执行编译时使用的.NET Framework参考程序集版本.(注意:Visual Studio要求此元素存在于Web.config中,即使我们自动推断它.)

此元素确定编译期间使用的程序集版本,以便从当前项目创建依赖项和相关程序集.

<httpRuntime targetFramework="4.5" /> 表示当前项目旨在使用.NET 4.5运行时程序集,而不会在将其加载到内存之前在部署机器中重新编译现有项目程序集.

因此,我们可以得出结论定义在该版本号targetFrameworkhttpRuntime旨在维持编译的项目和可用的组件之间的相容性在运行时间使用,这取决于其在目标机器被使用的运行时文件版本上元件.

因此,在您的情况下,这不是一个错误的行为,项目创建者只是希望保持运行时兼容性与具有类似特征(即版本4.5)的目标机器中可用的最低运行时版本,甚至是使用较新版本编译的项目.NET程序集.版本4.5和4.6之间的差异相对较小,因此在此上下文中将运行时版本降至4.5仍然可以接受.

相关参考:

https://msdn.microsoft.com/en-us/library/dn833123(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/dn833125(v=vs.110).aspx

  • 也许是我,我仍然不明白当我们选择使用4.6时,"......设计使用.NET 4.5 ..."的某些内容"...在执行编译时使用了.NET Framework的参考程序集版本......" (4认同)
  • 你指的是"向后兼容性".但是根据定义它意味着:期望更低版本的东西将在更高版本的上下文中无缝运行.(因为较高版本是向后兼容的"不是相反的. (4认同)
  • .NET 4.6 是 .NET 4.5 的子集更新,因此也基于 .NET 4.5 程序集引用,但有一些细微差别(请注意,.NET 自 2.0 版起具有向后兼容性支持)。事实上,该项目将使用 4.6 版程序集引用进行编译,但当更高版本的运行时引用不可用时,可以在目标机器上使用 4.5 版运行时引用。 (2认同)
  • 在msdn上找到了可以解释得更多的好文章。https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/ (2认同)
  • 这个答案看起来很错误,而且回答者已经把它放回到前面了;因此,如果我使用 4.6 中的功能并使用它进行编译,当我部署到目标服务器(4.5)时,应用程序应该会失败,因为旧版本中不存在所述功能。 (2认同)

Mub*_*har 8

根据我的理解<compilation debug="true" targetFramework="4.6" /><httpRuntime targetFramework="4.5" />因为httpRuntime被翻译成以下内容而被压制

<compilation targetFramework="4.5" />
<machineKey compatibilityMode="Framework45" />
<pages controlRenderingCompatibilityVersion="4.5" />
Run Code Online (Sandbox Code Playgroud)

因此,以上设置可能是由于某些误解或错误,如果直接由VS完成,我认为这是不对的。

要了解此设置和所有其他相关内容如何意味着由Microsoft员工撰写的标题为“关于<httpRuntime targetFramework>的全部”的博客可能会对您有所帮助。但是要点是:

当在计算机上更新现有框架时,.NET Framework(包括ASP.NET)将努力保持接近100%的兼容性。我们尝试尽可能确保如果针对.NET Framework 4开发和部署了应用程序,则该应用程序将继续在4.5上运行。这通常意味着在版本之间保持产品中的古怪,错误或不良行为,因为修复它们可能会对依赖那些行为的应用程序产生负面影响。

  • 在博客文章中,它建议在web.config中显式设置的任何设置都不会被httpRuntime设置所隐含的内容覆盖:“即使&lt;httpRuntime targetFramework =“ 4.5” /&gt;通常隐含&lt;pages controlRenderingCompatibilityVersion = “ 4.5” /&gt;,运行时将注意到您已经显式设置了controlRenderingCompatibilityVersion并将尊重您的设置。 (2认同)
  • 仅作为参考,如果在未设置httpRuntime的情况下设置了编译,则machinekey和pages设置的默认值将不为4.5,需要手动进行设置。这在尝试在旧版网站与.net核心网站之间共享cookie时非常重要。 (2认同)