Usuário com melhor resposta
Como importar uma classe customizada em um plugin

Pergunta
-
Boa noite pessoal.
Estou com uma dúvida, acredito que não seja algo muito dificil de se fazer, porém não consegui achar o caminho certo.
Criei uma classe customizada com alguns métodos e tentei chamar essa classe dentro dos meus Plugins, porém, na hora de executar o plugin
pelo Dynamics, recebo uma mensagem do tipo: "Não foi possível abrir o arquivo ou assembly...... ou uma de suas dependências não pode ser localizada."
Eu adicionei a referência do arquivo .dll no meu Plugin e utilizei o using, embora consiga utilizar os métodos da classe, em tempo de execução essa mensagem é lançada para mim. O que estou fazendo errado?
Obrigado
Christian Adans
Respostas
-
Obrigado, já consegui resolver.
Para fazer isso foi mais complexo do que pensava. Precisei utilizar a ferramenta ILMERGE para unir assemblies.
Utilizei as referências abaixo para resolver o meu problema:
Como utilizar classes e métodos de um assembly em um plugin:
http://crm.georged.id.au/post/2008/02/22/Packaging-plugins.aspx
Como assinar um assembly com nomes fortes:
http://msdn.microsoft.com/en-us/library/xc31ft41.aspx
Como gerar arquivos snk(Strong Name Key):
http://support.microsoft.com/kb/302340
Christian Adans
- Marcado como Resposta Klibor sexta-feira, 1 de abril de 2011 13:45
-
Olá Christian,
Não é necessário você utilizar o ILMERGE. Se você está tendo problema com a referência para as dlls do SDK, é só você registrá-las no GAC do servidor.
Abs,
Ricardo Alves
www.ricardoalves.me- Marcado como Resposta RicardoAlves sexta-feira, 8 de abril de 2011 10:01
-
Mais uma dica,
As dlls utilizadas nos plugins, registrados em DISK, devem ficar no diretório Dynamics CRM\Server\bin\assembly.
Abs,
Ricardo Alves
www.ricardoalves.me- Marcado como Resposta RicardoAlves sexta-feira, 8 de abril de 2011 10:01
Todas as Respostas
-
Chrstian,
Essa mensagem é muito genérica. Normalmente é algum problema na parte de registro do plugin.
Depois da modificação você registrou novamente o plugin do zero?
Abs,
Ricardo Alves
www.ricardoalves.me -
Obrigado por responder Ricardo.
Depois de criar a classe customizada eu a compilei e ai entao criei um novo plugin e utilizei a referencia desta classe, utilizando seus métodos.
Entao registrei o plugin no evento update da entidade Contact, e quando faço o teste este erro é lançado.
Desconfiei que seria por causa da classe customizada, pois nela existe uma referência da Web apontando para o Dynamics. E como diz na mensagem: "Não foi possível abrir o arquivo ou assembly... ou uma de suas dependências não pode ser localizada..", será que poderia ser esta referência ao WS do Dynamics?
Christian Adans
-
Se a unica referencia for o WS, acho que não deveria ter problema.
Pelo o que eu entendi você apenas chama um método dessa classe no Execute do plugin, correto?
Você assinou o assembly (strong name key)?
Você testou a classe antes de adiciona-lá ao plugin?
Abs,
Ricardo Alves
www.ricardoalves.me -
É a única referência que estou utilizando.
Por via das dúvidas criei uma nova classe de teste:
using System; using Classes.Dynamics; //fiz referencia ao WS do Dynamics para teste public class ClassOne { public string Mensagem() { var text = "Hello World"; return text; } }
Logo após, assinei este assembly com o strong name key e compilei.
Em seguida criei uma nova biblioteca de classes, assinei o assembly com o strong name key:
using System; using Microsoft.Crm.Sdk; using Classes; //Referencia a classe customizada namespace UpdateContact{ public class UpdateContact : IPlugin { public void Execute(IPluginExecutionContext context) { ClassOne classe = new ClassOne(); throw new InvalidPluginExecutionException(classe.Mensagem()); } } }
Logo após isso, compilei e registrei este assembly no evento Update da entidade Contact.
Fiz o teste novamente, mas deu o mesmo erro.
Tentei retirar a referência ao WS do Dynamics e mesmo assim, deu o mesmo erro.
Christian Adans
-
-
Christian,
Tente fazer o mesmo teste, mas sem a referência para o WS...
Abs,
Ricardo Alves
www.ricardoalves.me -
-
-
Eu levo todas, pro existirem interdependência! Estando no bin do CRM todas estarão "ativas" e "conhecidas" no momento da execução dos plugins!
Att,
Tiago Cardoso
- Sugerido como Resposta Tiago Michelini CardosoMVP, Moderator quarta-feira, 30 de março de 2011 14:45
-
-
Thiago, fiz o teste.
Coloquei a dll do plugin e da classe customizada dentro da pasta Microsoft Dynamics CRM\Server\bin e não funcionou.
Depois tentei colocando na pasta Microsoft Dynamics CRM\Server\bin\assembly, porém deu o mesmo erro.
Christian Adans -
-
-
-
Obrigado, já consegui resolver.
Para fazer isso foi mais complexo do que pensava. Precisei utilizar a ferramenta ILMERGE para unir assemblies.
Utilizei as referências abaixo para resolver o meu problema:
Como utilizar classes e métodos de um assembly em um plugin:
http://crm.georged.id.au/post/2008/02/22/Packaging-plugins.aspx
Como assinar um assembly com nomes fortes:
http://msdn.microsoft.com/en-us/library/xc31ft41.aspx
Como gerar arquivos snk(Strong Name Key):
http://support.microsoft.com/kb/302340
Christian Adans
- Marcado como Resposta Klibor sexta-feira, 1 de abril de 2011 13:45
-
-
Eu não uso depurador, não conheço essa opção "attach".
Testando direto pelo Dynamics, funcionou perfeitamente. Agora consigo utilizar os métodos da classe customizada através do plugin.
Eu não consegui localizar esta pasta no servidor, marquei a opção para "mostrar pastas e arquivos ocultos", mas mesmo assim não achei.
Christian Adans
-
Caramba e como você olha onde deu um erro no plugin? Precisar "attchar" o processo w3wp e ficar debugando...
A pasta tem que existir e algum lugar, pois sem ela não teria como abrir o CRM, pois dentro desta pasta existem todas as dll's do produto bem como as páginas...
-
-
Caramba, ai é dureza...
Tenho esses materiais:
-
Olá Christian,
Não é necessário você utilizar o ILMERGE. Se você está tendo problema com a referência para as dlls do SDK, é só você registrá-las no GAC do servidor.
Abs,
Ricardo Alves
www.ricardoalves.me- Marcado como Resposta RicardoAlves sexta-feira, 8 de abril de 2011 10:01
-
Mais uma dica,
As dlls utilizadas nos plugins, registrados em DISK, devem ficar no diretório Dynamics CRM\Server\bin\assembly.
Abs,
Ricardo Alves
www.ricardoalves.me- Marcado como Resposta RicardoAlves sexta-feira, 8 de abril de 2011 10:01