Tenho um arquivo de configuração que preciso carregar como parte da execução de uma dll que estou escrevendo.
O problema que estou tendo é que o local onde coloco a dll e o arquivo de configuração não é o "local atual" quando o aplicativo está em execução.
Por exemplo, coloco o arquivo dll e xml aqui:
D: \ Arquivos de programas \ Microsoft Team Foundation Server 2010 \ Application Tier \ Web Services \ bin \ Plugins
Mas se eu tentar fazer referência ao arquivo xml (em minha dll) assim:
XDocument doc = XDocument.Load(@".\AggregatorItems.xml")
então . \ AggregatorItems.xml se traduz em:
C: \ windows \ system32 \ inetsrv \ AggregatorItems.xml
Portanto, preciso encontrar uma maneira (espero) de saber onde está localizada a dll que está sendo executada no momento. Basicamente, estou procurando por isso:
XDocument doc = XDocument.Load(CoolDLLClass.CurrentDirectory+@"\AggregatorItems.xml")
C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\Temporary ASP.NET Files\\tfs\\de3c0c8e\\c1bdf790\\assembly\\dl3\\20b156cb\\22331f24_bfb9cb01\\AggregatorItems.xml
Assembly.GetExecutingAssembly().CodeBase
tem!string curAssemblyFolder = new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;
A reflexão é sua amiga, como foi apontado. Mas você precisa usar o método correto;
fonte
No meu caso (lidando com meus assemblies carregados [como arquivo] no Outlook):
Observe o uso de
CodeBase
(nãoLocation
) noAssembly
. Outros apontaram métodos alternativos de localização da montagem.fonte
fonte
Se você estiver trabalhando com um aplicativo asp.net e desejar localizar assemblies ao usar o depurador, eles geralmente são colocados em algum diretório temporário. Escrevi este método para ajudar nesse cenário.
Para obter mais detalhes, consulte esta postagem do blog http://nodogmablog.bryanhogan.net/2015/05/finding-the-location-of-a-running-assembly-in-net/
Se você não pode alterar o código-fonte ou reimplantar, mas pode examinar os processos em execução no computador, use o Process Explorer. Eu escrevi uma descrição detalhada aqui .
Ele listará todas as dlls em execução no sistema, você pode precisar determinar a identificação do processo do aplicativo em execução, mas isso geralmente não é muito difícil.
Eu escrevi uma descrição completa de como fazer isso para uma dll dentro do IIS - http://nodogmablog.bryanhogan.net/2016/09/locating-and-checking-an-executing-dll-on-a-running-web -servidor/
fonte