Pergunta

Eu tenho um conjunto de vários assemblies (um assembly deve ser usado como API e depende de outros assemblies).Gostaria de mesclar todos os assemblies em um único assembly, mas evitar que todos os assemblies, exceto o da API, sejam visíveis do lado de fora.

Em seguida, ofuscarei esse assembly com o Xenocode.Pelo que vi, é impossível internalizar o assembly com o Xenocode.

Eu vi o ILMerge da Microsoft, mas não consegui descobrir se ele pode fazer o que eu quero.http://research.microsoft.com/~mbarnett/ILMerge.aspx

Foi útil?

Solução 2

Eu sei que o Xenocode pode mesclar assemblies em um, mas não tenho certeza se ele internalizará outros assemblies não primários.

Eu encontrei a opção /internalize no ILMerge que "internaliza" todos os assemblies, exceto o principal.Muito útil!

Outras dicas

Usei o ILMerge da Microsoft para internalizar DLLs em uma única biblioteca montada.Existe uma GUI útil para usar o ILMerge chamada NuGenUnify.Você pode encontrá lo aqui.

Eu sugiro que você dê uma olhada no InternalsVisibleTo atributo ativado MSDN.

Você pode marcar tudo em todos os assemblies (exceto o assembly da API) como internal em vez de public, e mostre-os novamente apenas para seu assembly de API.

Feito isso, o uso do ILMerge deve fornecer um único assembly com apenas as classes da API visíveis.

Há alguns problemas com ILMerge, mas acho que se você adicionar otimizações + mesclagem + ofuscação, provavelmente criará uma situação altamente complexa com poucos benefícios.

Por que não ter apenas um assembly e tornar pública apenas sua API?

Se você está sempre distribuindo-os como um único assembly, não há razão para não compilá-los dessa forma.Você obterá mais benefícios com as otimizações do compilador e também será mais rápido compilar.

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