Как написать для .net 3.5 в Visual Studio 2010 - PullRequest
1 голос
/ 21 декабря 2010

У меня есть проект ASP MVC 2, изначально написанный в VS 2008, но теперь обновленный до VS 2010. Однако я хочу остаться с .net 3.5, поскольку в производственной среде не всегда установлен .net 4. Я думал, что это возможно. Когда я обновил проект, я ответил «нет» на вопрос об обновлении версии .net framework. Я проверил, и .net 3.5 установлен в качестве целевой платформы в дополнительных параметрах компиляции для проекта.

Моя проблема в том, что я могу написать код, который прекрасно работает и работает в VS, но не работает в среде .net 3.5. Например, я добавил функцию с необязательным параметром типа Integer? (обнуляемое целое число). Это разрешено в 4, но не в 3.5? Во всяком случае, работает хорошо в VS 2010. Однако, когда я пытаюсь собрать и развернуть, я сталкиваюсь с одной из двух проблем. (Мы используем пользовательские сценарии сборки / развертывания - сборка использует msbuild на отдельном сервере сборки.)

Проблема 1, если я пытаюсь использовать версию 3.5 сборки msbuild. Затем сборка завершается с сообщением "ошибка BC31405: необязательные параметры не могут иметь типы структуры." .

Проблема 2 в том, что если я пытаюсь использовать версию msnet для .net 4 на сервере сборки (помните, что целевая среда по-прежнему 3.5, единственное изменение - какой исполняемый файл msbuild используется сценарием сборки). В этом случае он строит, но когда я пытаюсь запустить сайт на сервере, на котором установлен 3.5, но не установлен .net 4, я получаю сообщение об ошибке «Не удалось загрузить файл или сборку« ProjectName.XmlSerializers »или одну из ее зависимостей. . Эта сборка построена средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена. "

В соответствии с MSDN (http://msdn.microsoft.com/en-us/library/bb398202.aspx) все, что мне нужно сделать, это убедиться, что целевая платформа правильная (и ссылки, но, похоже, нет проблемы в том, что она прекрасно работает против 3.5, пока я избегать определенных синтаксисов и т. д.)

Проблема в том, что у меня нет ошибки в VS, чтобы сказать мне, что может быть проблема, если я использую те структуры, которые не будут создаваться. В соответствии со статьей Обзор многоцелевого ориентирования Visual Studio на MSDN (http://msdn.microsoft.com/en-us/library/bb398197.aspx) ), когда вы работаете над проектом, нацеленным на более раннюю версию .NET Framework, Visual Studio динамически вносит изменения в Среда разработки, например следующая ... Он компилируется и собирается с соответствующей версией компилятора и с соответствующими параметрами компилятора " Так почему он компилируется в VS, а не с msbuild?

Мне было интересно, была ли проблема в свойстве набора инструментов (если я укажу /tv:3.5 в командной строке для msbuild 4, я получу те же ошибки сборки, что и в msbuild 3.5). Согласно статье MSBuild Multitargeting (http://msdn.microsoft.com/en-us/library/ee395432.aspx) "Вы определяете набор инструментов, устанавливая атрибут ToolsVersion элемента Project в файле проекта" . Однако, если я изменяю ToolsVersion = "4.0" до ToolsVersion = "3.5" в файле .vbproj, а затем при попытке перезагрузить проект появляется Мастер преобразования Visual Studio . 1034 *

Итак, как я могу:

A - Получить VS 2010, чтобы признать, что это проект .net 3.5 и использовать подходящий фоновый компилятор и, следовательно, показывать мне ошибки во время разработки (до того, как он попадет на сервер сборки)?

или

B - Собрать проект таким способом (например, с msbuild 4), что он будет собираться, но при этом работать только в среде .net 3.5?

1 Ответ

1 голос
/ 21 декабря 2010

Похоже, вы пытаетесь использовать C# 4.0 Language Features в .Net Framework 3.5 приложении.

Не используйте новые функции, введенные в C# 4.0, такие как:

И с тобой все будет в порядке.

...