Uma das limitações do Configuration Management Application Block (CMAB) é o facto de a sua configuração dever ser feita num ficheiro app.config ou web.config . Assumindo que se desenvolveu uma Assembly para usar o CMAB, e que se registou esta Assembly no GAC, onde deve ser colocada a configuração do CMAB?
A resposta trivial é: na pasta onde estiver o .EXE (caso seja uma aplicação), ou na root do site, caso seja um desenvolvimento Web. E se a aplicação que é “host” e vai usar essa Assembly for um Add-In para o Vs.Net , ou o Excel ou o Biztalk? Alguém que teve este problema ao desenvolver uma extensão para o Excel optou por colocar a configuração no Excel.exe.config (sim, na pasta C:\Program Files\Microsoft Office\OFFICENN) …
A impossibilidade de se especificar a localização do xml de configuração é talvez a grande contrariedade desde App Block (já conhecido, aliás, por a sua configuração ser algo complexa – isto é, o conteúdo dos tais .config que não sabemos onde colocar :-)).
Uma forma possível de tentar resolver isto é colocar as configurações no Machine.Config, apesar de isto ser deselegante (não testei, já encontrei quem diz que funciona e quem diz que não funciona). E outra possibilidade é alterar o próprio CMAB, e sugiro neste caso como ponto de partida o ficheiro ConcreteFactories.cs, onde diz:
_xmlAppConfigDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
A sequência AppDomain.CurrentDomain.SetupInformation.ConfigurationFile devolve-nos o nome e o path da aplicação a ser executada no momento. Por curiosidade, no caso do Biztalk 2004 (ou antes, de um componente .Net invocado pelo Bts), o valor que me foi devolvido foi:
C:\Program Files\Microsoft BizTalk Server 2004\BTSNTSvc.exe.config
(ficheiro que já existe, curiosamente)
Para mais informações, remeto para o Message Board do Workspace GotDotNet do CMAB.
jota
PS- Acabei de verificar, no Workspace acima, que a impossibilidade de configurar o CMAB no Machine.Config está até identificado como Bug, uma vez que até contraria a documentação do Application Block.