Direcionando ambos .NET 3.5 e Silverlight
-
22-08-2019 - |
Pergunta
Vamos imaginar que eu já tenho uma montagem de edifício do projeto .NET 3.5. Agora, quero construir esta assembléia para o Silverlight e, além disso, manter sua versão Silverlight com esforços mínimos ainda mais.
O que não é aceitável:
- Criando projeto separado para construção de Silverlight
O que é aceitável:
- Adicionando diretrizes personalizadas que me permitem atingir Silverlight ou .NET dependentemente das propriedades do MSBUILD.
- Adicionando configurações especiais de compilação para Silverlight
- Adicionando seções #IFDEF Silverlight / #endif ao código -fonte.
- Geralmente qualquer outra modificação de .csproj / .cs.
Então, basicamente, eu gostaria de manter um único projeto, mas direcionar duas estruturas. Não quero manter dois projetos separados, porque isso pode levar a erros como esquecer de incluir um novo arquivo. Se existem muitos projetos e grandes equipes, isso é realmente importante para excluir esses erros.
Se isso for completamente impossível, qualquer solução que fornece benefícios semelhantes é aceitável.
Solução
Você também descartou a ligação aos arquivos dentro do seu projeto de um projeto Silverlight? Essa é uma abordagem bastante comum para compartilhar uma implementação entre o Silverlight e o CLR completo. Compartilhando código entre plataformas .NET e Silverlight
Além disso, de acordo com Justin Angel, você pode fazer referência e usar uma biblioteca da classe Silverlight a partir do CLR completo. Eu não tentei isso sozinho, e deixa algumas perguntas sem resposta, mas isso torna o cenário simples: http://silverlight.net/blogs/justinangel/archive/2008/12/29/using-silverlight-dlls-on-the-desktop.aspx
Outras dicas
Eu concordo com Scott. Economize muita dor. Dois projetos que compartilham a mesma base de código é o caminho a seguir. Você precisará usar o VStudio em ambos os ambientes, para usar LIBs diferentes, para incluir/Exculde Arquivos, para fazer tantas coisas ... facilmente!
O motivo de ter dois projetos distante Outweight as desculpas por ter uma.
O MSDN contém informações detalhadas sobre a plataforma multi-alvo:Multi-alvo no MSDN
Eu acho que o que você precisa fazer é o nível corretamente. Seu código Silverlight deve ser apenas para a interface do usuário e a comunicação com os serviços de back -end WCF. Esses serviços executariam seu código .NET 3.5 (o código que você deseja compartilhar). Dessa forma, você tem compartilhamento e n-camada também.
Se você estiver fazendo um cálculo pesado no lado do cliente no seu código Silverlight e envie-o ao servidor (e provavelmente ao banco de dados), acho que você está abrindo um orifício de segurança.
Você não deu uma razão atraente para que um projeto separado precisaria acessar o código no projeto Silverlight.
Você precisa ter dois projetos porque as referências do MSCORLIB são diferentes para as duas plataformas.
Confira esta pergunta: http://www.google.ca/search?hl=en&q=targetting+silverlight+and+wpf&meta=&aq=f&oq=
Se tudo o que você deseja fazer é ter uma biblioteca .NET antiga que compartilhou entre os dois, sugiro criar dois projetos (um para o Silverlight, um por regular) e incluir os mesmos arquivos nos dois projetos. Isso é muito mais fácil de entender para outros desenvolvedores.