2012-03-07 11 views
6

Abbiamo installato Visual Studio 2010 SP1 e Async CTP (aggiornamento SP1).MSBuild non trova riferimenti richiesti asincroni

Una soluzione con progetti che utilizzano le parole chiave async/await OK durante la compilazione da VS IDE. Anche se compilato con devenv /build "Debug" solution.sln tutto è OK.

Tuttavia msbuild @commands.rsp solution.sln rapporti:

File.xaml.cs(123): error CS1993: Cannot find all types required by the 'async' modifier. Are you targeting the wrong framework version, or missing a reference to an assembly? 

commands.rsp si presenta così:

/nologo 
/p:Configuration=Debug 
/m:3 
/fileLogger 

alcun indizio?

+0

Puoi pubblicare i tuoi comandi.rsp? – KMoraz

risposta

4

Utilizzate alla discussione qui: http://social.msdn.microsoft.com/Forums/uk-UA/async/thread/3d491cb0-a19f-4faf-80a6-5fd05e4e06db

ci sono 2 punti da chiarire, al fine di comprendere meglio il problema:

  • Ambiente: avete installato VS11 fianco a fianco con VS 2010 + Async CTP?
  • Il tuo progetto: hai XAML con controlli utente e "clr-namespace" nel tuo progetto?

Citerò la conclusione preliminare SERware dalla discussione sul forum MS:

Io penso che abbia a che fare con l'ordine in cui il XAML proietta compilare assemblee quando si parla di classi della biblioteca stessa. Nel caso , il caricatore XAML tenta di compilare queste classi prima di avere il riferimento alla libreria Async CTP. Pertanto, la parola chiave "async" non è riconosciuta .

Personalmente ho intenzione di vedere se è possibile dividere il gruppo al fine di risolvere l'ordine della compilazione delle dipendenze in XAML

Aggiunto dopo ulteriori indagini: Come ho scoperto, la spiegazione è ancora più deludente: .NET 4.5 (Beta) sostituisce .NET 4.0. Inoltre, le firme dei tipi correlati asincrono/attesa sono state modificate internamente. Quindi non c'è modo finora di utilizzare simultaneamente VS 2010 + AsyncATP e VS11 Beta. - Yuri S. 2 minuti fa

+0

Primo punto, Sì, ho installato VS11. Tuttavia il mio compagno di lavoro non lo fa, e ha avuto gli stessi errori. Sul secondo punto, tutte le chiamate asincrone/attese nel nostro caso sono in ViewModel, quindi non hanno una controparte xaml (il mio esempio di errore è fuorviante perché non avevo comunque il nostro in scrollback e quello era quello che aveva stessa descrizione errore e il codice) –

+0

Come ho scoperto, la spiegazione è più deludente ancora di più: .NET 4.5 (Beta) sostituisce il .NET 4.0 Inoltre, le firme del async/tipi di attesa relativi sono stati cambiati internamente . Quindi non c'è modo finora di utilizzare simultaneamente VS 2010 + AsyncATP e VS2011 Beta. –

0

Sono stato colpito da questo me stesso e per vari motivi non posso aggiornare i progetti a .NET 4.5 quindi ho dovuto sviluppare una soluzione alternativa.

Poiché questo è solo un problema per i progetti XAML che ha una dichiarazione xmlns che punta a se stessa, sono in grado di utilizzare async su tutti gli altri progetti a cui si fa riferimento. Ciò significa che la mia architettura sta ancora utilizzando async/await ed è pronta per il passaggio a .NET 4.5 in seguito.

Ma nei progetti XAML interessati, ho solo implementato manualmente (male) le cose attese altrimenti dal compilatore.

Quindi il codice che è stato questo puliti prima:

try 
{  
    var foo = GetFoo(); 
    foo.DoStuff(); 
    var data = await foo.GetDataAsync(); 
    bar.WorkOnData(data); 
} 
catch (Exception ex) 
{ 
    // Logging, throw up a popup, whatever... 
    HandleError("Failed to get data", ex); 
} 

Ora diventa questo:

var foo = GetFoo(); 
foo.DoStuff(); 
var getDataTask = foo.GetDataAsync(); 
getDataTask.ContinueWith(t => 
    { 
     if (t.IsFaulted) 
     { 
      // Logging, throw up a popup, whatever... 
      HandleError("Failed to get data", t.Exception); 
      return; 
     } 
     if (t.Status == TaskStatus.RanToCompletion) 
     { 
      bar.WorkOnData(t.Result); 
     } 
    }); 

Non è l'ideale, naturalmente, e questa è la cosa esatta che async/await è stato creato per risolvere. Ma funziona come soluzione alternativa a breve termine, almeno per gli usi semplici di await.

Problemi correlati