तीन संभव समाधान
मुझे पता है कि मैं पार्टी में देर से आ रहा हूं, मैं देख रहा था कि चर कॉन्फ़िगरेशन सेटिंग्स समस्या के लिए कोई नया समाधान था या नहीं। कुछ उत्तर हैं जो मैंने पूर्व में उपयोग किए गए समाधानों को छूते हैं, लेकिन अधिकांश थोड़ा जटिल लगते हैं। मैंने सोचा कि मैं अपने पुराने समाधानों को देखूंगा और कार्यान्वयन को एक साथ रखूंगा ताकि यह उन लोगों की मदद कर सके जो एक ही समस्या से जूझ रहे हैं।
इस उदाहरण के लिए मैंने सांत्वना एप्लिकेशन में निम्न एप्लिकेशन सेटिंग का उपयोग किया है:
<appSettings>
<add key="EnvironmentVariableExample" value="%BaseDir%\bin"/>
<add key="StaticClassExample" value="bin"/>
<add key="InterpollationExample" value="{0}bin"/>
</appSettings>
1. पर्यावरण चर का उपयोग करें
मेरा मानना है कि ऑटोकारो ऑटोकोरो का जवाब इस पर था। मैं केवल एक कार्यान्वयन कर रहा हूं जो दृश्य स्टूडियो को बंद किए बिना निर्माण या डिबगिंग के दौरान पर्याप्त होना चाहिए। मैंने दिन में इस घोल का उपयोग किया है ...
'
private void Test_Environment_Variables()
{
string BaseDir = ConfigurationManager.AppSettings["EnvironmentVariableExample"];
string ExpandedPath = Environment.ExpandEnvironmentVariables(BaseDir).Replace("\"", ""); //The function addes a " at the end of the variable
Console.WriteLine($"From within the C# Console Application {ExpandedPath}");
}
'
2. स्ट्रिंग प्रक्षेप का उपयोग करें:
स्ट्रिंग का उपयोग करें। फ़र्मैट () फ़ंक्शन
`
private void Test_Interpollation()
{
string ConfigPath = ConfigurationManager.AppSettings["InterpollationExample"];
string SolutionPath = Path.GetFullPath(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"..\..\"));
string ExpandedPath = string.Format(ConfigPath, SolutionPath.ToString());
Console.WriteLine($"Using old interpollation {ExpandedPath}");
}
`
3. एक स्थिर वर्ग का उपयोग करना, यह वह समाधान है जो मैं ज्यादातर उपयोग करता हूं।
`
private void Test_Static_Class()
{
Console.WriteLine($"Using a static config class {Configuration.BinPath}");
}
`
`
static class Configuration
{
public static string BinPath
{
get
{
string ConfigPath = ConfigurationManager.AppSettings["StaticClassExample"];
string SolutionPath = Path.GetFullPath(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"..\..\"));
return SolutionPath + ConfigPath;
}
}
}
`
परियोजना क्रमांक:
app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
<add key="EnvironmentVariableExample" value="%BaseDir%\bin"/>
<add key="StaticClassExample" value="bin"/>
<add key="InterpollationExample" value="{0}bin"/>
</appSettings>
</configuration>
Program.cs
using System;
using System.Configuration;
using System.IO;
namespace ConfigInterpollation
{
class Program
{
static void Main(string[] args)
{
new Console_Tests().Run_Tests();
Console.WriteLine("Press enter to exit");
Console.ReadLine();
}
}
internal class Console_Tests
{
public void Run_Tests()
{
Test_Environment_Variables();
Test_Interpollation();
Test_Static_Class();
}
private void Test_Environment_Variables()
{
string ConfigPath = ConfigurationManager.AppSettings["EnvironmentVariableExample"];
string ExpandedPath = Environment.ExpandEnvironmentVariables(ConfigPath).Replace("\"", "");
Console.WriteLine($"Using environment variables {ExpandedPath}");
}
private void Test_Interpollation()
{
string ConfigPath = ConfigurationManager.AppSettings["InterpollationExample"];
string SolutionPath = Path.GetFullPath(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"..\..\"));
string ExpandedPath = string.Format(ConfigPath, SolutionPath.ToString());
Console.WriteLine($"Using interpollation {ExpandedPath}");
}
private void Test_Static_Class()
{
Console.WriteLine($"Using a static config class {Configuration.BinPath}");
}
}
static class Configuration
{
public static string BinPath
{
get
{
string ConfigPath = ConfigurationManager.AppSettings["StaticClassExample"];
string SolutionPath = Path.GetFullPath(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"..\..\"));
return SolutionPath + ConfigPath;
}
}
}
}
पूर्व-निर्माण घटना:
प्रोजेक्ट सेटिंग्स -> बिल्ड इवेंट्स