Мы настраиваем новый сервер сборки с CruiseControl.Net и MSBuild. После небольшой работы он в основном работает, за исключением одной проблемы с одним проектом (из семи), который отказывается создавать под MSBuild. Вот ошибка:
ошибка CS1061: «System.Web.UI.HtmlControls.HtmlForm» не содержит определения для «Action», а метод расширения «Action» не принимает первый аргумент типа «System.Web.UI.HtmlControls.HtmlForm». может быть найдено (вам не хватает директивы using или ссылки на сборку?)
Весь код все еще хорошо компилируется на старом сервере сборки, и новый сервер сборки, хотя и не является точным соответствием, настроен аналогично старому.
Единственная причина, по которой я могу придумать эту ошибку, заключается в том, что System.Web.dll, который используется для компиляции, это v1.1, а не v2.0, поскольку метод Action не был в платформе v1.1. .
Я не уверен, почему эта ошибка, которую мы никогда не видели на старом сервере сборки, появляется на новом сервере. Я даже не уверен, как именно сверлить, чтобы найти возможную причину. Я попытался запустить MSBuild с набором параметров /toolsversion:3.5. Я запускал с уровнем многословия, установленным на самый высокий уровень, затем сравнил вывод со старым сервером сборки, но не было ничего, что указывало бы на причину (по крайней мере, ничего, что было очевидно для меня).
Есть несколько проектов, которые были построены до этого, и ни один из них не потерпел неудачу, хотя все они используют более свежие версии фреймворка (3.5). Это единственный проект, ссылающийся на System.Web.HtmlControls.
У кого-нибудь были подобные проблемы? Может кто-нибудь предложить какую-либо помощь / советы о том, как лучше всего попытаться разобраться в проблемах MSBuild?
Обновление
Файлы .sln и .csproj одинаковы для двух серверов. В файле .csproj я обратил внимание на то, что ссылка System.Web не имеет требований к структуре:
<Reference Include="System.Web" />
Я попытаюсь добавить <RequiredTargetFramework>
к этой ссылке, чтобы увидеть, если это имеет значение.
Обновление 2
Обновление ссылки в файле csproj на следующее:
<Reference Include="System.Web">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
Не похоже на работу. Следующий шаг, загрузите SDK, чтобы я мог использовать ILDASM на System.Web, чтобы увидеть, может быть, что-то не так с моей установкой фреймворка (в частности, есть ли у system.web.dll в моей фреймворке v2.0 этот метод).
Обновление 3
Кажется, проблема связана с system.web.dll в папке фреймворка v2.0.5072. не имеет метод Action в классе HtmlForm. Я понятия не имею, как что-то подобное может произойти, но мне придется выправить фреймворки на этом сервере.