MSBuild не ориентирован на правильную сборку? - PullRequest
0 голосов
/ 16 июня 2011

Мы настраиваем новый сервер сборки с 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. Я понятия не имею, как что-то подобное может произойти, но мне придется выправить фреймворки на этом сервере.

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Это не MSBuild ... это фреймворк 2.0 на более новой машине.Файл system.web.dll немного отличается на двух компьютерах:

Текущая машина: версия System.Web.dll = 2.0.50727.3618 Новая машина: версия System.Web.dll = 2.0.50727.1433

Я думаю, что кто-то здесь пропустил SP на более новой машине.Я удивлен тем, что между этими номерами сборок будет существенная разница в классах.

0 голосов
/ 16 июня 2011

Под ссылками вашего проекта убедитесь, что ссылка на System.Web относится к версии DLL версии v2, а не к v1.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...