使用预定义的设置生成exe

时间:2014-02-14 14:41:43

标签: c# .net vb.net

如果我没有在标题中正确询问,我会道歉...我不知道如何询问或者要求我做什么。

- 假设我有一个名为“TestApp”的简单应用程序,用C#编写。

在该应用程序中,我有下一个变量:

int clientid = 123;
string apiurl = "http://somesite/TestApp/api.php";

当我有一个新客户端时,我需要为他创建一个新的特殊TestApp.exe,更改代码中的'clientid'变量。

这个过程可以自动化吗?要自动更改该变量并导出exe而不让我干扰该过程?

-

我问这个是因为我认为/或者我确信这是可能的,因为下一个流行的例子:

如果我没有正确地问我的问题而且我的英语不好,我会道歉,我会尽力而为。

1 个答案:

答案 0 :(得分:3)

所以你的问题分为两部分:

  1. 您希望基于应用程序的客户端在程序中包含变量
  2. 您希望自动执行设置更改的过程。

  3. 进行自定义设置:

    使用AppSettings

    首先,添加对System.Configuration程序集的引用。

    在你的app.config文件中:

    <configuration>
      <appSettings>
        <add key="ClientID" value="123" />
        <add key="ApiUrl" value="http://somesite/TestApp/api.php" />
      </appSettings>
    </configuration>
    

    在您的代码中,要阅读设置:

    using System;
    using System.Configuration;
    
    class Program
    {
        private static int clientID;
        private static string apiUrl;
    
        static void Main(string[] args)
        {
            // Try to get clientID - example that this is a required field
            if (!int.TryParse( ConfigurationManager.AppSettings["ClientID"], out clientID))
                throw new Exception("ClientID in appSettings missing or not an number");
    
            // Get apiUrl - example that this isn't a required field; you can
            // add string.IsNullOrEmpty() checking as needed
            apiUrl = ConfigurationManager.AppSettings["apiUrl"];
    
            Console.WriteLine(clientID);
            Console.WriteLine(apiUrl);
    
            Console.ReadKey();
        }
    }
    

    More about AppSettings on MSDN


    要自动创建设置:

    这完全取决于你想要的复杂程度。

    • 构建项目时,app.config文件变为TestApp.exe.config
    • 您可以使用ConfigurationManager类来编写配置文件。
    • 此外,您可以编写一个使用自定义设置编写配置文件的Exe,并将其作为构建操作的一部分执行。有很多方法可以实现自动化,这取决于您打算如何部署应用程序。

    以编程方式编写app.config文件appSettings部分的快速示例:

    public static void CreateOtherAppSettings()
    {
        Configuration config =
            ConfigurationManager.OpenExeConfiguration("OtherApp.config");
    
        config.AppSettings.Settings.Add("ClientID", "456");
        config.AppSettings.Settings.Add("ApiUrl", "http://some.other.api/url");
    
        config.Save(ConfigurationSaveMode.Modified);
    }