[英]What is the recommended solution for user secrets storage in ASP.NET core in non-Azure production environment?
[英]Detecting if a .NET app is running in Azure or on a non-Azure environment
我們目前正在將我們的應用程序的一些實例移動到Azure,但仍將保持與非Azure托管的現有實例的向后兼容性。
是否有一種很好的方法來檢測環境而無需在非Azure生產服務器上安裝SDK?
我嘗試過使用:
if (RoleEnvironment.IsAvailable)
來自Microsoft.WindowsAzure.ServiceRuntime,它在本地和Azure中都可以很好地工作。 但是,我需要將Microsoft.WindowsAzure.ServiceRuntime.dll設置為CopyLocal,即使這樣我也得到:
無法加載文件或程序集'msshrtmi,Version = 2.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依賴項之一
似乎沒有NuGet包,我不想手動復制msshrtmi dll。
也許有一種方法可以在不依賴Microsoft.WindowsAzure.ServiceRuntime的情況下進行檢測?
不幸的是,解決此問題的最簡單方法是從以下位置復制msshrtmi.dll文件:
C:\\Program Files\\Microsoft SDKs\\Windows Azure\\.NET SDK\\{version}\\bin\\runtimes\\base\\x64
我知道復制DLL並不是很好,但這是你需要防止錯誤的唯一一個,它與你正在使用的SDK版本相關聯,因此在你更新SDK之前不會改變。
一個可行的替代方案是在appSettings
添加配置值,並在為Azure構建應用程序時應用配置轉換 。
您可以驗證RoleRoot環境變量是否存在。 如果是,則您的應用程序在Web或輔助角色中運行。
您可以使用if(RoleEnvironment.IsEmulated)
進行檢查
您可以嘗試在msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
程序集上msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Assembly.Load,如果失敗則不要嘗試調用RoleEnvironment.IsAvailable方法(因為你知道你肯定是不在Azure上運行)。
或者,您可以嘗試使用machinename,因為所有Azure實例都以“RD”開頭
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.