Nous avons une solution Visual Studio 2010 qui contient plusieurs projets C# conformément au modèle Onion Architecture de Jeffery Palermo (http://jeffreypalermo.com/blog/the-onion-architecture-part-1/). Nous avons un projet d'interface utilisateur qui est un projet ASP.Net MVC, et nous avons un projet de bibliothèque de classes C# appelé Infrastructure qui est référencé par le projet d'interface utilisateur. Dans notre projet Infrastructure, nous avons ajouté un fichier app.config pour contenir les paramètres spécifiques au projet Infrastructure. Lors de l'exécution, le fichier app.config ne semble pas être disponible pour le projet Infrastructure, uniquement le fichier web.config contenu dans le projet d'interface utilisateur. Nous ne voulons pas mettre les paramètres relatifs au projet Infrastructure dans le fichier web.config du projet d'interface utilisateur, l'interface utilisateur n'a pas besoin de ces paramètres. Comment pouvons-nous rendre le fichier app.config de l'infrastructure disponible lors de l'exécution? Nous pensions peut-être que nous devrions mettre une Post Build Copy pour copier le fichier app.config dans le répertoire de l'interface utilisateur lorsque l'application est créée - est-ce la bonne façon de procéder, ou existe-t-il un meilleur moyen?Fichier app.config Visual C# pour un assembly référencé
Répondre
Même si vous copiez l'application.config après la construction, cela ne résoudra pas votre problème. L'application étant toujours une application Web, le système de configuration utilisera le fichier web.config. Les paramètres devront y aller d'une manière ou d'une autre. Une façon de garder ces paramètres un peu séparés consiste à les placer dans une section de configuration personnalisée, puis à placer les paramètres de cette section dans un fichier distinct. Il faudra quand même qu'il soit référencé depuis le web.config (en utilisant un attribut configSource
).
Généralement, on vous dit que cela ne peut pas être fait. Cependant, vous pouvez certainement charger un fichier de configuration en utilisant la méthode System.Configuration.ConfigurationManager.OpenExeConfiguration. Vous pouvez passer le chemin du fichier à votre assembly (il ne doit pas être un exécutable, malgré le nom de la méthode). Accordé, ceci ne fusionne pas les paramètres de configuration de votre assembly dans les paramètres de configuration de l'application en cours d'exécution, et je ne pense pas que ce soit le cas. Votre assembly doit simplement savoir qu'il doit récupérer ses paramètres via un mécanisme différent de la fonction System.Configuration.ConfigurationManager.GetSection ou de la propriété statique AppSettings de cette classe. Voici un exemple très simple pour une classe "Settings" qui charge un fichier .config pour l'assemblage dont elle fait partie. Maintenant, vous aurez encore
public static class Settings
{
public static System.Configuration.Configuration Configuration { get; private set; }
static Settings()
{
// load a .config file for this assembly
var assembly = typeof(Settings).Assembly;
Configuration = System.Configuration.ConfigurationManager.OpenExeConfiguration(assembly.Location);
if (Configuration == null)
throw new System.Configuration.ConfigurationErrorsException(string.Format("Unable to load application configuration file for the assembly {0} at location {1}.", assembly.FullName, assembly.Location));
}
// This function is only provided to simplify access to appSettings in the config file, similar to the static System.Configuration.ConfigurationManager.AppSettings property
public static string GetAppSettingValue(string key)
{
// attempt to retrieve an appSetting value from this assembly's config file
var setting = Configuration.AppSettings.Settings[key];
if (setting != null)
return setting.Value;
else
return null;
}
}
Et l'utilisation ...
public class UsageExample
{
void Usage()
{
string mySetting = Settings.GetAppSettingValue("MySetting");
var section = Settings.Configuration.GetSection("MySection");
}
}
pour régler les questions de construction. L'ajout d'un élément "Application Configuration File" (App.config) à votre assembly de bibliothèque de classes entraîne Visual Studio pour le copier dans le dossier de sortie de l'assembly en tant que .dll.config, mais il n'est pas automatiquement copié dans le dossier de sortie des applications exécutables cette référence ce projet. Par conséquent, vous devez ajouter une étape de post-construction pour copier le fichier à l'emplacement approprié, comme vous l'avez mentionné. Je considérerais une étape post-construction sur la bibliothèque de classes qui copie le fichier .config dans un dossier "Configurations" au niveau de la solution, puis une étape post-construction pour les projets exécutables pour copier tout depuis le Dossier "Configurations" dans le dossier de sortie. Je ne suis pas sûr que cela fonctionnerait bien, mais si c'est le cas, vous ne créeriez pas de dépendances supplémentaires entre les projets dans vos étapes de post-construction (cela pourrait rendre la maintenance difficile).
EDIT: En fin de compte, vous devriez considérer si c'est vraiment ce que vous voulez faire. Ce n'est pas l'approche normale, et généralement vous pourriez être mieux servi en utilisant l'autre réponse à cette question qui mentionne l'utilisation de l'attribut configSource.Les inconvénients de cette approche qui peuvent ne pas être évidents sont que vous ne pourrez pas mettre les paramètres des composants tiers dans le fichier de configuration de votre bibliothèque de classes et attendez qu'ils soient utilisés. Par exemple, si votre bibliothèque de classes utilise log4net, vous ne pouvez pas mettre les paramètres de log4net dans le fichier de configuration de votre bibliothèque de classes, car les composants log4net s'attendent toujours à charger les paramètres du fichier de configuration de l'exécutable.
- 1. FileNotFoundException levé pour un assembly référencé
- 2. Extrait un assembly non référencé à partir du fichier xap
- 3. Supprimer MessageBox d'un assembly référencé
- 4. Powershell Calling .NET Assembly utilisant App.config
- 5. Utilisation de Type.GetType() avec un assembly non référencé avec Cassini/Visual Studio Dev. Serveur
- 6. C# fichier app.config
- 7. C# Création d'un assembly pour référence future
- 8. fichier app.config avec extension Visual Studio
- 9. J'ai besoin d'un fichier app.config pour être utilisé par un assembly lors de l'initialisation de l'assembly
- 10. Échec de GetType sur une classe dans un assembly référencé
- 11. Comment ajouter un assembly référencé au déploiement d'un projet VSTO?
- 12. Chiffrer un assembly [C#]
- 13. Comment accéder à Web.config à partir d'un assembly référencé?
- 14. Visual Studio Debugging DLL référencé
- 15. assembly de compilation avec Visual C++ Express 2010 64 bits
- 16. Comment fournir des valeurs à un assembly référencé sans appeler explicitement une méthode?
- 17. UnauthorizedAccessException app.config C#
- 18. Pourquoi ma base de code App.Config n'aide-t-elle pas .NET à localiser mon assembly?
- 19. assembly et Visual C++ Express 2010 64 bits
- 20. C# App.Config File
- 21. Emplacement C# App.Config
- 22. Type C# défini dans un assemblage qui n'est pas référencé
- 23. Comment nommer un assembly C++ dans VS2008?
- 24. app.config fichier mélanger pour l'application .net
- 25. Visual Studio 2008 App.config Mise en cache
- 26. Visual studio 2008 - Projet référencé dll
- 27. Utilitaire pour convertir un assembly satellite en fichier .resource
- 28. Visual Studio 2010 MSTest ne peut pas déboguer l'assembly référencé
- 29. Un projet de tests automatisés Visual Studio 2008 peut lire un fichier de configuration tel que app.config? (C# .NET)
- 30. Déterminer la version du fichier dll référencé en C#