Pergunta

Eu recentemente atualizado um projeto de aplicativo Web (bem como alguns projectos dependentes) do .NET 2.0 para o .NET 3.5 usando o construído em ferramenta de conversão. Tudo funciona bem como o uso de MS AJAX 3,5 vs as bibliotecas MS AJAX externos em 2.0.

Meu problema ocorre quando eu tentei usar a nova sintaxe expressão lambda. O compilador não irá reconhecer expressões lambda como sintaxe válida. A versão de trabalho quadro de destino está definido para 3,5 em todos os projetos na solution.I também foi capaz de usar com sucesso expressões lambda em um projeto de biblioteca na mesma solução.

A é o código que está me dando o erro. Nada muito especial.

ObjectFactory.Initialize(x => 
        {
            x.ForRequestedType<IUnitIdSequencingService>().TheDefaultIsConcreteType<UnitIdSequencingService>();
            x.ForRequestedType<IGadgetDAO>().TheDefault.Is.OfConcreteType<GadgetDAO>().WithCtorArg("instance").EqualToAppSetting("OSHAInspectionManager");

        });

Os erros específicos que estou recebendo são:

Error   102 Invalid expression term '>' D:\projects\bohlco\pmr\PMR\Web\App_Code\Bootstrapper.cs 13  41  D:\...\Web\

Qualquer ajuda seria muito apreciada. Fui pesquisar Google com pouca sorte

Foi útil?

Solução

Se algum da página está sendo compilado por ASP.NET (ou seja, você não pré-compilar o WAP), então você vai precisar para assegurar que ASP.NET sabe sobre o C # 3.0 (.NET 3.5) compilador . Verifique se o seguinte é no 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>

Além disso, se você está hospedando no IIS, certifique-se de que a pasta correta é definido como um aplicativo, e que ele está usando v2.blah ASP.NET (não v1.1.blah).

Outras dicas

Eu não tenho muita experiência com a ferramenta de conversão VS 2008, mas eu sei outras ferramentas de conversão de projeto ter tido "problemas". Eu recomendo que você comparar o arquivo csproj para o seu projeto 'quebrado' para um que está funcionando. Talvez o utilitário de conversão quebrou algo em seu projeto. Você também pode tentar criar um novo projeto e copiar sobre todos os arquivos de origem também.

par de aros que você precisa para saltar através de projetos existentes re referências, TBH eu achei mais fácil simplesmente criar um novo projeto e adicionar meus arquivos de origem existentes para o novo projeto.

Eu estou supondo que o parâmetro para o método que você está passando o lambda em aceita um delegado como parâmetro?

Se isto é verdade, então você vai precisar para lançar o lambda como um tipo específico de delegado. Esta é uma espécie de confundir, mas o que você precisa saber é que a lambda nem sempre pode-se inferir corretamente então você precisa lançá-lo ou alterar a assinatura do método para aceitar tipos específicos de delegados.

tente o seguinte:

ObjectFactory.Initialize((Action<T>)(x => // where T is the typeof x
{
    // ...
}));

Além disso, você pode tentar fazer algumas sobrecargas para Inicializar a aceitar tipos específicos de delegados (como Ação).

Se o método não aceita um tipo específico de tipo delegado que você pode ignorar esta resposta:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top