Ik werk aan een C#-klassenbibliotheek die instellingen uit het bestand web.config
of app.config
moet kunnen lezen (afhankelijk van of de DLL waarnaar wordt verwezen vanuit een ASP.NET-webtoepassing of een Windows Forms-toepassing).
Ik heb dat gevonden
ConfigurationSettings.AppSettings.Get("MySetting")
werkt, maar die code is door Microsoft gemarkeerd als verouderd.
Ik heb gelezen dat ik zou moeten gebruiken:
ConfigurationManager.AppSettings["MySetting"]
De klasse System.Configuration.ConfigurationManager
lijkt echter niet beschikbaar te zijn vanuit een C# Class Library-project.
Wat is de beste manier om dit te doen?
Antwoord 1, autoriteit 100%
Je moet een referentie toevoegenaan System.Configuration
in de referentiesmapvan je project.
U zou zeker de ConfigurationManager
moeten gebruiken in plaats van de verouderde ConfigurationSettings
.
Antwoord 2, autoriteit 98%
Voor een voorbeeld app.config-bestand zoals hieronder:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="countoffiles" value="7" />
<add key="logfilelocation" value="abc.txt" />
</appSettings>
</configuration>
U leest de bovenstaande applicatie-instellingen met behulp van de onderstaande code:
using System.Configuration;
Mogelijk moet u ook een verwijzing naar System.Configuration
in uw project toevoegen als die er nog niet is. U kunt dan als volgt toegang krijgen tot de waarden:
string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];
Antwoord 3, autoriteit 11%
Update voor .NET Framework 4.5 en 4.6; het volgende werkt niet meer:
string keyvalue = System.Configuration.ConfigurationManager.AppSettings["keyname"];
Ga nu naar de klasse Setting via Eigenschappen:
string keyvalue = Properties.Settings.Default.keyname;
Zie Applicatie-instellingen beherenvoor meer informatie.
Antwoord 4, autoriteit 5%
Klik met de rechtermuisknop op je klasbibliotheek en kies de optie ‘Verwijzingen toevoegen’ in het menu.
En selecteer op het .NET-tabblad System.Configuration. Dit omvat het System.Configuration DLL-bestand in uw project.
Antwoord 5, autoriteit 4%
Ik gebruik dit en het werkt goed voor mij:
textBox1.Text = ConfigurationManager.AppSettings["Name"];
Antwoord 6, autoriteit 3%
Lees vanuit configuratie:
Je moet een verwijzing naar de configuratie toevoegen:
- Open “Eigenschappen” in uw project
- Ga naar het tabblad “Instellingen”
- Voeg “Naam” en “Waarde” toe
-
Krijg waarde met de volgende code:
string value = Properties.Settings.Default.keyname;
Opslaan in de configuratie:
Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();
Antwoord 7, Autoriteit 2%
U moet een verwijzing toevoegen aan het systeem. Configuratie-assemblage aan het project.
Antwoord 8, Autoriteit 2%
U kunt het bestand App.config aan een DLL-bestand toevoegen. App.config werkt alleen voor uitvoerbare projecten, omdat alle DLL-bestanden de configuratie van het configuratiebestand voor het EXE-bestand worden uitgevoerd.
Laten we zeggen dat je twee projecten in je oplossing hebt:
- somedll
- somExe
Uw probleem kan gerelateerd zijn aan het feit dat u het app.config-bestand op een dag en niet someexe opneemt. Somedyl kan de configuratie van het Someexe-project lezen.
Antwoord 9
Probeer dit:
string keyvalue = System.Configuration.ConfigurationManager.AppSettings["keyname"];
In de Web.config bestand Dit zou de volgende structuur moeten zijn:
<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
Antwoord 10
Ik had hetzelfde probleem. Lees ze gewoon op deze manier:
System.Configuration.ConfigurationationSettingS.Appstellings [“MySetting”]
Antwoord 11
Stap 1: Klik met de rechtermuisknop op het tabblad Referenties om referentie toe te voegen.
Stap 2: klik op het tabblad Assemblies
Stap 3: zoek naar ‘systeem.configuratie’
Stap 4: klik op OK.
Dan werkt het.
string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];
Antwoord 12
web.config
wordt gebruikt met webtoepassingen. web.config
Standaard heeft verschillende configuraties vereist voor de webtoepassing. U kunt een web.config
voor elke map onder uw webtoepassing hebben.
app.config
wordt gebruikt voor Windows-toepassingen. Wanneer u de toepassing in Visual Studio bouwt, wordt deze automatisch hernoemd naar <appname>.exe.config
en dit bestand moet samen met uw aanvraag worden afgeleverd.
U kunt dezelfde methode gebruiken om de app settings
-waarden van beide configuratiebestanden te bellen:
System.Configuration.ConfigurationationSTingS.Appstellings [“Sleutel”]
Antwoord 13
Zoals ik de beste benadering heeft gevonden om toegang te krijgen tot applicatie-instellingenvariabelen op een systematische manier door een wikkelklasse over systeem te maken. Configuratie zoals hieronder
public class BaseConfiguration
{
protected static object GetAppSetting(Type expectedType, string key)
{
string value = ConfigurationManager.AppSettings.Get(key);
try
{
if (expectedType == typeof(int))
return int.Parse(value);
if (expectedType == typeof(string))
return value;
throw new Exception("Type not supported.");
}
catch (Exception ex)
{
throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
key, expectedType), ex);
}
}
}
Nu hebben we toegang tot de benodigde instellingenvariabelen door harde gecodeerde namen met behulp van een andere klasse zoals hieronder:
public class ConfigurationSettings:BaseConfiguration
{
#region App setting
public static string ApplicationName
{
get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
}
public static string MailBccAddress
{
get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
}
public static string DefaultConnection
{
get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
}
#endregion App setting
#region global setting
#endregion global setting
}
Antwoord 14
Ik raad u ten zeerste aan om een Wrapper voor deze oproep te maken. Iets als een ConfigurationReaderService
en gebruik afhankelijkheid injectie om deze klasse te krijgen. Op deze manier kunt u deze configuratiebestanden voor testdoeleinden isoleren.
Gebruik dus de ConfigurationManager.AppSettings["something"];
Aanbevolen en retourneer deze waarde. Met deze methode kunt u een soort standaard rendement maken als er geen toets beschikbaar is in het bestand.
Antwoord 15
Ook kunt u formo gebruiken:
Configuratie:
<appSettings>
<add key="RetryAttempts" value="5" />
<add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>
Code:
dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts; // Returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10); // Returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10); // Returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();
Antwoord 16
Voor de volledigheid is er nog een andere optie beschikbaar, alleen voor webprojecten:
System.Web.Configuration.WebConfigurationManager.AppSettings[“MySetting”]
Het voordeel hiervan is dat er geen extra referentie hoeft te worden toegevoegd, dus het kan voor sommige mensen de voorkeur hebben.
Antwoord 17
Ik maak altijd een IConfig-interface met typesafe-eigenschappen gedeclareerd voor alle configuratiewaarden. Een Config-implementatieklasse verpakt vervolgens de aanroepen naar System.Configuration. Al uw System.Configuration-aanroepen bevinden zich nu op één plek en het is zoveel gemakkelijker en schoner om te onderhouden en bij te houden welke velden worden gebruikt en om hun standaardwaarden te declareren. Ik schrijf een reeks privéhulpmethoden om algemene gegevenstypen te lezen en te ontleden.
Met behulp van een IoC-framework heeft u overal toegang tot de IConfig-velden in uw toepassing door simpelweg de interface naar een klassenconstructor. U kunt dan ook schijnimplementaties van de IConfig-interface maken in uw unit-tests, zodat u nu verschillende configuratiewaarden en waardecombinaties kunt testen zonder dat u uw App.config- of Web.config-bestand hoeft aan te raken.
Antwoord 18
De ConfigurationManager is niet wat u nodig hebt om toegang te krijgen tot uw eigen instellingen.
Om dit te doen, moet u
. gebruiken
{YourAppName}.Properties.Settings.{settingName}
Antwoord 19
Ik heb de onderstaande aanpak werkend gekregen voor .NET Core-projecten:
Stappen:
- Maak een appsels.json (formaat gegeven) in uw project.
- Maak vervolgens een configuratieklasse. Het formaat wordt hieronder verstrekt.
-
Ik heb een login () -methode gemaakt om het gebruik van de configuratieklasse weer te geven.
APPETINGSS.JSON in uw project maken met inhoud:
{ "Environments": { "QA": { "Url": "somevalue", "Username": "someuser", "Password": "somepwd" }, "BrowserConfig": { "Browser": "Chrome", "Headless": "true" }, "EnvironmentSelected": { "Environment": "QA" } } public static class Configuration { private static IConfiguration _configuration; static Configuration() { var builder = new ConfigurationBuilder() .AddJsonFile($"appsettings.json"); _configuration = builder.Build(); } public static Browser GetBrowser() { if (_configuration.GetSection("BrowserConfig:Browser").Value == "Firefox") { return Browser.Firefox; } if (_configuration.GetSection("BrowserConfig:Browser").Value == "Edge") { return Browser.Edge; } if (_configuration.GetSection("BrowserConfig:Browser").Value == "IE") { return Browser.InternetExplorer; } return Browser.Chrome; } public static bool IsHeadless() { return _configuration.GetSection("BrowserConfig:Headless").Value == "true"; } public static string GetEnvironment() { return _configuration.GetSection("EnvironmentSelected")["Environment"]; } public static IConfigurationSection EnvironmentInfo() { var env = GetEnvironment(); return _configuration.GetSection($@"Environments:{env}"); } } public void Login() { var environment = Configuration.EnvironmentInfo(); Email.SendKeys(environment["username"]); Password.SendKeys(environment["password"]); WaitForElementToBeClickableAndClick(_driver, SignIn); }
Antwoord 20
Als u de ConfigurationManager
Class gebruiken …
Mogelijk moet u System.Configuration.ConfigurationManager
door Microsoft Via Nuget Package Manager
Tools- & GT; Nuget Package Manager- & GT; Beheer Nuget-pakketten voor oplossing …
Eén ding dat het vermelden waard is van de documenten …
Als uw aanvraag alleen-lezen toegang heeft tot zijn eigen configuratie,
We raden u aan om de methode van de nasy (string) te gebruiken. Deze methode
Biedt toegang tot de cache-configuratiewaarden voor de huidige
Toepassing, die betere prestaties heeft dan de configuratie
klasse.
Antwoord 21
Nog een mogelijke oplossing:
var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
Antwoord 22
Ik heb geprobeerd een oplossing voor ditzelfde probleem nu een paar dagen te vinden. Ik was in staat om dit op te lossen door een sleutel toe te voegen binnen de tag van het appsels in het bestand Web.config . Dit moet het .dll-bestand overschrijven bij gebruik van de helper.
<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
Antwoord 23
U kunt de onderstaande regel gebruiken. In mijn geval werkte het:
System.Configuration.ConfigurationationStingS.Appstellings [“YEKEKEYNAME”]
U moet ervoor zorgen dat de bovenstaande regel van de code ook de oude versie is en deze wordt afgeschreven in nieuwe bibliotheken.
Antwoord 24
Controleer de .NET-versie waaraan u werkt. Het zou hoger moeten zijn dan 4. en u moet het systeem van het systeem toevoegen. Configuratie-systeembibliotheek aan uw toepassing.
Antwoord 25
EXTRA: Als u aan een class-bibliotheekproject werkt, moet u de settings.json
-bestand insluiten.
Een klassenbibliotheek mag niet echt rechtstreeks naar binnen verwijzen
app.config – de klas heeft geen app.config, omdat het geen
Toepassing, het is een klasse.
- Ga naar de eigenschappen van het JSON-bestand.
- Wijzigingsactie – & GT; Embedded resource.
- Gebruik de volgende code om het te lezen.
var assembly = Assembly.GetExecutingAssembly();
var resourceStream = assembly.GetManifestResourceStream("Assembly.file.json");
string myString = reader.ReadToEnd();
Nu hebben we een JSON-string die we het kunnen gebruiken met JsonConvert
Als u het bestand niet in de montage hebt ingediend, kunt u niet alleen het DLL-bestand gebruiken zonder het bestand
Antwoord 26
Hier is een voorbeeld: app.config
<applicationSettings>
<MyApp.My.MySettings>
<setting name="Printer" serializeAs="String">
<value>1234 </value>
</setting>
</MyApp.My.MySettings>
</applicationSettings>
Dim strPrinterName as string = My.settings.Printer