[英]How to enable remote debugging in Azure Cloud Service package built by MSBuild
[英]Move DLLs to Azure Cloud Service deployment package
有沒有可靠的方法將文件復制到Azure雲服務部署包而不在Web項目中包含或引用它?
我們有一個站點,我們將作為Azure雲服務項目和本地的Web角色托管,每個站點都需要不同的數據訪問層庫。 我們可以將所有必要的文件轉儲到項目中並將它們復制到構建中,然后根據環境變量動態選擇要加載的程序集,但這看起來有點草率 - 可能有合理的原因我們不希望這些庫坐在遙遠的Azure區域的服務器上。 這些程序集不是由項目直接引用,而是在運行時使用MEF或某種類似機制加載。
這是我們嘗試過的構建后腳本:
if "$(TargetProfile)" == "" (
echo "OnPrem"
xcopy /Y "$(ProjectDir)\lib\OnPrem\TestLibrary.dll" "$(ProjectDir)\$(OutputPath)\$(Configuration)"
) else (
echo "Cloud"
copy /Y "$(ProjectDir)\lib\Cloud\TestLibrary.dll" "$(ProjectDir)\$(OutputPath)\$(Configuration)"
)
這可以在文件在構建時以及構建網站項目的msbuild /t:publish
步驟的部分期間按預期復制。 但是,TestLibrary.dll文件未包含在雲服務包中,未部署,並且無法在運行時加載。
Azure部署之前是否已完成此類操作? 我會承認,我們可能會以錯誤的方式接近這一點,但我還沒有找到符合我們需求的優雅方法。
在玩了一段時間之后,我想我已經找到了一個或多或少達到我想要的策略。 您可以將內容文件添加到與雲服務一起打包和部署的CloudService角色,如下所示:
這些文件將添加到.cspkg中的approot中,同樣在部署時最終會在approot文件夾中。 要解析此目錄,我執行了以下操作:
string appRoot = Environment.GetEnvironmentVariable("RoleRoot");
appRoot = Path.Combine(appRoot + @"\", @"approot\");
您仍然需要一種方法來復制本地部署的本地.dll,但我們已經有了在現有部署過程中執行此操作的方法。 使用CloudConfigurationManager
配置設置,您可以告訴應用程序如何解析這些.dll應該駐留的目錄,例如:
var libDir = CloudConfigurationManager.GetSetting("Environment").Equals("Cloud")
?
Environment.GetEnvironmentVariable("RoleRoot")
.Path.Combine(appRoot + @"\", @"approot\")
:
HostingEnvironment.MapPath("~\pathToOnPremDlls\")
它感覺模糊不清,但似乎運作得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.