C# 将app.config中的值从一个控制台应用程序传递到一个类库
在我的控制台应用程序中,app.config上有这个C# 将app.config中的值从一个控制台应用程序传递到一个类库,c#,azure,azure-webjobs,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>
<appSettings>
<add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://xx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xx/KrM="/>
</appSettings>
但是,我想将Queing方法隔离在另一个类库中,因此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);
}
//
///收到消息
///
///
公共静态void ReceiveMessage(字符串queuName)
{
QueueClient=QueueClient.CreateFromConnectionString(connectionString,“Empresa”);
//配置回调选项
OnMessageOptions=新建OnMessageOptions();
options.AutoComplete=false;
options.AutoRenewTimeout=TimeSpan.FromMinutes(1);
//回调以处理收到的消息
Client.OnMessage((message)=>
{
尝试
{
Empresa Empresa=GetBody(消息);
//处理来自队列的消息
//Console.WriteLine(“正文:+);
Console.WriteLine(“MessageID:+message.MessageID”);
//从队列中删除消息
message.Complete();
}
捕获(例外情况除外)
{
//表示出现问题,请解锁队列中的消息
消息。放弃();
}
},选项);
}
问题是它试图从app.config获取连接字符串信息,而app.config是该库的本地信息,而不是调用方的本地信息
所以我得到一个空连接字符串
现在,我不想在我的类库项目中重复应用程序设置,如何以及什么是实现这一点的最佳方法
其中一个原因是,最终此控制台应用程序将作为WebJob安装在Azure中,Azure有一个接口可以更改WebJob的应用程序设置,但不能更改类库的应用程序设置。使用反射,您可能能够从调用程序集获得应用程序配置 下面是一个示例代码
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);
}
ConfigurationManager
是System.Configuration
组件的一部分
如果你有一个更复杂的场景,那么请发布详细信息,我将尝试找出解决方案
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);
}