Visual Studio 2008 не распознает синтаксис лямбда-выражения
-
03-07-2019 - |
Вопрос
Недавно я обновил проект веб-приложения (а также некоторые зависимые проекты) с .net 2.0 до .net 3.5, используя встроенный инструмент преобразования.Все работает хорошо, например, с использованием MS AJAX 3.5 противвнешние библиотеки MS AJAX в версии 2.0.
Моя проблема возникает, когда я пытаюсь использовать новый синтаксис лямбда-выражения.Компилятор не распознает лямбда-выражения как допустимый синтаксис.Целевая рабочая версия фрейма установлена равной 3.5 во всех проектах решения.Я также смог успешно использовать лямбда-выражения в Библиотечном проекте в том же решении.
Это код, который выдает мне ошибку.Ничего особенного.
ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IUnitIdSequencingService>().TheDefaultIsConcreteType<UnitIdSequencingService>();
x.ForRequestedType<IGadgetDAO>().TheDefault.Is.OfConcreteType<GadgetDAO>().WithCtorArg("instance").EqualToAppSetting("OSHAInspectionManager");
});
Конкретные ошибки, которые я получаю, следующие:
Error 102 Invalid expression term '>' D:\projects\bohlco\pmr\PMR\Web\App_Code\Bootstrapper.cs 13 41 D:\...\Web\
Мы были бы очень признательны за любую помощь.Я искал в Google, но безуспешно
Решение
Если какая-либо страница компилируется ASP.NET (т.е.вы не выполняете предварительную компиляцию WAP), тогда вам нужно будет убедиться, что ASP.NET знает о компиляторе C # 3.0 (.NET 3.5).Убедитесь, что в web.config
:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp"
extension=".cs"
warningLevel="4"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compliers>
</system.codedom>
Кроме того, если вы размещаете в IIS, убедитесь, что в качестве приложения указана правильная папка и что оно использует ASP.NET версию v2.blah (не версию v1.1.blah).
Другие советы
У меня нет большого опыта работы с инструментом преобразования VS 2008, но я знаю, что у других инструментов преобразования проектов были "проблемы".Я бы порекомендовал вам сравнить файл .csproj для вашего "сломанного" проекта с тем, который работает.Возможно, утилита преобразования что-то сломала в вашем проекте.Вы также можете попробовать создать новый проект и скопировать все исходные файлы.
пара обручей, через которые вам нужно пройти со ссылками на существующие проекты, но я обнаружил, что проще просто создать новый проект и добавить мои существующие исходные файлы в новый проект.
Я предполагаю, что параметр метода, в который вы передаете лямбда-выражение, принимает делегат в качестве параметра?
Если это верно, то вам нужно будет привести лямбда-выражение как определенный тип делегата.Это немного сбивает с толку, но что вам нужно знать, так это то, что лямбда-выражение не всегда может быть выведено правильно, поэтому вам нужно привести его или изменить сигнатуру метода, чтобы он принимал определенные типы делегатов.
попробуй это:
ObjectFactory.Initialize((Action<T>)(x => // where T is the typeof x
{
// ...
}));
Также вы могли бы попробовать выполнить несколько перегрузок для Initialize, чтобы принимать определенные типы делегатов (например, Action).
Если ваш метод действительно принимает определенный тип делегата, вы можете проигнорировать этот ответ :)