Pergunta

Estou tentando compilar o código de F # para uso em Silverlight. Eu compilar com:

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

Isso gera um autônomo de montagem que faz referência ao quadro SL. Mas quando eu tento adicionar uma referência para o gerado montagem, eu recebo este erro:

Você só pode adicionar referências de projeto para outros projetos do Silverlight no solução.

O que é o VS plug-in fazendo para determinar que este não é um Silverlight montagem? Aqui está o manifesto:

// 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

Eu não entendo o que ele está achando que ele não gosta; é IL verificável puro. I comparado a um SL "biblioteca de classes" de montagem, e parece o mesmo. A única diferença era alguns atributos, mas eu apaguei esses e VS ainda deixe-me fazer referência a DLL. Eu ainda acrescentou IL unverifiable à "biblioteca SL" DLL e ainda carregado.

Todas as sugestões?

Atualização: Já fiz alguns picar ao redor, e isso não parece ser o manifesto que importa. Ele não gosta de algo no IL das bibliotecas FSharp. Eles são peverifiable, mas algo ali está a provocar a rejeição.

Foi útil?

Solução

Resposta!

Aparentemente, o problema é que quando você adiciona uma referência para o bin \ Release ou bin \ Debug, Visual Studio (ou o sistema de projeto Silverlight) decide tentar fazer referência ao projeto. Esta falha por qualquer motivo.

Se você copiar o DLL # saída F para outro local, então a referência passa bem. (Esta será uma referência de arquivo, e não uma referência de projeto, é claro.)

Em seguida, dependências de configuração para que o # biblioteca F constrói em primeiro lugar, então você pode usar uma referência de arquivo para obter o F # -generated binário.

Atualização: Uma questão mais aparente. Se eu virar código otimizar, então eu recebo este erro:

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 eu continuar código otimizado fora, este vai embora e tudo funciona bem.

Outras dicas

Visual Studio usa a função IsSilverlightAssembly () no tipo Microsoft.VisualStudio.Silverlight.SLUtil para verificar se uma referência pode ser definido.

David Betz tem um bom post que descreve os detalhes aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top