1

最近、組み込みの変換ツールを使用して、Web アプリケーション プロジェクト (およびいくつかの依存プロジェクト) を .net 2.0 から .net 3.5 にアップグレードしました。MS AJAX 3.5 と 2.0 の外部 MS AJAX ライブラリの使用など、すべてがうまく機能します。

新しい Lambda 式構文を使用しようとしたときに問題が発生しました。コンパイラは、ラムダ式を有効な構文として認識しません。ソリューション内のすべてのプロジェクトで、ターゲット フレームワーク バージョンが 3.5 に設定されています。同じソリューション内のライブラリ プロジェクトでラムダ式を正常に使用することもできました。

これは私にエラーを与えているコードです。特別なことは何もありません。

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 を検索しています。

4

4 に答える 4

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 ではない) を使用していることを確認してください。

于 2008-12-31T10:24:14.937 に答える
0

ラムダを渡すメソッドのパラメーターは、パラメーターとしてDelegateを受け入れると思いますか?

これが当てはまる場合は、ラムダを特定のタイプのデリゲートとしてキャストする必要があります。これはちょっと紛らわしいですが、ラムダは常に正しく推測できるとは限らないため、ラムダをキャストするか、特定のタイプのデリゲートを受け入れるようにメソッドシグネチャを変更する必要があります。

これを試して:

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

また、Initializeにいくつかのオーバーロードを作成して、特定のタイプのデリゲート(アクションなど)を受け入れるようにすることもできます。

メソッドが特定のタイプのデリゲートタイプを受け入れる場合は、この回答を無視できます:)

于 2008-12-31T06:12:31.670 に答える
0

VS 2008 変換ツールの経験はあまりありませんが、他のプロジェクト変換ツールには「問題」があったことは知っています。「壊れた」プロジェクトの .csproj ファイルを、動作しているプロジェクトと比較することをお勧めします。変換ユーティリティがプロジェクトの何かを壊したのかもしれません。新しいプロジェクトを作成して、すべてのソース ファイルをコピーすることもできます。

于 2008-12-31T04:47:42.667 に答える
0

既存のプロジェクトの再参照でジャンプする必要があるいくつかのフープ、TBH 新しいプロジェクトを作成し、既存のソースファイルを新しいプロジェクトに追加する方が簡単であることがわかりました。

于 2008-12-31T04:57:23.210 に答える