c# - 将 app.config 中的值从一个控制台应用程序传递到一个类库

标签 c# azure azure-webjobs

在我的控制台应用程序中,我在 app.config 上有此内容

 <appSettings>
    <add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://xx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xx/KrM="/>
  </appSettings>

控制台应用程序执行以下操作:

 static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Press key to continue");
                Console.ReadKey();
                QueueHelper.ReceiveMessage("Empresa");
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

但是我想将排队方法隔离在不同的类库中,因此 ReceiveMessage 的实际实现在另一个类库中

 /// <summary>
        /// Receives a message
        /// </summary>
        /// <param name="queuName"></param>
        public static void ReceiveMessage(string queuName)
        {
            QueueClient Client = QueueClient.CreateFromConnectionString(connectionString, "Empresa");

            // Configure the callback options
            OnMessageOptions options = new OnMessageOptions();
            options.AutoComplete = false;
            options.AutoRenewTimeout = TimeSpan.FromMinutes(1);

            // Callback to handle received messages
            Client.OnMessage((message) =>
            {
                try
                {
                    Empresa empresa = GetBody<Empresa>(message);
                    // Process message from queue
                    //Console.WriteLine("Body: " + );
                    Console.WriteLine("MessageID: " + message.MessageId);

                    // Remove message from queue
                    message.Complete();
                }
                catch (Exception ex)
                {
                    // Indicates a problem, unlock message in queue
                    message.Abandon();
                }
            }, options);
        }

问题在于它试图从 app.config 获取连接字符串信息,该信息是该库本地的,而不是调用者的。

所以我得到一个空连接字符串。

现在,我不想在我的类库项目中重复应用程序设置,实现此目的的最佳方法是什么?

原因之一是,最终这个控制台应用程序将作为 WebJob 安装在 Azure 中,并且 Azure 有一个界面可以更改 WebJob 的 AppSettings,但不能更改类库的 AppSettings。

最佳答案

使用反射,您也许能够从调用程序集中获取应用程序配置。

下面是示例代码

public static void ReceiveMessage(string queuName)
    {
        var assembly = Assembly.GetCallingAssembly();

        string configPath = new Uri(assembly.CodeBase).LocalPath;
        var configManager = ConfigurationManager.OpenExeConfiguration(configPath);
        var connectionString = configManager.ConnectionStrings.CurrentConfiguration.AppSettings.Settings["Microsoft.ServiceBus.ConnectionString"];


        QueueClient Client = QueueClient.CreateFromConnectionString(connectionString, "Empresa");

        // Configure the callback options
        OnMessageOptions options = new OnMessageOptions();
        options.AutoComplete = false;
        options.AutoRenewTimeout = TimeSpan.FromMinutes(1);

        // Callback to handle received messages
        Client.OnMessage((message) =>
        {
            try
            {
                Empresa empresa = GetBody(message);
                // Process message from queue
                //Console.WriteLine("Body: " + );
                Console.WriteLine("MessageID: " + message.MessageId);

                // Remove message from queue
                message.Complete();
            }
            catch (Exception ex)
            {
                // Indicates a problem, unlock message in queue
                message.Abandon();
            }
        }, options);
    }

ConfigurationManagerSystem.Configuration 程序集的一部分。

如果您有更复杂的场景,请发布详细信息,我将尝试找出解决方案。

关于c# - 将 app.config 中的值从一个控制台应用程序传递到一个类库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31303851/

相关文章:

c# - 如何排队/等待 TPL 任务完成

c# - 您使用哪些(第三方)Visual Studio 2005/2008 调试可视化工具?

C# 从一个图片框拖放到另一个图片框

Azure 可用性集与关联组

c# - 在 Service Fabric 应用程序中运行时 WebJob SDK 不工作

c# - 减去和合并图像以制作视频帧

c# - ADAL Azure AD 身份验证用户的登录信息从不同的 Azure AD session 缓存

sql-server - 有没有办法为所有 AZURES SQL DB 创建用户 dbo?

azure - 如何在没有 "Always On"的情况下保持 Azure WebJob 运行

c# - 来自计时器触发器的 Azure 函数输出服务总线绑定(bind)