使用ConfigurationManager访问v3.5 Azure WebJob

时间:2016-03-24 10:11:53

标签: c# azure .net-3.5 azure-webjobs configurationmanager

问题:ConfigurationManager无法访问v3.5 Azure WebJob中的App.config

问题:如何使其发挥作用?

*背景*

我继承了一个非常古老的Web应用程序,该应用程序必须在.Net 3.5应用程序池下作为Windows Azure Web App运行。

有一个相应的服务必须转换为Azure WebJob(运行几个小时,需要访问网站文件)。

我的问题是WebJob必须是.Net v3.5应用程序才能在相应的Web App中运行(它们都共享相同的App Pool,因此无法将v4.5 Web作业部署到v3.5网络应用程序)。

这意味着我无法使用正常的WebJob NuGet包,例如Windows Azure Configuration Manager,我理解允许System.Configuration.ConfigurationManager类以正常方式访问App.config,允许包含基于EDMX的EntityFramework ObjectContexts的引用库加载他们的连接字符串和应用程序设置可以通过各种代码访问。代码在Web应用程序和Web作业之间共享,因此我需要一种在两者之间保持一致的配置方法。

将WebJob作为v4.5运行允许它使用ConfigurationManager正常工作,但是一旦我切换到v3.5(我必须做以使Web应用程序工作)我必须删除所有不兼容的WebJob Nuget包括Windows Azure配置管理器。 ConfigurationManager将不再适用于加载AppSettings,没有错误,它只是为AppSettings返回任何内容。

我的问题是 - 如何在不使用这些不兼容的NuGet包的情况下使ConfigurationManager能够加载已部署的App.config。我查看了Microsoft.WindowsAzure.Configuration.dll中的代码,但我无法看到它如何使ConfigurationManager真正起作用,我必须在错误的位置查找。

1 个答案:

答案 0 :(得分:1)

运行一些v4.6 vs v3.5应用程序池测试(完全相同的代码库 - 除了Azure WebJobs Publish之外没有安装任何NuGet包)我发现在v3.5应用程序池中运行的Web作业只是“不要”。加载他们的配置文件。

另一方面,RSACryptoServiceProvider.ImportParameters也在v3.5下爆炸。

以下方法可以强制配置文件加载。

class Program
{
    static void Main()
    {
        AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"D:\home\site\wwwroot\App_Data\jobs\triggered\DataImportWebJob\[TheAppName].exe.config");

感谢Using ConfigurationManager to load config from an arbitrary location