Je stocke mes paramètres d'application dans mon fichier web.config et y accède à l'aide de ConfigurationManager.GetSection ou ConfigurationManager.AppSettings. J'ai créé un test pour m'assurer que les paramètres que je reçois de ma classe sont les paramètres corrects dans le fichier web.config, cependant, il retourne des valeurs nulles. Comment puis-je dire à mon test d'unité que la bibliothèque de classes doit utiliser le fichier web.config pour sa configuration plutôt que le fichier app.config qui accompagne la bibliothèque de classes? Dans ce cas, puisque je génère un test rapide, j'utilise la bibliothèque de test VS Unit intégrée.Test de la configuration Web à partir de la bibliothèque de classes
Répondre
j'ai pu ajouter le fichier app.config à l'application des tests pour obtenir mon problème résolu .
Dans votre fichier app.config, vous pouvez ajouter le "fichier" attribut à votre élément appSettings:
< appsettings file = "d: \ mydir \ web.config">
Je suis Ce n'est pas une bonne pratique, mais votre app.config héritera des paramètres de votre web.config.
J'ai essayé d'ajouter un fichier app.config à la bibliothèque de classes, en ajoutant dans ma section de configuration personnalisée, et en ajoutant l'attribut à la sectionGroup pour pointer vers le fichier web.config, cependant, il génère toujours des valeurs nulles. Lorsque l'application Web s'exécute, j'obtiens les résultats attendus. –
ok. Ouais. l'attribut file ne fonctionne que pour appSettings et pas pour les autres sections personnalisées. –
Pas de problème. D'autres idées? –
assez long, mais essayez ceci:
using System;
using System.Configuration;
using System.Web;
using System.Web.Caching;
using System.Xml;
using System.Xml.Serialization;
namespace Sol3.Configuration
{
//######################################################################################################################################################
/// <summary>
/// This creates a configuration section handler letting the system know that any object with a
/// typeof(ClientConfiguration) can tie directly to the config file and section.
/// </summary>
public class ClientSetupSerializerSectionHandler : IConfigurationSectionHandler
{
public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
XmlSerializer ser = new XmlSerializer(typeof(Sol3.Configuration.ClientSetupConfiguration));
return ser.Deserialize(new XmlNodeReader(section));
}
}
//######################################################################################################################################################
/// <summary>
/// This is the concrete class that will handle the "ClientHandler" section in the web.config.
/// </summary>
[Serializable()]
[XmlRoot("BasicSetup")]
public class ClientSetupConfiguration
{
#region Properties
[XmlElement("HomePageRedirect")] public string HomePageRedirect;
[XmlElement("ServicesRootUrl")] public string ServicesRootUrl;
[XmlElement("CookieDomain")] public string CookieDomain;
[XmlElement("AllowScriptAccess")] public string AllowScriptAccess;
...
[XmlElement] public string Info_Server;
[XmlElement] public string Info_Database;
#endregion
#region Static Methods
public static ClientSetupConfiguration GetSetupConfig()
{
if (HttpContext.Current.Cache["ClientSetupConfiguration"] == null)
HttpContext.Current.Cache.Insert("ClientSetupConfiguration", ConfigurationManager.GetSection("BasicSetup"));
return (Sol3.Configuration.ClientSetupConfiguration)HttpContext.Current.Cache["ClientSetupConfiguration"];
}
#endregion
}
}
Je puis créé une classe "aide" qui ressemble à ceci:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace Sol3 {
static class AppSettings
{
public static string Info_Server { get { return Sol3.Configuration.ClientSetupConfiguration.GetSetupConfig().Info_Server; } }
public static string Info_Database { get { return Sol3.Configuration.ClientSetupConfiguration.GetSetupConfig().Info_Database; } }
...
static public bool inProduction { get { return Info_Server.ToLower().Contains("rackspace"); } }
}
}
Maintenant, où que vous soyez dans le code que je peux appeler Sol3.AppSettings. Info_Server et il obtient cette information à partir du web.config.
Tout cela est fait dans un projet de DLL et a travaillé pour nous pendant un certain temps maintenant. Le GetSetupConfig() est la clé car cela est la façon dont il sait obtenir le fichier web.config ...
HTH
Eh bien, mon code fonctionne, mais lors du test, le projet de test ne sait pas quel fichier de configuration utiliser. Comment cela est-il connu avant l'exécution pour tirer du web.config? –
Hmm, bonne question. Je n'ai pas essayé ce code dans cette situation. Vous pouvez voir s'il y a quelque chose dans mon blog sur l'utilisation de plusieurs configurations - http://sol3.net/blogs/starpilot/archive/2008/04/21/using-multiple-config-files-in-one-application. aspx. –
- 1. HtmlEncode de la bibliothèque de classes
- 2. Charge partielle de la bibliothèque de classes
- 3. Lire la configuration IIS7 à partir de l'application Web?
- 4. Configuration ASP.NET non attachée à la bibliothèque
- 5. configuration pour la bibliothèque de classes java sur la distribution tomcat
- 6. Modification/migration de la bibliothèque de classes
- 7. Référence de service Web dynamique de la bibliothèque de classes utilisée dans l'application Winforms (C#)
- 8. C#: classes de test d'unité d'application Web
- 9. Accès contexte utilisateur à partir d'une bibliothèque de classes
- 10. ASP.NET MVC Partage de fichiers JavaScript à partir de la bibliothèque de classes
- 11. Appel de la bibliothèque de classes .NET (dll) à partir de VB
- 12. Ajout de la référence System.Web.Script dans la bibliothèque de classes
- 13. LINQ mappage externe à la bibliothèque de classes
- 14. Bibliothèque de classes de base
- 15. Chargement de la bibliothèque Dojo à partir d'AOL et des codes Widget à partir de Local?
- 16. Référencement d'un projet de service Web à partir d'un projet de test unitaire: projet absent de la liste
- 17. Utiliser * .pdf dans le projet de bibliothèque de classes (web)
- 18. C# usercontrol en fonction de la bibliothèque de classes d'utilisateurs
- 19. utilise la bibliothèque de classes vC++ dans C#
- 20. Exemple de configuration de Ninject 2 pour les projets de bibliothèque de classes
- 21. Comment puis-je rediriger la sortie de test à partir de Test :: Simple de Perl?
- 22. Exécution d'un test JUnit à partir de la console Groovy
- 23. VS 2010 Bêta 2, impossible d'ajouter une référence à System.Web.Routing à partir de la bibliothèque de classes
- 24. Modification du projet Web en bibliothèque de classes
- 25. Ajout d'une référence de service à partir d'une bibliothèque de classes
- 26. Localisation dans Bibliothèque de classes
- 27. Lecture de la configuration .NET à partir de la base de données
- 28. Bibliothèque de classes dans Visio
- 29. Mise à niveau de la bibliothèque Enterprise - v1.0 à v4.1
- 30. Extraction d'un événement (tabControl_DrawItem) dans la bibliothèque de classes
En fait, même en modifiant mon app.config et en supprimant cette section, cela a fonctionné. Le problème sous-jacent était qu'un attribut échouait ailleurs dans le fichier web.config, donc cela ne fonctionnait pas. –