Como fazer referência a assemblies compartilhados que ainda estão em desenvolvimento (.NET)

StackOverflow https://stackoverflow.com/questions/1422899

  •  07-07-2019
  •  | 
  •  

Pergunta

Sou responsável por desenvolver e manter um conjunto de assemblies de estrutura comuns que são usados ​​para construir nossos aplicativos de produtos.Esses assemblies são relativamente novos e estão em constante mudança à medida que novos recursos são implementados, etc.Como resultado, não é incomum que sejam reconstruídos e redistribuídos com certa frequência.Eu esperaria que isso diminuísse à medida que as assembleias se estabilizassem, mas é o que é hoje.

No momento, os assemblies são colocados em uma pasta Common onde os projetos de desenvolvimento podem fazer referência aos mesmos assemblies.Aplicar atualizações é tão simples quanto substituir os arquivos e os projetos de desenvolvimento captam automaticamente as alterações na próxima vez que forem carregados e compilados.

O problema que tenho é que podemos ter várias "camadas" de assemblies construídas na estrutura - por exemplo, temos uma biblioteca Core compartilhada por todos os aplicativos e uma biblioteca Server que faz referência ao Core e é compartilhada por todos os aplicativos Server.Todas as dependências também precisam ser reconstruídas cada vez que os assemblies da estrutura são atualizados, tornando esta uma tarefa muito grande.Não acredito que possa usar o GAC porque isso exigiria que todos os desenvolvedores atualizassem seus sistemas sempre que uma nova versão fosse lançada.

Investiguei as Políticas do Editor, mas tenho algumas dúvidas de que isso resolverá meu problema por alguns motivos:

  • Por um lado, não quero recriar o arquivo toda vez que reconstruo meus assemblies de estrutura - existe uma maneira de automatizar esse processo?

  • Não está claro para mim se isso exige que as assembleias entrem no GAC.Como eu disse, não quero forçar meus desenvolvedores a reinstalar, atualizar, etc.cada vez que lançamos uma nova versão dos assemblies.

  • Não tenho nenhum controle sobre a instalação e configuração da rede, por isso é necessário evitar todo o problema de "confiança" colocando os arquivos em um compartilhamento de rede.Além disso, muitos de nossos desenvolvedores trabalham às vezes conectados e gostaríamos que os arquivos estivessem disponíveis para eles quando desconectados.

O objetivo seria tornar a atualização desses assemblies transparente para os desenvolvedores de aplicativos que os estão consumindo.Sem dúvida instalaremos esses assemblies no GAC na máquina de destino quando o aplicativo for instalado, mas não queremos fazer isso para fins de desenvolvimento.Também não é razoável incluir os projetos na Solução de cada aplicação porque são desenvolvidos por equipes diferentes.

Não consigo imaginar que estou sozinho nesses requisitos e espero que alguém possa compartilhar sua experiência e sabedoria para me guiar em direção a uma solução.Obrigado!

Foi útil?

Solução 2

NuGet resolveu esse problema.Ao distribuir os assemblies, estruturas, etc. compartilhados como pacotes NuGet de um repositório privado em nossa rede, podemos facilmente postar atualizações e aplicá-las ao código do cliente conforme apropriado.

Outras dicas

Você não precisa necessariamente instalar os assemblies no GAC - nada na sua configuração exige isso.

A principal questão aqui é garantir que um assembly force a reconstrução de todas as suas dependências e que todas elas sejam colocadas em um local compartilhado.

A opção mais fácil aqui provavelmente seria ter um servidor de compilação que reconstruísse tudo sempre que um dos assemblies compartilhados fosse atualizado.Isso também tem a vantagem de potencialmente executar outros "scripts" na compilação, como fazer métricas de código, análise estática de código, etc., sempre que for feito check-in de uma compilação.

Você pode então fazer com que o servidor de compilação copie tudo para um local compartilhado.Se os projetos fizerem referência ao local compartilhado e disserem explicitamente para não restringir a uma versão específica, tudo deverá funcionar bem.

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