Comment comstackr mon App.config dans mon exe dans une application console VS2010 C #?

Je crée une application console dans Visual Studio 2010 avec c #. Je veux que cette application soit autonome, car tout ce dont vous avez besoin est l’exécutable, et vous pouvez l’exécuter de n’importe où Je souhaite également utiliser app.config pour stocker des chaînes de connexion, etc.

Mon problème est que je n’arrive pas à comprendre comment inclure ces données app.config dans l’exécutable compilé. Je vois que cela crée appname.exe.config, mais je ne veux pas que les gens aient à s’inquiéter de la saisie de deux fichiers distincts lorsqu’ils obtiennent l’application.

Aucune des recherches que j’ai faites n’a abouti à rien. Est-ce seulement possible?

Tu ne peux pas. La moitié de ces fichiers de configuration est d’autoriser les modifications de la configuration de l’application en dehors de celle-ci.

Vous devez simplement modifier votre programme pour qu’il ne dépende pas du fichier de configuration de l’application. Le moyen le plus simple consiste à coller les valeurs de votre configuration dans des variables globales en lecture seule.

Je peux voir où vous allez avec cela, mais la réponse pourrait être un peu plus compliquée que vous ne le cherchiez.

  1. Faites de app.config une ressource incorporée .
  2. Analyser manuellement app.config pour obtenir les parameters d’application par défaut / les chaînes de connexion / etc.
  3. Cherchez toujours un app.config et remplacez les valeurs par défaut que vous avez lues précédemment avec les valeurs app.config

De cette façon, vous avez des valeurs par défaut raisonnables que vous n’avez pas besoin de maintenir séparément de votre app.config en tant que constantes, vous pouvez exécuter votre application en tant qu’exe, et vous pouvez toujours la modifier à l’exécution en l’ajoutant dans le fichier app.config. .

Une chose à garder à l’esprit est que lire dans app.config à partir d’une ressource ne vous donnera pas le même comportement que l’app.config normal. Vous le lisez et l’utilisez à la main.

Vous voulez dire que vous devez l’append à l’exe en tant que ressource? Tout d’abord, vous ne pouvez pas, app.config est basé sur un fichier et non sur une ressource.

D’autre part, le seul sharepoint fichier de configuration est que vous pouvez le changer. Autrement, codez en dur ou utilisez des constantes.

Généralement, vous ne voulez pas faire cela car votre application.config fournit un mécanisme permettant la configuration au moment de l’exécution. En ce qui concerne votre objective spécifique (maintenir la configuration en dehors de votre code, mais le faire suivre le binary), vous avez deux options:

  • Créer dynamicment un fichier de configuration
  • Stocker les parameters dans le registre
  • Stocker les parameters en tant que chaînes de ressources dans l’application console

Je suis sûr qu’il existe d’autres options plus créatives. Ma recommandation serait pour la deuxième option. Lorsque l’application est lancée pour la première fois, créez les clés nécessaires et définissez leurs valeurs par défaut à partir de l’exécutable. Ainsi, si vous avez besoin de déboguer à une date ultérieure, vous pouvez simplement lancer regedit et apporter les modifications nécessaires sans recomstackr.

Comme d’autres l’ont souligné, l’idée d’un fichier de configuration est d’éviter les valeurs codées en dur.

Vous pouvez également créer une section de configuration personnalisée, avec chaque élément optionnel et ses valeurs par défaut. De cette façon, toute personne qui peut se débrouiller avec les valeurs par défaut n’a pas besoin d’un fichier de configuration. Mais s’ils doivent remplacer un paramètre par défaut, ils peuvent en fournir un.

(Désolé, juste un peu de brainstorming. Je n’ai pas d’exemple disponible.)

Comme on le dit ici, l’intérêt d’un fichier de configuration est de modifier certains parameters en dehors de l’application. Vous pouvez coder en dur ou utiliser des constantes, mais vous pouvez également utiliser le registre dans Windows si vous le souhaitez. De cette façon, vous pouvez apporter des modifications à l’application et ne disposer que d’un seul fichier exe.

Le projet de code contient de bonnes informations sur la lecture, l’écriture et la suppression du registre. http://www.codeproject.com/KB/system/modifyregistry.aspx Mais soyez prudent lorsque vous modifiez le registre. De nombreuses applications en dépendent, vous pouvez donc détruire certains parameters si vous faites quelque chose de mal. Je recommande de lire et ensuite de faire.

 public ssortingng Read(ssortingng KeyName) { RegistryKey rk = baseRegistryKey; // Open a subKey as read-only RegistryKey sk1 = rk.OpenSubKey(subKey); // If the RegistrySubKey doesn't exist -> (null) if ( sk1 == null ) { return null; } else { try { // If the RegistryKey exists I get its value // or null is returned. return (ssortingng)sk1.GetValue(KeyName.ToUpper()); } catch (Exception e) { // AAAAAAAAAAARGH, an error! ShowErrorMessage(e, "Reading registry " + KeyName.ToUpper()); return null; } } } public bool Write(ssortingng KeyName, object Value) { try { // Setting RegistryKey rk = baseRegistryKey ; // I have to use CreateSubKey // (create or open it if already exits), // 'cause OpenSubKey open a subKey as read-only RegistryKey sk1 = rk.CreateSubKey(subKey); // Save the value sk1.SetValue(KeyName.ToUpper(), Value); return true; } catch (Exception e) { // AAAAAAAAAAARGH, an error! ShowErrorMessage(e, "Writing registry " + KeyName.ToUpper()); return false; } } public bool DeleteKey(ssortingng KeyName) { try { // Setting RegistryKey rk = baseRegistryKey ; RegistryKey sk1 = rk.CreateSubKey(subKey); // If the RegistrySubKey doesn't exists -> (true) if ( sk1 == null ) return true; else sk1.DeleteValue(KeyName); return true; } catch (Exception e) { // AAAAAAAAAAARGH, an error! ShowErrorMessage(e, "Deleting SubKey " + subKey); return false; } } 

Bien sûr, cela ne fonctionnerait que sous Windows. Je suppose que vous utilisez Visual Studio, donc vous utilisez probablement Windows.

Bon codage et bonne chance!

La meilleure solution de contournement consiste à la créer vous-même au démarrage de l’application.

  1. Ajoutez App.Config en tant que ressource, renommez-le en “App_Config”
  2. Vérifier si le fichier de configuration existe
  3. Sinon, écrivez le fichier .config par défaut

Exemple de code:

Program.cs

  [STAThread] static void Main() { CreateConfigIfNotExists(); } private static void CreateConfigIfNotExists() { ssortingng configFile = ssortingng.Format("{0}.config", Application.ExecutablePath); if (!File.Exists(configFile)) { File.WriteAllText(configFile, Resources.App_Config); } } 

Rappelez-vous qu’il n’écrira que votre configuration actuelle lors de la construction. Il ne le mettra pas à jour automatiquement lorsque vous déploierez une nouvelle version. Il inclura la config telle qu’elle est lors de la construction. Mais cela pourrait suffire 🙂

S’il vous plaît la première réponse sur ce post précédent – Fichier de configuration en tant que ressource incorporée

IL Merge a beaucoup de problèmes avec l’exécutable wpf également lent. J’ai fini par utiliser Cosura.Fody https://github.com/Fody/Costura et utiliser un paramètre de ligne de commande pour transmettre la valeur de configuration de l’application. Utiliser également iexpress http://en.wikipedia.org/wiki/IExpress pour créer un exécutable final avec les arguments en ligne de commande et les fichiers exe fusionnés.

Prenez une application Winform, par exemple, lors de la compilation, un fichier ‘xxx.EXE.config’ sera généré avec le fichier EXE de sortie. Il contiendra les parameters ‘app.config’. Dissortingbuez cela aussi.