Compartiendo la configuración entre 2 aplicaciones -- # campo con configuration camp Relacionados El problema

Sharing configuration between 2 applications


0
vote

problema

Español

Se siente así debería tener una solución simple.

Estoy desarrollando una herramienta que va a tener un par de componentes: va a comenzar como una herramienta de línea de comando que luego vamos a envolver en una aplicación WPF. La herramienta es para producir scripts de migración de la base de datos. Estos van a ser de origen controlados y se sentarán en un lugar en particular en la máquina de cada usuario.

Me gustaría almacenar esta ubicación como una configuración que no necesita proporcionar el programa de línea de comandos y que se puede configurar en la versión de UI. También puede haber otra información que sería útil compartir entre los programas como este (en un conjunto una vez / rara vez).

No quiero tener una ruta codificada a un archivo de configuración en el código, ya que no va a ser portátil entre los diferentes usuarios del programa.

Sé que podría pasar el nombre del directorio a la aplicación de la línea de comandos y también podría hacerlo al tener una configuración de la aplicación que las personas establecidas manualmente en su máquina. No me gusta lo primero porque es repetitivo y escribir rutas en la línea de comando es un dolor y no me gusta este último porque si necesita cambiarlo, entonces tiene que averiguar qué está haciendo el programa y luego vaya a excavar en carpetas aleatorias Para modificar el archivo a mano (¡lo que de nuevo es bastante horrible!).

Parece que esto debería resolver el problema y probablemente sea, siento que probablemente me estoy perdiendo un truco en alguna parte.

No me molesta con usar los objetos de configuración nativa, en muchos sentidos, preferiría que solo sea un archivo XML en algún lugar, ya que mantiene las cosas agradables y simples para actualizar o agregar cosas nuevas a.

ideas por favor!

Original en ingles

It feels like this should have a simple solution.

Im developing a tool which is going to have a couple of components - its going to start as a command line tool that we're then going to wrap in a wpf app. The tool is for producing database migration scripts. These are going to be source controlled and sit in a particular place on each user's machine.

I would like to store this location as a setting that doesnt need providing to the command line program and that can be set in the UI version. There may also be other information it would be useful to share between the programs like this (in a set once/rarely way).

I dont want to have a hard-coded path to a config file in the code as that isn't going to be portable between different users of the program.

I know I could just pass the directory name to the command-line app and could also do it by having an app config that people manually set once on their machine. I dont like the former because it's repetitive and typing paths on the command line is a pain and I dont like the latter because if you need to change it then you have to figure out what the program is doing and then go digging around in random folders to modify the file by hand (which again is quite horrible!).

It seems like this should be solved problem and it probably is - I feel like I'm probably missing a trick somewhere.

I'm not bothered about using native Settings objects - in many ways I would prefer it to just be an xml file somewhere as that keeps things nice and simple for upgrading or adding new things to.

Ideas please!

     

Lista de respuestas

1
 
vote
  1. Puede preguntarle a un usuario un directorio solo una vez, cuando el programa se ejecute por primera vez. Luego, almacenará el valor proporcionado en la configuración y lo usará después. Por supuesto, debe proporcionar una posibilidad de anular este valor más tarde.
  2. Si le entiendo correctamente, no desea que el usuario busque un archivo de configuración en algunas carpetas "extrañas". Si es así, puede considerar usar entierro.getfolderpath para obtener la ruta a mydocuments , Desktop o cualquier otro directorio de conocimientos técnicos y guardar la configuración allí .
  3. en cuanto a la configuración. Ya están almacenados como XML. Si no le gusta la estructura de este XML, puede crear su propio proveedor de configuración personalizada (lea sobre ConfiguraciónProviderTtribute ). También puede crear fácilmente su propia solución. Es suficiente para crear una clase con algunas propiedades y serializar / deserializarlo, por ejemplo, con XMLSERIALZIER .
 
  1. You could ask a user for a directory only once, when the program is run for the first time. Then you will store provided value in settings and use it afterwards. Of course you have to provide a possibility to override this value later.
  2. If I understand you correctly, you don't want to make user to look for configuration file in some "strange" folders. If so, you can consider using Environment.GetFolderPath in order to get path to MyDocuments, Desktop or any other well know directory and save settings there.
  3. As to the settings. They are already stored as XML. If you don't like the structure of this XML, you can create your own custom settings provider (read about SettingsProviderAttribute). You can also easily create your own solution. It is enough to create a class with some properties and serialize/deserialize it for example with XmlSerialzier.
 
 
   
   
0
 
vote

Supongo, puede usar machine.config para almacenar las entradas visibles a nivel mundial.

Puede ubicarlo en función de Marco de Target .NET y BIT OS

  1. para .net 2.0 y 3.5 - & gt; c:WindowsMicrosoft.NETFrameworkv2.0.50727CONFIG
  2. para .net 4.0 - & gt; c:WindowsMicrosoft.NETFrameworkv4.0.30319Config

No he usado Machine.config en la aplicación, esas no se basan en la web. Sin embargo, vale la pena intentarlo.

También puede encontrar un código de muestra aquí en MSDN.

Nota: Hay dos archivos Machine.config si está en un entorno de 64 bits. Uno para Framework64 y otro para marco. Asegúrese de que esté en el derecho, o ambos.

 

I presume, you can use machine.config to store globally visible entries.

You can locate it on based on target .net framework and OS bit

  1. For .NET 2.0 and 3.5 -> c:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\
  2. For .NET 4.0 -> c:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\

I haven't't used machine.config in application those are not web based. However, it worth a try.

You can also find some sample code here at MSDN.

Note: There are two machine.config files if you are in a 64-bit environment. One for Framework64 and one for Framework. Make sure it is in the right one, or both.

 
 
   
   
0
 
vote

El proyecto en el que estaba trabajando ha terminado siendo solo ser una colección de herramientas de línea de comandos, algunas de las cuales se basa en la parte superior de otras.

La configuración realmente no está diseñada para ser utilizada en la línea de comandos: he documentado un montón del dolor en el que me encontré en Este otro post . Después de pasar por todas estas cosas, finalmente descubrí que no trabajan en el ensamblaje cruzado, si llama a un ensamblaje que tiene la configuración de otra asamblea, obtendrás configuraciones nuevas en lugar de la configuración que la otra asamblea usaría si se ejecutara por sí mismo.

La forma en que resolví esto al final fue simplemente hacerlo a mano. Cuando se trata de ella, no es difícil escribir algo mismo

La arquitectura de IT es bastante similar a la biblioteca:

La clase principal parece esto:

  public class ProgramSettings {     private readonly string _path;     private readonly List<Setting> _settings;     private readonly SettingProvider _settingProvider;     private readonly ConsoleWriter _writer;      public ProgramSettings(string programName, SettingProviderFactory settingProviderFactory, ConsoleWriter writer)     {         _writer = writer;         var appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);         var folder = Path.Combine(appData, companyName, programName);         _path = Path.Combine(folder, "settings.xml");         _settings = new List<Setting>();          if (!Directory.Exists(folder))             Directory.CreateDirectory(folder);          _settingProvider = settingProviderFactory.GetProvider(_path, _settings);     }      public Setting Add(string name, string description)     {         var setting = new Setting(name, description);         _settings.Add(setting);         return setting;     }      public string Load()     {         _settingProvider.Load();         _writer.WriteLine("using config at " + _path);          if (_settings.All(s => s.IsSet))             return null;          _settingProvider.Save();          var description = string.Join(" ", _settings.Where(s => !s.IsSet).Select(s => s.Description));         return description + "  need setting in config";     } }   

Se parece a este establecimiento:

  public class Setting {     private readonly string _description;     public string Name { get; private set; }      public Setting(string name, string description)     {         Name = name;         _description = description;     }      public string Value { get; set; }      public string Description     {         get { return string.Format("{0}: {1}", Name, _description); }     }      public bool IsSet     {         get { return Value != null; }     } }   

Aparte de eso, solo necesita algo que escriba un archivo XML basado en la configuración que haya omitido que más unas pocas interfaces de inescation + nombres de la empresa con codificación dura por el bien de la brevedad.

 

The project I was working on has ended up just being a collection of command line tools some of which build on top of other ones.

The settings really aren't designed to be used from the command line - I've documented a lot of the pain I ran into in this other post. After going through all this stuff I finally discovered they dont work cross-assembly - if you call an assembly that has settings from another assembly you will get new settings rather than the settings that the other assembly would use if it was run on it's own.

The way I solved this in the end was to just do it by hand. When it comes down to it, its not hard to write something yourself

The architecture of it is fairly similar to the library one:

The main class looks like this:

public class ProgramSettings {     private readonly string _path;     private readonly List<Setting> _settings;     private readonly SettingProvider _settingProvider;     private readonly ConsoleWriter _writer;      public ProgramSettings(string programName, SettingProviderFactory settingProviderFactory, ConsoleWriter writer)     {         _writer = writer;         var appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);         var folder = Path.Combine(appData, companyName, programName);         _path = Path.Combine(folder, "settings.xml");         _settings = new List<Setting>();          if (!Directory.Exists(folder))             Directory.CreateDirectory(folder);          _settingProvider = settingProviderFactory.GetProvider(_path, _settings);     }      public Setting Add(string name, string description)     {         var setting = new Setting(name, description);         _settings.Add(setting);         return setting;     }      public string Load()     {         _settingProvider.Load();         _writer.WriteLine("using config at " + _path);          if (_settings.All(s => s.IsSet))             return null;          _settingProvider.Save();          var description = string.Join("\n", _settings.Where(s => !s.IsSet).Select(s => s.Description));         return description + "\n need setting in config";     } } 

A setting itself looks like this:

public class Setting {     private readonly string _description;     public string Name { get; private set; }      public Setting(string name, string description)     {         Name = name;         _description = description;     }      public string Value { get; set; }      public string Description     {         get { return string.Format("{0}: {1}", Name, _description); }     }      public bool IsSet     {         get { return Value != null; }     } } 

Apart from that you just need something that writes out an xml file based on the settings I've omitted that plus a few unexciting interfaces + hardcoded company names for the sake of brevity.

 
 

Relacionados problema

15  ¿Cómo excluir los valores predeterminados de Python ConfigParser .Items ()?  ( How to exclude defaults from python configparser items ) 
Estoy usando ConfigParser para cargar en datos de un archivo de configuración de la siguiente manera: test.conf: [myfiles] fileone: %(datadir)s/somefil...

29  Archivo de configuración de servicio de Windows C #  ( Windows service config file c sharp ) 
He desarrollado una aplicación de servicio de Windows utilizando Visual Studio 2008 / C #. Tengo un archivo app.config en el proyecto. Cuando está instalado...

2  Finalizando un tracelistedor personalizado con AutoFlush = 'Falso' (C #, .NET)  ( Finalizing a custom tracelistener with autoflush false c net ) 
Estoy escribiendo un tracelistedor personalizado para escribir mensajes de seguimiento a un archivo que agregue rotación (por ejemplo, cambiando el nombre del...

27  Bibliotecas de archivo de configuración de Linux [cerrado]  ( Linux configuration file libraries ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...

28  ConfigurationManager.appSettings Preocupaciones de rendimiento  ( Configurationmanager appsettings performance concerns ) 
Planeo almacenar todas mis configuraciones de configuración en la sección APP.CONFIG de My Application (usando la clase ConfigurationManager.AppSettings ). A...

12  ¿Cómo manejar la configuración de la aplicación de la aplicación específica del medio ambiente?  ( How to handle environment specific application configuration organization wide ) 
Problema Su organización tiene muchas aplicaciones separadas, algunas de las cuales interactúan entre sí (para formar sistemas "). Debe implementar estas ap...

2  VIM: Cómo actualizar el texto al guardar  ( Vim how to update text when saving ) 
Estoy tratando de meterme en el hábito de usar un editor (GVIM 7.3 en Windows XP) para todas las tareas de programación y desarrollo. Me gustaría actualizar...

5  Usando ConfigSource, y cambiando RestArtonexternalChanges para la sección central  ( Using configsource and changing restartonexternalchanges for core section ) 
Me gustaría usar el ConfigSource Atributo de mi sección de configuración web para definir archivos externos para varias configuraciones. particularmente, ...

198  Usando diferentes web.config en el desarrollo y el entorno de producción  ( Using different web config in development and production environment ) 
Necesito usar una cadena de conexión de base de datos diferente y la dirección del servidor SMTP en mi aplicación ASP.NET, dependiendo de que se ejecute en el...

17  Cifrado de contraseña en Delphi  ( Password encryption in delphi ) 
Necesito almacenar contraseñas de la base de datos en un archivo de configuración. Por razones obvias, quiero cifrarlas (preferiblemente con AES). ¿Alguien sa...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos