Pergunta

Eu tenho um exe com um App.Config arquivo.Agora eu quero criar um wrapper dll todo o exe para consumir algumas das funcionalidades.

A pergunta é como posso acessar o aplicativo.configuração de propriedade do exe do wrapper dll?

Talvez eu devesse ser um pouco mais nas minhas perguntas, eu tenho o aplicativo a seguir.configuração de conteúdo com o exe:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="myKey" value="myValue"/>
  </appSettings>
</configuration>

A questão é como obter "meuvalor" fora do wrapper dll?


obrigado por sua solução.

Na verdade, minha idéia inicial era evitar arquivo XML método de leitura ou LINQ ou o que seja.A minha solução preferida foi a de usar o configuração do gerenciador de bibliotecas e similares.

Eu aprecio qualquer ajuda que utiliza as classes que são normalmente associados com o acesso ao aplicativo.propriedades de configuração.

Foi útil?

Solução 2

Depois de alguns testes, encontrei uma maneira de fazer isso.

  1. Adicionar o Aplicativo.Arquivo de configuração para o projeto de teste.Use "Adicionar um link" opção.
  2. Utilização System.Configuration.ConfigurationManager.AppSettings["myKey"] para acessar o valor.

Outras dicas

O ConfigurationManager.OpenMappedExeConfiguration Método irá permitir que você para fazer isso.

Exemplo de página da MSDN:

static void GetMappedExeConfigurationSections()
{
    // Get the machine.config file.
    ExeConfigurationFileMap fileMap =
        new ExeConfigurationFileMap();
    // You may want to map to your own exe.comfig file here.
    fileMap.ExeConfigFilename = 
        @"C:\test\ConfigurationManager.exe.config";
    System.Configuration.Configuration config =
        ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
        ConfigurationUserLevel.None);

    // Loop to get the sections. Display basic information.
    Console.WriteLine("Name, Allow Definition");
    int i = 0;
    foreach (ConfigurationSection section in config.Sections)
    {
        Console.WriteLine(
            section.SectionInformation.Name + "\t" +
        section.SectionInformation.AllowExeDefinition);
        i += 1;

    }
    Console.WriteLine("[Total number of sections: {0}]", i);

    // Display machine.config path.
    Console.WriteLine("[File path: {0}]", config.FilePath);
}

EDITAR:Este deve, a saída de "myKey" valor:

ExeConfigurationFileMap fileMap =
    new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = 
    @"C:\test\ConfigurationManager.exe.config";
System.Configuration.Configuration config =
    ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
    ConfigurationUserLevel.None);
Console.WriteLine(config.AppSettings.Settings["MyKey"].Value);

Eu acho que o que você está procurando é:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)

Eu segunda Gishu de que não há outra maneira.Não seria melhor para abstact/comum"público" parte do EXE em DLL criar um wrapper EXE para executá-lo?Este é, certamente, o mais habitual padrão de desenvolvimento.Só as coisas que você deseja consumir iria para a DLL e EXE iria fazer todas as coisas que no momento não, menos o que foi a DLL.

É um arquivo xml, você pode usar o Linq-XML ou DOM abordagens de base para analisar a informação relevante.
(que disse que eu ia pergunta se não há um melhor design para o que quer que seja..você está tentando alcançar.)

Adicionar um link no IDE seria apenas ajuda durante o desenvolvimento.Eu acho que lomaxx tem o direito idéia: System.Configuration.ConfigurationManager.OpenExeConfiguration.

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