Trabalhando com DLLs externas em plugins ou atividades customizadas de workflow

by Pedro Azevedo 13. April 2016 08:38

Boas pessoal,

Hoje venho falar de um mecanismo que é o meu dia-a-dia no desenvolvimento de plugins ou atividades customizadas de workflow. Sempre que começamos um projeto vamos verificar que muito código pode ser reutilizado, ou seja, código que se repete em vários plugins por exemplo. Imaginem por exemplo um requisito que qualquer email temos que usar o mesmo utilizador, então em cada plugin teríamos que fazer o mesmo código.

A solução pode passar por colocar num projeto a parte e daí gerar uma DLL, assim podemos usar esse código nas atividades de workflow e em múltiplos projetos. O problema é que o CRM não deixa que coloquemos referências externas a DLLs, principalmente no CRM Online.

A solução passa por usarmos o ILMerge uma ferramenta gratuita e muito usada, onde o seu principal objetivo é fazer merge entre DLLs e gerar apenas uma. Assim a restrição de registar múltiplas DLLs fica ultrapassada, pois o plugin e a nossa biblioteca vão na mesma DLL. Antes a sua configuração ainda era complicada, mas a uns anos descobri este post que utiliza uma tarefa do MSBuild que permite otimizar muito o processo.

Presumindo que vocês já têm a vossa solution montada, vamos instalar o pacote NuGet chamado MSBuild.ILMerge.Task sobre o projeto do nosso plugin\atividade de workflow:

image

Depois de instalarmos este pacote NuGet, vamos adicionar a DLL da nossa biblioteca. Esta tarefa de MSBuild vai ter a função de fazer “merge”  de todas as DLLs que estejam na pasta bin do nosso plugin. Se forem a essa pasta vão visualizar mais DLLs e principalmente as quatro principais para desenvolvermos sobre o CRM:

image

Sobre estas referências temos que ir as propriedades dessas DLLs e mudar a configuração, “Copy Local” e colocamos a false. Assim essas DLLs não ficam no merge.

image

Antes de compilarmos podemos ver a estrutura atual da pasta bin:

image

Depois de um clean e se recompilarmos novamente o projeto passamos a ter apenas uma DLL:

image

Para confirmarmos que realmente as duas DLLs estão juntas, podemos recorrer a ferramenta ILSpy, que inspeciona a DLL:

image

Com isto podemos continuar com o registo da nossa DLL sem quaisquer problema.

 

Até a próxima.

Tags: , ,

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

About

Muito bem casado, Pai babado e um gosto muito grande pela tecnologia.

Tenho um lema "Sharing is Learning"

Mais aqui -> http://www.psazevedo.com

Month List