ESRI ArcMap Add-in Config.esriaddinx

8

Estou no processo de converter uma extensão mais antiga do ArcMap em um suplemento em C # e estou tentando aproveitar melhor a configuração baseada em XML.

O Config.esriaddinx funciona muito bem na configuração básica (barra de ferramentas, botões, informações sobre extensões, etc.), mas existe uma maneira de adicionar outros parâmetros de configuração, como nomes de campos, nomes de camadas, conexões com o banco de dados, etc.?

Eu precisaria criar um arquivo App.config? Em caso afirmativo, o arquivo App.config ainda seria empacotado / implantado da mesma forma que o restante do suplemento? Qual seria o melhor método para ler os parâmetros? Eu sou um novato em suplementos e quaisquer sugestões ou amostras serão muito apreciadas. Obrigado!

petegis
fonte

Respostas:

4

Primeiro, eu não tentei usar o Config.esriaddinx para esse fim, mas não o recomendaria. Ele se destina à configuração do suplemento em si, não necessariamente aos dados do usuário, e você provavelmente não deseja misturar os dois.

Já faz um tempo desde que eu lidei com isso sozinho, para que eu fique um pouco confuso com os detalhes, mas há vários problemas com o uso de arquivos de configuração nos suplementos do ArcGIS: Suplemento do ArcMap com app.settings que não reconhece o aplicativo .config muda?

Em particular, o diretório para o qual o suplemento é extraído é sobrescrito toda vez que o aplicativo é iniciado, portanto, não é possível persistir alterações nas configurações. Se suas configurações nunca forem alteradas ou apenas forem alteradas a cada nova versão do seu suplemento, isso provavelmente não será uma preocupação.

Se, no entanto, você desejar tornar seu suplemento configurável pelo usuário final, será necessário armazenar as informações configuráveis ​​pelo usuário em outro local para que não sejam substituídas. Eu sugeriria o uso da pasta Application Data do usuário, cujo caminho você pode determinar programaticamente da seguinte maneira:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Eu também sugeriria colocá-lo em uma subpasta com o nome do seu suplemento. Mas, essencialmente, você estaria carregando e salvando em um arquivo nesse local, em vez de ler as configurações da Settingsclasse do seu suplemento ou o arquivo de configuração no diretório do suplemento. Se você quiser usar a configuração do .NET para isso, sugiro ler as Configurações do aplicativo e ConfigurationManager.

O outro problema que tive foi com o uso de seções de configuração personalizadas ao usar a configuração do .NET. Usar Assembly.LoadFrome manipular oAssemblyResolve evento foi a solução para esse problema específico, embora nesse caso eu acabasse não usando a configuração do .NET por esse e outros motivos.

Dependendo da complexidade do seu cenário de configuração, você pode, como eu, evitar o uso completo do sistema de configuração .NET e, em vez disso, usar outro método de leitura e gravação de informações de configuração. Acabei usando SerializableAttributeclasses marcadas ou implementadas IXmlSerializablepara esse fim em um dos suplementos mais complexos que criei, que incluíam configurações configuráveis ​​pelo usuário, como listas de camadas, configurações de conexão etc. Eu recomendaria a leitura de Serialização de objetos. NET , Introdução à serialização XML e como implementar IXmlSerializable corretamente, se você estiver interessado nessa abordagem.

Parece que o seu está na mesma linha, então é com você, mas achei a abordagem de serialização XML preferível à configuração do .NET para todos, exceto os cenários de configuração mais simples (tipos de dados simples, sem hierarquias / coleções).

blah238
fonte
Ótimas informações aqui, @ blah238! Vou examinar essas opções e ver o que funcionará melhor.
precisa saber é
Como você implanta o arquivo xml na pasta Environment.SpecialFolder.ApplicationData quando você distribui o arquivo addin para seus usuários? É um caso de copiar / colar manualmente o arquivo?
Vidar
1

Crie um arquivo config.xml e defina sua ação de construção como AddInContent nas propriedades do VS para o arquivo.

Para adicionar isso com base no comentário, já que você está fazendo isso em C #, eu supunha que você estivesse usando o Visual Studio para criar seu suplemento. A partir daí, se você adicionar um arquivo de configuração XML a partir da opção new file e o nomear config.xml, ele criará um arquivo vazio padrão. A partir daí, você pode especificar as configurações xml do valor da chave na tag appSettings da mesma forma que um arquivo de configuração xml normal e, em seguida, fazer referência a elas no código como faria normalmente. Para alterar sua ação de compilação, quando você tiver o arquivo selecionado no VS, observe a janela de propriedades e deve haver uma configuração de ação de compilação. Selecione isso e ele mostrará uma lista suspensa das opções disponíveis, escolha AddInContent na lista.

Dave Timmins
fonte
1
Bem-vindo ao GISse. Esta é uma resposta muito breve. Ajudaria a incluir mais detalhes, talvez incorporando alguns dos detalhes mencionados pelo @petegis, como adicionar parâmetros específicos a esse arquivo. Além disso, como você criaria esse arquivo? Isso é feito através do ArcMap ou em um editor de texto? Qual é a estrutura adequada? Pense se você nunca criou um antes, o que você precisa saber para fazer isso com êxito. Esse tipo de informação será uma excelente resposta. Bom começo!
Get Spatial
Obrigado @davetimmins. Parece simples, dei uma chance e funcionou desde que o arquivo não seja realmente chamado de "config.xml" (gera um erro de compilação "Não é possível criar um arquivo quando esse arquivo já existe").
precisa