我最近使用内置的转换工具将Web应用程序项目(以及一些依赖项目)从.net 2.0升级到.net 3.5。一切都运行良好,例如使用MS AJAX 3.5与2.0中的外部MS AJAX库。
我尝试使用新的Lambda Expression语法时出现问题。编译器不会将Lambda表达式识别为有效语法。解决方案中的所有项目中的目标框架工作版本都设置为3.5。我也能够在同一解决方案中的库项目中成功使用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\
非常感谢任何帮助。我一直在搜索Google,但运气不佳
答案 0 :(得分: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)。
答案 1 :(得分:0)
我对VS 2008转换工具没有太多经验,但我知道其他项目转换工具有“问题”。我建议您将“已损坏”项目的.csproj文件与正在运行的项目进行比较。也许转换实用程序破坏了项目中的某些内容。您也可以尝试创建一个新项目并复制所有源文件。
答案 2 :(得分:0)
答案 3 :(得分:0)
我猜测你传递lambda的方法的参数是否接受一个Delegate作为参数?
如果这是真的,那么您需要将lambda转换为特定类型的委托。这有点令人困惑,但您需要知道的是,lambda不能总是正确推断,因此您需要将其转换或更改方法签名以接受特定类型的委托。
试试这个:
ObjectFactory.Initialize((Action<T>)(x => // where T is the typeof x
{
// ...
}));
此外,您可以尝试为Initialize进行一些重载以接受特定类型的委托(例如Action)。
如果您的方法接受特定类型的委托类型,则可以忽略此答案:)