簡體   English   中英

將DLL移動到Azure Cloud Service部署包

[英]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角色,如下所示:

  1. 在Visual Studio中,右鍵單擊CloudService項目中的WebRole,然后選擇“添加現有項”
  2. 瀏覽並選擇要添加的.dll。
  3. 您甚至可以創建文件夾等來組織這些文件。

這些文件將添加到.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM