在Visual Studio中基于生成类型设置变量

本文关键字:类型 设置 变量 于生成 Visual Studio | 更新日期: 2023-09-27 18:26:15

我正在构建一个在两个第三方服务之间进行接口的应用程序。这两个第三方服务都可以使用沙箱环境,沙箱环境使用不同的URL、用户名和密码。我需要想出一些方法来表示我的构建是否应该尽可能有效地利用沙箱或生产。

目前,我有一个全局静态类,其中包含一个名为isDebug的布尔值,并且我正在对调试和生产之间可能不同的每个值使用三元运算符。这些值包括:URL、用户名、密码、表单ID、用户ID等。有没有一种有效的方法可以设置这些值,比如在web.config或其他文件中?

全局类示例:

public static class GlobalVariables
{
    public static bool InDebug = false;
    public static readonly string Service1 = InDebug ? "https://example1.com" : "https://sandbox.example1.com";
}

在我的内班

public struct ZdForms
{
    public static readonly long DefaultForm = GlobalVariables.InDebug ? 91267 : 140508;
    public static readonly long IssueForm = GlobalVariables.InDebug ? 91257 : 34708;
}

在Visual Studio中基于生成类型设置变量

可以使用#if指令。

例如,这个。。。

public static readonly string Service1 = InDebug
    ? "https://example1.com"
    : "https://sandbox.example1.com";

会变成。。。

#if DEBUG
    public static readonly string Service1 = "https://example1.com";
#else
    public static readonly string Service1 = "https://sandbox.example1.com";
#endif

当您在Debug下编译时,只有顶部的Service1才会被编译。当您在任何其他版本下编译时,底部的Service1。这可能适用于调试/发布情况,但如果您开始需要更多配置,您的源代码将被这些指令弄得一团糟。。。在这种情况下,将配置文件与转换一起使用可能是最好的方法。

此外,您将得到两个不同的二进制文件——一个用于调试,另一个用于非调试。

您可以在项目属性>构建>条件编译符号(用空格分隔)下为每个配置定义额外的指令常量。

您可以使用配置转换将这些值存储在.config文件中。转换将基于选定的生成配置自动应用。

转换包括使用XPath syntax添加、删除或修改配置文件的不同部分的功能。

示例:

<configuration xmlns:xdt="...">
  <connectionStrings>
    <add name="AWLT" connectionString="newstring"
       providerName="newprovider"
       xdt:Transform="Replace" 
       xdt:Locator="Condition(@name='oldname'
         or @providerName='oldprovider')" />
  </connectionStrings>
</configuration>

转换文件名为web.<configuration name>.config,位于web.config文件旁边。添加一个最简单的方法是右键单击web.config文件并"添加配置转换"。