Accéder au fichier de parameters d’un autre projet

Est-il possible d’accéder au fichier de parameters à partir d’un autre projet? Par exemple, j’ai une solution qui contient 2 projets (appelons-les Proj1 et Proj2). Je souhaite accéder aux parameters d’application de Proj2 à partir de Program.cs dans Proj1. Est-ce possible?

Option A: parsingr les valeurs du fichier de configuration de l’autre assemblage (où les parameters sont stockés)

Option B: créer une classe publique dans Proj2 qui expose les valeurs nécessaires à partir de ses parameters en tant que propriétés statiques, puis référencer l’assembly dans Proj1 et Proj1 les valeurs de cette classe.

Option C: Si vous souhaitez exposer TOUS les parameters, vous pouvez modifier l’access de la classe de parameters de internal à public .

Je suis sûr qu’il y a aussi d’autres moyens.

La réponse si vous utilisez C #:
La réponse très simple est de faire un clic droit sur proj2, choisissez l’onglet parameters. En haut, vous trouverez le modificateur d’access de la classe de parameters: interne, changez-le en public. Ajoutez une référence au proj2 dans le proj1 afin de voir la classe Settings proj2. C’est tout.

Je vais republier le contenu du lien de @ Kildareflare pour référence future. Fonctionne toujours dans VS2015, mais pour ma part, je pense que je préfère l’option “B” ci-dessus.

Obtenir l’access aux parameters dans un autre projet

L’une des nouvelles fonctionnalités intéressantes de Visual Studio 2005 est le nouvel éditeur de propriétés. Avec cet éditeur de propriétés, vous pouvez facilement append des parameters à votre application. Mais il y a un problème dans la façon dont il est mis en œuvre. Laisse-moi t’expliquer pourquoi.

Généralement, les parameters sont spécifiques à un projet. Lorsque vous ajoutez un paramètre dans un projet, un outil personnalisé spécial associé au fichier de parameters génère une nouvelle classe que vous pouvez utiliser pour y accéder. Ce qui est bien dans cette classe, c’est sa force typée. Mais derrière la scène, il s’agit simplement d’obtenir une clé d’un fichier XML. Cette classe générée est définie comme “interne scellé”. Cela empêche d’être accessible à partir de tout autre assemblage. Que se passe-t-il si vous souhaitez centraliser l’endroit où vous modifiez ces parameters?

Après de nombreuses tentatives pour l’exposer, j’ai trouvé un moyen rapide et facile de le faire. Disons que nous avons 2 projets dans notre solution: un moteur et une WinApp. Chacun a des parameters mais nous voulons qu’ils soient modifiables à partir de WinApp. Voici à quoi ça ressemble.

Paramètres avant

Si vous souhaitez accéder aux parameters du moteur, voici l’astuce: ajoutez un fichier de lien.

Ajouter un lien

Le fichier de lien sera compilé en tant que partie de votre projet WinApp. La classe de parameters sera toujours interne et scellée, mais dans le projet WinApp au lieu de Engine.

Voici le résultat final:

Paramètres après

Notez que j’ai ajouté un dossier portant le même nom que mon projet de moteur. Cela vous sera utile si vous souhaitez append les parameters de nombreux projets.

Ceci mis en place, vous pouvez accéder à votre moteur en définissant le chemin de votre classe de moteur à partir de votre classe WinApp. Vous pouvez omettre la partie «Moteur» de votre classe de moteur car vous devriez être dans le même espace de noms. Voici à quoi cela devrait ressembler:

 namespace WinApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void AccessConfig() { Engine.Properties.Settings.Default.EngineSetting = "test"; } } } 

Je devais trouver une autre solution en plus de celles déjà données ici, car j’utilisais des transformations XML (via SlowCheetah) dans le fichier App.config de mon projet contenant les parameters. Si vous ne le faites pas, je vous recommande l’une des autres solutions.

J’ai ajouté une étape de post-génération dans le projet consommateur (Proj1 dans l’exemple) pour copier le fichier de configuration à partir du dossier de sortie de Proj2. Cela garantira que les transformations seront appliquées à la configuration. (Dans mon cas, Proj1 est une dll, donc si vous êtes un exe, remplacez les fichiers DestinationFiles de “.dll.config” par “.exe.config”.) Extrait de Proj1.csproj:

    

Ensuite, j’ai créé un lien des Settings.settings de Proj2 en appuyant sur Ctrl + Maj + en faisant glisser le fichier vers Proj1 (comme dans l’article de blog référencé par Kildareflare ).

Je pourrais ensuite référencer des parameters dans Proj1 similaires à: Proj2.Properties.Settings.Default.MySetting .

Remarque: Si vous effectuez cette opération pour les tests unitaires tels que je suis (Proj1 est une DLL de test) et que vous utilisez le programme d’exécution de test ReSharper, veillez à le configurer pour qu’il exécute des tests dans des domaines d’application distincts .

Étant donné que Settings.Designer.cs est une classe internal et que vous ne voulez pas manipuler un fichier de code généré, il est conseillé d’append le secondaire en tant que projet “ami”.

De: modificateur d’access “interne” C # lors de tests unitaires

Ajouter le code suivant au Proj2 AssemblyInfo.cs Proj2

 using System.Runtime.ComstackrServices; [assembly:InternalsVisibleTo("Proj1")] 

Je n’ai pas testé cette méthode moi-même, mais le petit truc d’Eric De Carufel est peut-être ce qu’il vous faut:

http://blog.decarufel.net/2007/10/getting-access-to-settings-in-another.html

Le lien d’origine semble être mort, car il est passé sur un nouveau blog et a supprimé l’ancien contenu.

Le contenu original est ci-dessous:

Obtenir l’access aux parameters dans un autre projet

Jeudi 25 octobre 2007

L’une des nouvelles fonctionnalités intéressantes de Visual Studio 2005 est le nouvel éditeur de propriétés. Avec cet éditeur de propriétés, vous pouvez facilement append des parameters à votre application. Mais il y a un problème de la façon dont il est implémenté. Laisse-moi t’expliquer pourquoi.

Généralement, les parameters sont spécifiques à un projet. Lorsque vous ajoutez un paramètre dans un projet, un outil personnalisé spécial associé au fichier de parameters génère une nouvelle classe que vous pouvez utiliser pour y accéder. Ce qui est bien dans cette classe, c’est sa force typée. Mais derrière la scène, il s’agit simplement d’obtenir une clé d’un fichier XML. Cette classe générée est définie comme “interne scellé”. Cela empêche d’être accessible à partir de tout autre assemblage. Que se passe-t-il si vous souhaitez centraliser l’endroit où vous modifiez ces parameters?

Après de nombreuses tentatives pour l’exposer, j’ai trouvé un moyen rapide et facile de le faire. Disons que nous avons 2 projets dans notre solution: un moteur et une WinApp. Chacun a des parameters mais nous voulons qu’ils soient modifiables à partir de WinApp. Voici à quoi ça ressemble.

Si vous voulez avoir access aux parameters du moteur, voici l’astuce: append un fichier de lien.

Le fichier de lien sera compilé en tant que partie de votre projet WinApp. La classe de parameters sera toujours interne et scellée, mais dans le projet WinApp au lieu de Engine.

Voici le résultat final:

Notez que j’ajoute un dossier portant le même nom que mon projet Engine. Cela vous sera utile si vous souhaitez append les parameters de nombreux projets.

Ceci mis en place, vous pouvez accéder à votre moteur en définissant le chemin de votre classe de moteur à partir de votre classe WinApp. Vous pouvez omettre la partie «Moteur» de votre classe de moteur car vous devriez être dans le même espace de noms. Voici à quoi cela devrait ressembler:

 namespace WinApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void AccessConfig() { Engine.Properties.Settings.Default.EngineSetting = "test"; } } }