Почему MSBuild ToolsVersion 4.0 не может создавать старые проекты? - PullRequest
1 голос
/ 28 июня 2010

Мы используем Cruse Control для управления процессом сборки.Поскольку мы конвертируем проекты vs2008 в vs2010, мы оставляем целевую платформу равной 3,5 для веб-проектов и проектов библиотек классов.

На данный момент мы не проводим и преобразуем все наши решения в vs2010;нет, если нам не нужно.

Я недавно обновил файлы проектов MSbuild, которые круиз-контроль использует для указания на MSBuild 4.0, чтобы наш процесс сборки мог создавать проекты vs2010.

C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe

Все было хорошо, пока веб-проект, ориентированный на платформу 4.0, не былсовершено.В этот момент появляется эта ошибка:

CS0433: тип 'System.Web.Routing.RouteCollection' существует в обоих c: \ Windows \ Microsoft.NET \ assembly \GAC_32 \ System.Web \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Web.dll и c: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework \ v3.5 \ System.Web.Routing.dll в глобальном.asax.cs (15, 43)

В этот момент я узнал о папках Windows/Microsoft.NET/Assembly.

Сейчас ... Все проекты MSBuild, даже если они использовалиMSBuild 4.0, версия инструментов по-прежнему была установлена ​​на 3,5.Итак, почему целевая сборка 3.5 смотрела на новые папки сборки 4.0 и обнаруживала этот конфликт?Вероятно, потому что я использовал MSBuild 4.0.Но если я смогу изменить версию инструмента, которую использует MSBuild, можно подумать, что я могу сказать ей целевую версию 3.5, не беспокоясь об этих потенциальных конфликтах.

Чтобы решить эту проблему, я обратился к соответствующим файлам проекта MSBuild, которые отправляются в путешествие.контроль использует и изменил свои инструменты версии до 4.0.Это прошло эту конфликтную ошибку.Но теперь каждый раз, когда он пытается создать проект, который находится в решении, которое мы еще не преобразовали в проект vs2010, он ломается с такой ошибкой:

MyProject.csproj в SomeFilePath: LC0000: 'Не удалось загрузить файл или сборку или одну из ее зависимостей.Эта сборка создана средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена. 'в LC (0, 0)

Если я открою решение, содержащее этот проект в Visual Studio 2010, и выполню преобразование, соберу его и передам, а затем принудительно выполню другую сборку, я получуэта ошибка только для того, чтобы обнаружить, что другой, еще не преобразованный проект выдает ту же ошибку.

Так что теперь я точно использую MSBuild 4.0 и для реального нацеливания на структуру 4.0.Почему 4.0 не может создать 3.5 проекта или vs2008 решения?

1 Ответ

4 голосов
/ 29 июня 2010

Проблема в том, что вы перенесли часть своих проектов в Visual Studio 2010. Любой проект 2008 года, который ссылается на проект 2010 (по ссылке на проект), выдаст вам эту ошибку времени компиляции. Попробуйте обновить все файлы .csproj до 2010 и попробуйте перестроить заново.

...