2008-12-31 6 views
1

J'ai récemment mis à niveau un projet d'application Web (ainsi que certains projets dépendants) de .net 2.0 vers .net 3.5 à l'aide de l'outil de conversion intégré. Tout fonctionne bien, comme l'utilisation de MS AJAX 3.5 par rapport aux bibliothèques externes MS AJAX dans la version 2.0.Visual Studio 2008 ne reconnaît pas la syntaxe d'expression lambda

Mon problème se produit lorsque j'ai essayé d'utiliser la nouvelle syntaxe Lambda Expression. Le compilateur ne reconnaîtra pas les expressions Lambda comme syntaxe valide. La version de travail de cadre cible est définie sur 3.5 dans tous les projets de la solution. J'ai également réussi à utiliser des expressions Lambda dans un projet de bibliothèque dans la même solution.

C'est le code qui me donne l'erreur. Rien de spécial.

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

     }); 

Les erreurs spécifiques que je reçois sont:

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

Toute aide serait grandement apprécié. J'ai cherché Google avec peu de chance

+0

La fonction suivante est-elle compilée? vide privé v() {Func f = x => x; f (1); } – configurator

Répondre

7

Si l'une de la page est compilé par ASP.NET (vous n'êtes pas pré-WAP compilez), vous devez vous assurer qu'ASP.NET connaît le compilateur C# 3.0 (.NET 3.5). Vérifiez les éléments suivants est dans le 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> 

En outre, si vous hébergez dans IIS, assurez-vous que le dossier correct est défini comme une application, et qu'il utilise v2.blah de ASP.NET (non v1. 1.blah).

+0

Merci! J'ai eu le sentiment que le problème était avec les options du compilateur. J'ai fouillé autour de Visual Studio et n'ai rien vu d'utile. –

+0

+1 Exactement ce que je cherchais –

0

Je n'ai pas beaucoup d'expérience avec l'outil de conversion VS 2008, mais je sais que d'autres outils de conversion de projet ont eu des "problèmes". Je vous recommande de comparer le fichier .csproj pour votre projet «cassé» à celui qui fonctionne. Peut-être que l'utilitaire de conversion a cassé quelque chose dans votre projet. Vous pouvez également essayer de créer un nouveau projet et de copier tous les fichiers source.

0

quelques liens que vous devez parcourir avec des projets existants concernant les références, TBH J'ai trouvé plus simple de créer un nouveau projet et d'ajouter mes fichiers source existants au nouveau projet.

0

Je devine le paramètre à la méthode que vous passez le lambda dans accepte un délégué en tant que paramètre?

Si cela est vrai, vous devrez convertir le lambda en un type spécifique de délégué. C'est un peu confus, mais ce que vous devez savoir, c'est qu'un lambda ne peut pas toujours être déduit correctement, donc vous devez le transformer ou changer la signature de la méthode pour accepter des types spécifiques de délégués.

essayez ceci:

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

vous pouvez aussi essayer de faire quelques pour Initialize surcharges accepter certains types de délégués (comme Action).

Si votre méthode accepte les un type spécifique de type délégué que vous pouvez ignorer cette réponse :)

+0

Pour ce cas, utilisez Initialize ((T x) => {...}); serait plus clair. En outre, le message d'erreur du compilateur serait différent. – configurator

Questions connexes