tldr - NServiceBus.Host.exe劫持我在调试模式下的app.configNServiceBus主机控制台使用错误应用程序配置
当使用配置管理器,我不能够访问的appSettings,因为我是项目在内部调用代码。
我使用自己的主机与NServiceBus主机NuGet包,版本4.4.2
namespace EnrollmentService.Reporting
{
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server
{
public EndpointConfig()
{
//TODO: WHAT IS HAPPPEEENNIIINNNGG
var url = ConfigurationManager.AppSettings["configurationKey"];
var config = ConfigurationManager.OpenExeConfiguration("EnrollmentService.Reporting.dll");
var nsbHostConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
}
}
变量“网址”回来空。 变量'config'曾经是此应用程序的配置上下文。 变量'nsbHostConfig'是应用程序的实际配置上下文。
此外,配置的预期路径是“EnrollmentService.Reporting.dll.config”,但实际路径是“NServiceBus.Host.exe.config”。 NServiceBus配置文件不存在。
这似乎是一个机器特有的问题,因为它按预期工作,在其他机器上使用“* .dll.config”。
这是有道理的,我认为这最终调用代码可执行文件应为“运行”应用程序的配置,但以前,它是用预期的* .dll.config。对我而言,NServiceBus会更改配置上下文,因为出于调试目的,主机作为控制台应用程序运行,但对于部署,它作为Windows服务安装。无论何时需要开发,都需要将您的配置文件交换出去,这将是愚蠢的。
为什么我的自主应用程序的操作环境切换到使用NServiceBus可执行文件的配置?
UPDATE:
下面,是什么应该发生,但它不是
望着NServiceBus源代码,如果没有指定您的EndpointType被在你的app.config中,EndpointTypeDeterminer.cs通过程序集扫描找到你的EndpointType类型为IConfigureThisEndpoint。
public string EndpointConfigurationFile
{
get { return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, type.Assembly.ManifestModule.Name + ".config"); }
}
该配置文件路径,然后通过System.AppDomainSetup用来调用System.AppDomain.CreateDomain
我了解您的修改内容,但我不清楚这是否会回答您的问题。是否有不同的端点,不允许类型确定器识别正确的程序集?我对根本原因感兴趣。 – 2014-12-01 21:38:35
它不回答我的问题,我看到什么**应该发生在源代码中,但这不是发生了什么。我仍在寻找更多相关信息。我会尝试明天进入NServiceBus.Host.exe。它也发生在我们代码库中的多个端点上,但仅限于我的机器上。 – SpykeBytes 2014-12-01 22:19:47
我一直在尝试将NuGet软件包中的端点和外观分离出来,并消耗这些内容,而不是采用单一的解决方案。这可能与它有关。 – SpykeBytes 2014-12-01 22:25:21