Это меня совершенно сбило с толку. Я тестирую обновление нашей инфраструктуры сборки до .NET 4.5.2, которая в настоящее время находится на .NET 4.5.1.
Моим первым шагом было создание проекта ASP.NET MVC на моем компьютере разработчика, ориентированного на .NET 4.5.2. Я использую VS 2013 и у меня установлен пакет разработчика 4.5.2. Я написал лишний код, используя методы, которые поддерживаются только в .NET 4.5.2:
public ActionResult Index()
{
if (!Response.HeadersWritten)
Response.AddOnSendingHeaders((c) => { c.Response.AddHeader("Foo", "Bar"); });
return View();
}
Response.HeadersWritten
и Response.AddOnSendingHeaders
представлены только в версии .NET 4.5.2 System.Web.dll
. Как и ожидалось, это отлично компилируется локально.
Перед обновлением сервера сборки до 4.5.2 я думал, что просто запущу сборку вышеупомянутого проекта на сервере сборки из системы управления версиями, чтобы убедиться, что она не работает. Однако сборка завершается успешно, выдавая только следующее предупреждение:
Эталонные сборки для фреймворка ".NETFramework,Version=v4.5.2" не найдены. Чтобы решить эту проблему, установите пакет SDK или Targeting Pack для этой версии фреймворка или перенастройте приложение на версию фреймворка. для которых у вас установлен пакет SDK или Targeting Pack. Обратите внимание, что сборки будут разрешены из глобального кэша сборок (GAC) и будут использоваться вместо эталонных сборок. Поэтому ваша сборка может быть неправильно ориентирована на предполагаемую вами структуру.
Я загружаю скомпилированные двоичные файлы из папки на свой локальный компьютер, и приложение работает нормально и добавляет заголовок foo
.
Как компилируется этот код 4.5.2! Нет никаких локальных ссылок на System.Web, зарегистрированных в создаваемом источнике, и ничего не загружается через пакет nuget или что-то подобное.