2013-06-26 14 views
7

Questo è molto strano.Problemi strani con RX su .NET 4.5 e F #

Ho due progetti sia F #. Ho installato l'ultima versione stabile (2.1.30214.0) di RX tramite NUGET.

Nel progetto tutto va assolutamente bene. Nell'altro progetto fondamentalmente sto ottenendo errori ovunque a causa di quanto segue.

Error 1 The type 'IObservable`1' is required here and is unavailable. 
      You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, 
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.` 

Questo in realtà non ha senso poiché la fonte è valida e funziona perfettamente in VS2010.

Qualche suggerimento?

+0

fare un diff sui file .fsproj! Soprattutto confrontare la lista di '' –

+0

Ho riscontrato lo stesso problema oggi. Fondamentalmente, ho gli squigglie rosse dappertutto, ma la cosa strana è che se ne vanno quando compilo.Il mio codice è ancora compilato e funziona, ma non appena sono tornato nell'editor, gli squigglies riappaiono. –

risposta

1

Ciò succede quando si fa riferimento alle 4,5 DLL in un progetto 4.0 o viceversa. Assicurati di fare riferimento alla versione giusta.

+0

Definitivamente un progetto 4.5. Ho istruito nuget per l'installazione su 2 progetti, entrambi sono 4.5. Uno funziona, l'altro no. Ho provato a ricrearli da zero. C'è qualcosa che posso guardare nel file di progetto per ricontrollare? – Dave

+1

Controlla il tuo file fsproj. Ho avuto gli stessi problemi e ho dovuto modificare manualmente il file di progetto. È possibile aggiungere .. \ packages \ Rx-Core.2.1.30214.0 \ lib \ Net45 \ System.Reactive.Core.dll

+0

Fare clic su Riferimento System.Reactive.Linq, premere F4, osservare il percorso e assicurarsi che ha Net45 in esso –

2

ho il problema troppo, ho riparato modificando il fsproj e sostituendo Net45 con Net40 in tutti i percorsi dll reattivi. Ciò è necessario, nonostante la seguente nel mio file fsproj:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 

risposta originale:

mio precedente correzione ha reso la compilazione progetto, ma non ho potuto usare RX (abbastanza inutile) ma è sotto

Gli errori stanno venendo dalla linea:

open System 

ora ho:

//open System 
type Array = System.Array 
type Double = System.Double 
type TimeSpan = System.TimeSpan 

Tutte le opere! Però orribilmente brutto, e affligge tutti i file nel progetto.

+2

+1 Anche il cambiamento del percorso di hint su Net40 ha funzionato, anche se non mi sembra sicuro farlo :(Ho scavato un po 'nei pacchetti NuGet e ho scoperto che i binari Net40 sono "veri". Librerie NET, mentre i binari Net45 sono librerie portatili: sembra che ai progetti F # 4.5 non piacciano le biblioteche portatili di riferimento ... –

+0

FWIW, ho aggiunto questo problema sul sito del progetto Rx: https: //rx.codeplex. com/elemento di lavoro/47 –

7

Come notato da @ Mark Seemann, il problema deriva dal fatto che il pacchetto Rx NuGet per .NET 4.5 è in realtà una libreria portatile.

Sfortunatamente, F # 3.0 non supporta librerie portatili basate su .NET 4.5, solo quelle legacy. Il supporto per le nuove librerie portatili (chiamate anche librerie basate su .NETCore) è stato aggiunto in VS 2013.

Quindi, si hanno 2 opzioni:

  • costruire il bersaglio Release45 o Debug45 di Rx.sln nel Rx open-source release e l'uso che, invece dei pacchetti Rx Nuget.

  • Usa F # 3.1 che è disponibile in Visual Studio 2013.

Problemi correlati