Imansible aggiungere un riferimento da C # PCL a F # PCL (VS 2015 Update 1)

Ho problemi a creare un progetto portatile F # che dovrebbe essere referenziato dal progetto portatile C #. Quando si aggiunge tale riferimento, viene visualizzato il seguente messaggio:

Imansible aggiungere un riferimento a “PortableLibrary1”. I progetti di libreria portatile possono fare riferimento solo ad altri progetti e assembly di libreria portatile.

Il problema viene facilmente riprodotto utilizzando l’ultimo aggiornamento 1 di Visual Studio 2015 (versione 14.0.24720.00). Ho anche installato Xamarin.

Posso riprodurre il problema utilizzando qualsiasi tipo di progetto portatile C # con le seguenti opzioni disponibili:

  • Libreria di classi (portatile)
  • Libreria di classi (portatile per iOS, Android e Windows)

e con qualsiasi tipo di progetto di libreria portatile F # con le seguenti disponibili:

  • Libreria portatile (.NET 4.5, Windows Store, Silverlight 5, Xamarin) [Profilo 47]
  • Libreria portatile (.NET 4.5, Windows Store, Windows Phone 8 Silverlight, Xamarin) [Profilo 78]
  • Libreria portatile (.NET 4.5, Windows Store, Windows Phone 8.1, Windows Phone Silverlight 8, Xamarin) [Profilo 259]
  • Libreria portatile (.NET 4.5, Windows Store, Xamarin) [Profilo 7]

Ho usato gli stessi profili per C # come per F # e nulla aiuta.

Sembra che ci fosse già un problema di questo tipo ( Come faccio ad aggiungere un riferimento a F # Portable Library da C # Portable Class Library (PCL) ) che poi è stato corretto con successo. Ma ora è riprodotto di nuovo.

Qualcuno può dirmi che mi manca qualcosa? Forse c’è qualcosa che deve essere installato ulteriormente o così?

Ho appena avuto lo stesso problema. L’ho risolto con l’hacking del .csproj del mio PCL. Dopo che il PCL F # è referenziato nel progetto C # e posso usare tutto. Non so se ci sono problemi – non sono riuscito a capirlo.

Ecco i passaggi per riprodurre:

  • nuovo progetto C # (profilo class portatile 111)
  • nuovo progetto F # (profilo class portatile 7)
  • guarda nel file F # .fsproj e copia il valore di “Project / PropertyGroup / ProjectId”
  • modifica C # .csproj e aggiungi il seguente gruppo di articoli

      {F# Project Id} F# Project   

Uso la community di Visual Studio 2015 con l’aggiornamento 2

Se c’è effettivamente un bug e vuoi chiamare qualcosa dalla libreria PCL C # a quella F # PCL, un modo per lavorare intorno che potrebbe essere quello di aggiungere la libreria C # come riferimento alla libreria F # invece (l’altro modo intorno) .

Quindi il codice F # implementerà un’interfaccia (consultare https://msdn.microsoft.com/en-us/library/dd233207.aspx ) che si definisce sul lato C #.

Chiamerà anche un metodo che fornisci sul lato C # per darti un riferimento di un’istanza di class che implementa l’interfaccia (implementata sul lato F #). In alternativa puoi usare MEF (Managed Extensibility Framework – https://blogs.msdn.microsoft.com/jomo_fisher/2010/03/09/neat-samples-extend-your-f-program-with-mef/ ) per passare implementazione dell’interfaccia dal lato F # al lato C #, con il lato C # che avvia la richiesta per il “binding” (leggi anche su Inversion of Control / Dependency Injection)