Domanda

Sto cercando di compilare il codice da F # da utilizzare in Silverlight. Compilo con:

--noframework --cliroot " C: \ program Files \ Microsoft Silverlight \ 2.0.31005.0 " -standalone

Questo genera un assembly autonomo che fa riferimento al framework SL. Ma quando provo ad aggiungere un riferimento all'assembly generato, ottengo questo errore:

  

Puoi solo aggiungere riferimenti a progetti   altri progetti Silverlight nel   soluzione.

Cosa sta facendo il plugin VS per determinare che questo non è un assembly Silverlight? Ecco il manifest:

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (7C EC 85 D7 BE A7 79 8E )                         // |.....y.
  .ver 2:0:5:0
}
.assembly FSSLLibrary1
{

  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) 

  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module 'F#-Module-FSSLLibrary1'
// MVID: {49038883-5D18-7281-A745-038383880349}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x04120000

Non capisco cosa sta scoprendo che non gli piace; è puro IL verificabile. Ho confrontato con una SL "biblioteca di classe" assemblaggio e sembra lo stesso. L'unica differenza erano alcuni attributi, ma ho eliminato quelli e VS ancora mi lascia fare riferimento alla DLL. Ho persino aggiunto IL non verificabile alla libreria "SL" " DLL e ancora caricata.

Qualche suggerimento?

Aggiornamento: ho fatto un po 'di frugate in giro, e non sembra essere il manifest che conta. Non gli piace qualcosa nell'IL dalle librerie di FSharp. Sono peificabili, ma qualcosa dentro sta innescando il rifiuto.

È stato utile?

Soluzione

Rispondi!

Apparentemente il problema è che quando si aggiunge un riferimento a bin \ Release o bin \ Debug, Visual Studio (o il sistema di progetto Silverlight) decide di provare a fare riferimento al progetto. Questo fallisce per qualsiasi motivo.

Se si copia la DLL di output F # in un'altra posizione, il riferimento viene eseguito correttamente. (Questo sarà un riferimento al file, non un riferimento al progetto, ovviamente.)

Quindi imposta le dipendenze in modo da creare prima la libreria F #, quindi puoi usare un riferimento al file per ottenere il binario generato da F #.

Aggiornamento: Un altro problema apparente. Se accendo il codice di ottimizzazione, ottengo questo errore:

C:\test\SilverlightApplication1\FSC(0,0): error FS0193: internal error: the module/namespace 'System' from compilation unit 'mscorlib' did not contain the namespace, module or type 'MarshalByRefObject'

Se tengo disattivato il codice ottimizzato, questo scompare e tutto funziona bene.

Altri suggerimenti

Visual Studio utilizza la funzione IsSilverlightAssembly () nel tipo Microsoft.VisualStudio.Silverlight.SLUtil per verificare se è possibile impostare un riferimento.

David Betz ha un bel post sul blog che descrive i dettagli qui .

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