Pergunta

Ultimamente tenho vindo a trabalhar sobre algumas pequenas aplicações .NET que compartilham um código comum. O código tem algumas interfaces introduzidas para abstrair I / O chamadas para testes de unidade.

Eu queria que os aplicativos sejam EXEs independente, sem dependências externas. Este parece ser o caso de uso perfeito para bibliotecas estáticas. Venha para pensar sobre isso fornecedores controle de terceiros poderiam beneficiar deste modelo também.

Existem algumas sujeiras escondidas com bibliotecas estáticas que eu perdi?

Existe alguma razão para que os C # estilistas deixaram-los?

Edit:. Estou ciente de ILMerge mas não oferecer a mesma comodidade como bibliotecas estáticas

Foi útil?

Solução

.NET faz em apoio fato do equivalente moral de uma estática biblioteca. É chamado de netmodule (extensão de arquivo é normalmente .netmodule). Leia mais sobre isso neste blog . Tenha em atenção que não é bem suportado pelo Visual Studio cadeia de ferramenta de construção. Acho são uma problema também. ILMerge é a melhor ferramenta para obter este feito.

Outras dicas

Este não é diretamente relacionado com C #, mas para todo o guarda-chuva .NET. Claro, é possível assembleias de mesclagem usando ILMerge , mas infelizmente ainda é um projeto de pesquisa, mas pelo menos as suas licenças de licença de uso para empreendimentos comerciais. Fora isso, o tempo de execução (CLR) não pode ser fundiram em um único executável, a plataforma de destino ainda precisa .NET para ser instalado.

Editar:

eu estava escrevendo isso antes de editado o seu post com ILMerge. Eu posso estar errado, mas não há benefícios adicionais de evitar a dinâmica de estilo .NET ligando em tempo de execução. Não há nada de errado em colocar os conjuntos de satélite juntamente com o executável. A Microsoft não recomenda colocá-los no GAC.

Usando bibliotecas estáticas tem a desvantagem de que não é patchable pelo provedor de tempo de execução (MS).

Por exemplo, se você usar libs MFC estáticas e uma questão Securify ou outro bug é encontrado nas bibliotecas estáticas MFC, MS não pode consertá-la (o código já está em seu executável). Usando DLLs compartilhadas permite uma correção fácil no nível do sistema operacional sem você se preocupar com isso.

Claro que ter bibliotecas compartilhadas tem uma pequena desvantagem:. Uma dependência é tomada e eles devem ser instalados no sistema

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