winforms 如何在C#项目中不对开发/测试/生产相关的字符串进行硬编码?

wnavrhmk  于 2023-06-24  发布在  C#
关注(0)|答案(1)|浏览(96)

在Windows Forms C#项目中,我有一个指向SSRS报告的URL,该URL取决于开发/测试/生产环境:

  • \\dev\path\to\report
  • \\test\path\to\report
  • \\prod\path\to\report

我想知道URL是否可以在源代码中硬编码?
更一般地说,如果有一个依赖于开发/测试/生产的字符串,我怎么能不在源代码中硬编码呢?

rfbsl7qr

rfbsl7qr1#

我不知道这对您的情况是否有帮助,但您也可以在构建属性中定义配置,并根据特定的运行时上下文设置条件编译符号。

所以如果你有dev,test和prod定义不同的符号。。

你可以利用它来做这样的事情:

[TestClass]
public class SandboxManager
{
    public static SemaphoreSlim UIClosedAwaiter = new SemaphoreSlim(1, 1);
    public static SemaphoreSlim SS_Boot = new SemaphoreSlim(0, 1);
    [AssemblyInitialize]
    public static async Task BootUnitTest(TestContext context)
    {
        ResourceInfo.UTRoot = @"D:\Github\xamarin-21\sasquatch-net-standard-21\sasquatch-net-standard";            
        var dir = Path.Combine(ResourceInfo.UTRoot, "Test", "Logs", $"{DateTime.Now:yyyy-MM-dd}");
        Directory.CreateDirectory(dir);
        TestBase.LogFile = Path.Combine(dir, "log.txt");
        if(File.Exists(TestBase.LogFile)) File.Delete(TestBase.LogFile);
#if SBX_SQFA
        UIClosedAwaiter.Wait(0);
        SQInstance.RunContext = RunContext.UnitTestFullUI;
        MainActivitySandbox.Boot();
        await SS_Boot.WaitAsync();
        await onBootSQFA();
#elif SBX_UI_LITE
        UIClosedAwaiter.Wait(0);
        SQInstance.RunContext = RunContext.UnitTestLiteUI;
        AppWOUISandbox.Boot();
        UIControlSandbox.Boot();
        await SS_Boot.WaitAsync();
#elif SBX_MOCK_AI
        SQInstance.RunContext = RunContext.UnitTestLiteInstance;
        AppWOUISandbox.Boot();
#else
        SQInstance.RunContext = RunContext.UnitTestPrimitive;
#endif
        SS_Boot.EnsureRelease();
        await Task.Delay(100);
    }

相关问题