Що означають налаштування TargetFramework у web.config в ASP .NET MVC?


80

Один з наших веб-додатків ASP.NET MVC 5 має такі налаштування web.config:

<system.web>
  <compilation debug="true" targetFramework="4.6" />
  <httpRuntime targetFramework="4.5" />
  <!--... many other things -->
</system.web>

Незрозуміло, чому існують два налаштування targetFramework, і здається неправильним компілювати націлювання 4.6, а потім намагатися виконати під 4.5 ...

Очевидно, мені чогось не вистачає, але що?


5
Пов’язаний допис у блозі blogs.msdn.microsoft.com/webdev/2012/11/19/…
nu everest

Відповіді:


57

Причина targetFrameworkіснування в web.configтому, щоб уникнути проблем сумісності між порушеннями змін для кожної версії .NET Framework. Різниця між targetFrameworkна compilationі httpRuntimeналежить кожному середовища розробки і розгортання.

Згідно з блогом MSDN :

<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


9
Можливо, це я, я досі не розумію, як може щось "... розроблене для використання .NET 4.5 ...", коли ми використовували 4.6, коли вибрано "... версія компіляційних збірок .NET Framework використовується під час компіляції ... "
g.pickardou

2
.NET 4.6 - це оновлення підмножини .NET 4.5, таким чином, також засноване на посиланнях на збірки .NET 4.5 з деякими незначними відмінностями (зверніть увагу, що .NET має підтримку зворотної сумісності з версії 2.0). Фактично, проект буде скомпільований з використанням посилань на збірки версії 4.6, але зможе використовувати посилання на версію 4.5 на цільовій машині, коли недоступні версії вищої версії.
Тецуя Ямамото,

4
Ви маєте на увазі "зворотну сумісність". Однак це означає за визначенням: річ, яка очікує нижчої версії, буде функціонувати безперебійно в контексті вищої версії. (оскільки вища версія сумісна із зворотною
стороною

4
Знайдено хорошу статтю, яка може пояснити трохи більше про це на msdn. blogs.msdn.microsoft.com/webdev/2012/11/19/…
розробник

2
Ця відповідь виглядає настільки неправильною, і відповідач повернув її вперед; Отже, якщо я використовую функції в версії 4.6 та компілюю з ними, при розгортанні на цільовому сервері (4.5) програма повинна вийти з ладу, оскільки зазначені функції не існують у попередній версії.
joedotnot

9

Згідно з моїм відчуттям , <compilation debug="true" targetFramework="4.6" />що придушується з допомогою <httpRuntime targetFramework="4.5" />так httpRuntimeперекладається на наступні

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

Отже, вищевказане налаштування, можливо, пов’язане з деяким непорозумінням або помилкою, якщо це було зроблено безпосередньо VS, що, на мою думку, не відповідає дійсності.

Щоб зрозуміти, як цей параметр та всі інші пов’язані матеріали означають, що цей блог під назвою Все про <httpRuntime targetFramework>, написаний співробітником Microsoft, може вам допомогти. Але суть цього полягає;

.NET Framework (включаючи ASP.NET) прагне підтримувати майже 100% сумісність, коли на машині оновлюється існуюча платформа. Ми намагаємось забезпечити якомога більше того, що якщо додаток було розроблено та розгорнуто щодо .NET Framework 4, воно просто продовжуватиме працювати на 4.5. Зазвичай це означає збереження химерної, помилкової або небажаної поведінки в продукті між версіями, оскільки їх виправлення може негативно вплинути на програми, які покладались на цю поведінку.


4
У дописі в блозі він передбачає, що будь-які налаштування, явно встановлені в web.config, не будуть замінені тим, що передбачається параметром httpRuntime: "Навіть якщо <httpRuntime targetFramework =" 4.5 "/> зазвичай означатиме <pages controlRenderingCompatibilityVersion = "4.5" />, час виконання помітить, що ви вже чітко встановили controlRenderingCompatibilityVersion і буде поважати ваше налаштування. "
code4pi

2
Тільки для інформації, якщо компіляція встановлена, а httpRuntime не встановлено, параметр машинного ключа та сторінок не матиме значення 4,5 за замовчуванням, їх потрібно встановити вручну. Це досить важливо під час спроби поділитися файлами cookie між застарілим веб-сайтом та основним веб-сайтом .net.
Джарван

яка інтерпретація, якщо targetFramework відсутня як для компіляції, так і для HttpRuntime?
Аніруд Гоель

будь ласка, підтвердьте за допомогою google, але я думаю, ці атрибути використовуються для обмеження сфери застосування та фреймворку до певної версії, однак, якщо не вказано, можливо, це передбачає відсутність обмежень і спробує запустити будь-яку останню встановлену версію. Це може бути поганою ідеєю, хоча припускаючи, що у вас можуть бути деякі програми, що працюють у старій версії, наприклад, 4.0, коли ви встановлюєте іншу програму, яка, можливо, використовує останні функції фреймворка, наприклад 4.7.2.
Мубашар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.