Frage

Ich versuche, Code von F # kompilieren in Silverlight zu verwenden. Ich kompilieren mit:

- noframework --cliroot "C: \ Programme \ Microsoft Silverlight \ 2.0.31005.0" --standalone

Dies erzeugt eine eigenständige Baugruppe, die den SL Rahmen verweist. Aber wenn ich versuche, einen Verweis auf die generierte Assembly hinzuzufügen, ich diesen Fehler:

  

Sie können nur Projektreferenzen in der   andere Silverlight-Projekte in der   Lösung.

Was ist die VS-Plugin bestimmt dabei zu, dass dies nicht eine Silverlight-Montag? Hier ist das 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

Ich verstehe nicht, was es zu finden, dass es nicht mag; es ist reine nachprüfbare IL. I im Vergleich zu einer SL „Klassenbibliothek“ Montag und es sieht genauso aus. Der einzige Unterschied war einige Attribute, aber ich gelöscht diejenigen und VS lassen Sie mich noch die DLL verweisen. Ich auch nicht verifizierbar IL auf das „SL-Bibliothek“ DLL hinzugefügt und es immer noch geladen.

Irgendwelche Vorschläge?

Update: Ich habe einige um getan Stossen, und es scheint nicht das Manifest, daß die Dinge zu sein. Es mag nicht etwas in der IL aus den FSharp Bibliotheken. Sie sind peverifiable, aber etwas da drin ist das Auslösen der Ablehnung.

War es hilfreich?

Lösung

Antwort!

Anscheinend ist das Problem ist, dass, wenn Sie einen Verweis auf dem ist \ Release oder ist \ Debug, Visual Studio (oder das Silverlight-Projektsystem) in dem versuchen entscheidet, das Projekt zu verweisen. Dies nicht aus irgendeinem Grunde.

Wenn Sie die F # Ausgabe DLL an einem anderen Ort zu kopieren, dann geht die Referenz durch just fine. (Dies wird eine Dateireferenz, nicht ein Projektverweis, natürlich.)

Dann Abhängigkeiten Setup, so dass die F # -Bibliothek zuerst baut, dann können Sie eine Datei Referenz verwenden die F # -Generated binär zu erhalten.

Update: Ein deutliches Problem. Wenn ich optimieren Code einschalten, dann bekomme ich diesen Fehler:

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'

Wenn ich optimierten Code halten, das geht weg und alles funktioniert.

Andere Tipps

Visual Studio verwendet die IsSilverlightAssembly () Funktion in der Microsoft.VisualStudio.Silverlight.SLUtil Art zu überprüfen, ob eine Referenz eingestellt werden kann.

David Betz hat einen schönen Blog-Eintrag beschreibt die Details hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top