2015-08-19 22 views
1

我有一個由針對DNX框架的項目組成的Visual Studio 2015解決方案。我一直在本地工作,但我打算部署到Azure環境(dev/test/prod)。當然,解決方案使用不同的數據庫連接字符串和其他依賴於環境的變量。在過去,我使用雲配置文件來設置這些變量,並使用CloudConfigurationManager來讀取它們。如何使用config.json爲Visual Studio 2015/DNX項目設置環境特定的變量?

我被告知需要使用config.json文件。我在我的Startup.cs文件下面的代碼:

public Startup(IHostingEnvironment env, IApplicationEnvironment app) 
{ 
    Configuration = new ConfigurationBuilder(app.ApplicationBasePath) 
     .AddJsonFile("config.json") 
     .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true) 
     .AddEnvironmentVariables() 
     .Build(); 

    Configuration.Set("ASPNET_ENV", "Development"); 
} 

我config.json文件是當前一個空對象{ }。如何將變量添加到此文件(語法?),以及如何從代碼訪問它們?

+0

您是否閱讀過http://docs.asp.net/en/latest/fundamentals/environments.html?你已經有了加載特定於環境的JSON文件的代碼 - 你有*這樣的文件嗎? –

回答

1

在您的啓動代碼中注意以下行:

.AddJsonFile($"config.{env.EnvironmentName}.json", optional: true) 

這增加了一個額外的JSON配置文件,根據您的環境名稱命名。因此,添加新的文件到您的項目稱爲:

config.<environment-name>.json 

而且在設立細節出現,如:

{ 
    "AppSettings": { 
    "SomeVariable": "Blah" 
    }, 
    "Data": { 
    "YourConnectionString": { 
     "ConnectionString": "<connection string here>" 
    } 
    } 
} 

對於讀取配置,有一個很好的答案在這裏:Using IConfiguration globally in mvc6

+0

謝謝DavidG。我跟着你鏈接的答案中的例子,但它似乎過於繁瑣 - 是否真的有必要有一個「選項」類,並將每個配置鍵添加到我的啓動類中的ConfigureServices方法?我不能直接從文件中讀取,或者這是不好的做法? – Ivan

+0

答案中有更多的代碼我鏈接,但總的來說,這是一個很好的做事方式。一旦你把頭轉向DI,它實際上很簡單。 – DavidG

+0

至於不好的做法,從文件直接讀取並不是一件壞事,但是如果將來您決定將配置移動到數據庫,會發生什麼情況?使用這種方法,它只是對一個文件進行簡單的更改,但如果您直接從文件中讀取整個代碼,那麼您將進行更多的更改以進行製作和測試。 – DavidG

0

您可以使用普通的舊JSON。例如,下面是如何定義的連接字符串:

{ 
    "Foo": "Bar" 
} 

要訪問配置值,你這樣做:

config.Get("username") 

或:

config["username"]; 

你可以在這裏找到更多的信息: http://docs.asp.net/en/latest/fundamentals/configuration.html

+1

三重反引號在Stack Exchange markdown中不起作用 - 只是縮進代碼塊(或JSON,或其他)來格式化它。 –

+1

謝謝Erik,但我不明白你是如何得到'config'變量的?另外,我把它的「用戶名」應該是「Foo」爲了得到字符串「酒吧」? – Ivan

相關問題