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 compilation和httpRuntime属于每个开发和部署环境之间的区别.
根据MSDN博客:
Run Code Online (Sandbox Code Playgroud)<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
根据我的理解<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上运行。这通常意味着在版本之间保持产品中的古怪,错误或不良行为,因为修复它们可能会对依赖那些行为的应用程序产生负面影响。
| 归档时间: |
|
| 查看次数: |
43498 次 |
| 最近记录: |