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

时间:2016-10-21 07:16:33

标签: 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>

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

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

2 个答案:

答案 0 :(得分:41)

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

根据MSDN blog

<compilation targetFramework="4.6" />
     

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

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

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

因此,我们可以得出targetFramework元素httpRuntime上定义的版本号,用于在运行时使用中保持编译项目和可用程序集之间的兼容性,具体取决于目标中使用的运行时文件版本机。

因此,在您的情况下,这不是一个错误的行为,项目创建者只是希望保持运行时兼容性与具有类似特征(即版本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

答案 1 :(得分:5)

根据我的理解,<compilation debug="true" targetFramework="4.6" /><httpRuntime targetFramework="4.5" />抑制,因为httpRuntime被翻译为以下

<compilation targetFramework="4.5" />
<machineKey compatibilityMode="Framework45" />
<pages controlRenderingCompatibilityVersion="4.5" />

所以上面的设置可能是由于一些误解或一个错误,如果由VS直接完成,我不相信是真的。

要了解此设置和所有其他相关内容的含义,这个由Microsoft员工撰写的标题为All about <httpRuntime targetFramework>的博客可能会对您有所帮助。但它的要点是;

  

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