2008-12-31 63 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

相關問題