Вопрос

Недавно я обновил проект веб-приложения (а также некоторые зависимые проекты) с .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).

Если ваш метод действительно принимает определенный тип делегата, вы можете проигнорировать этот ответ :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top