Domanda

Di recente ho aggiornato un progetto di applicazione Web (così come alcuni progetti dipendenti) da .net 2.0 a .net 3.5 utilizzando lo strumento di conversione integrato. Tutto funziona bene come usare MS AJAX 3.5 rispetto alle librerie MS AJAX esterne in 2.0.

Il mio problema si verifica quando ho provato a utilizzare la nuova sintassi di Lambda Expression. Il compilatore non riconoscerà le espressioni Lambda come sintassi valida. La versione di lavoro del frame di destinazione è impostata su 3,5 in tutti i progetti della soluzione. Sono stato anche in grado di utilizzare con successo le espressioni Lambda in un progetto di libreria nella stessa soluzione.

Questo è il codice che mi sta dando l'errore. Niente di speciale.

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

        });

Gli errori specifici che sto riscontrando sono:

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

Qualsiasi aiuto sarebbe molto apprezzato. Ho cercato Google con poca fortuna

È stato utile?

Soluzione

Se una parte della pagina viene compilata da ASP.NET (ovvero non stai precompilando il WAP), dovrai assicurarti che ASP.NET sia a conoscenza del compilatore C # 3.0 (.NET 3.5) . Assicurarsi che quanto segue sia nel 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>

Inoltre, se si esegue l'hosting in IIS, assicurarsi che la cartella corretta sia impostata come applicazione e che stia utilizzando ASP.NET v2.blah (non v1.1.blah).

Altri suggerimenti

Non ho molta esperienza con lo strumento di conversione VS 2008, ma so che altri strumenti di conversione del progetto hanno avuto "problemi". Ti consiglierei di confrontare il file .csproj per il tuo progetto "rotto" con uno che sta funzionando. Forse l'utilità di conversione ha rotto qualcosa nel tuo progetto. Puoi anche provare a creare un nuovo progetto e a copiare anche tutti i file di origine.

un paio di cerchi che devi saltare con riferimenti a progetti esistenti, TBH Ho trovato più facile semplicemente creare un nuovo progetto e aggiungere i miei file sorgente esistenti al nuovo progetto.

Sto indovinando il parametro sul metodo in cui stai passando il lambda accetta un delegato come parametro?

Se questo è vero, dovrai lanciare lambda come un tipo specifico di delegato. Questo è un po 'confuso, ma quello che devi sapere è che un lambda non può sempre essere dedotto correttamente, quindi devi lanciarlo o cambiare la firma del metodo per accettare tipi specifici di delegati.

prova questo:

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

Inoltre potresti provare a fare alcuni sovraccarichi affinché Initialize accetti tipi specifici di delegati (come Azione).

Se il tuo metodo accetta un tipo specifico di tipo delegato, puoi ignorare questa risposta :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top