2008-12-31 99 views
1

我最近使用内置的转换工具将.net 2.0中的Web应用程序项目(以及一些相关项目)升级到.net 3.5。一切运行良好,如使用MS AJAX 3.5与2.0中的外部MS AJAX库。Visual Studio 2008无法识别Lambda表达式语法

我尝试使用新的Lambda表达式语法时出现了我的问题。编译器不会将Lambda表达式识别为有效的语法。目标框架工作版本在解决方案中的所有项目中都设置为3.5。我也能够在同一解决方案中的Libraries项目中成功使用Lambda表达式。

这是给我错误的代码。没什么特别的。

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\ 

任何帮助将不胜感激。我一直在搜索谷歌,很幸运

+0

以下函数是否编译? private void v(){Func f = x => x; F(1); } – configurator 2008-12-31 16:29:32

回答

7

如果任一页面的是由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)。

+0

谢谢!我有一个感觉问题是编译器选项。我在Visual Studio中探索,并没有看到任何有用的东西。 – 2008-12-31 16:43:11

0

我对VS 2008转换工具没有太多经验,但我知道其他项目转换工具有“问题”。我建议你比较你的'破碎'项目的.csproj文件和正在工作的文件。也许转换工具在你的项目中破坏了一些东西。您也可以尝试创建一个新项目并复制所有源文件。

0

你需要通过现有的项目重新引用,TBH跳过几个箍我发现更容易创建一个新项目并将我现有的源文件添加到新项目。

0

我猜参数传递给lambda的方法接受委托作为参数?

如果这是真的,那么您将需要将lambda转换为特定类型的委托。这有点令人困惑,但你需要知道的是,一个lambda不能总是被正确地推断出来,所以你需要将它转换或者改变方法签名来接受特定类型的委托。

试试这个:

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

你也可以尝试做一些重载初始化接受特定类型的代表(如操作)。

如果你的方法不接受特定类型的委托类型比你可以忽略这个答案:)

+0

对于这种情况,使用Initialize((T x)=> {...});会更清楚。另外,编译器错误信息会不同。 – configurator 2008-12-31 16:31:27

相关问题