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