【问题标题】:Move DLLs to Azure Cloud Service deployment package将 DLL 移动到 Azure 云服务部署包
【发布时间】:2015-05-07 21:51:17
【问题描述】:

是否有可靠、简单的方法将文件复制到 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 部署中是否做过类似的事情?我承认我们可能以错误的方式处理这个问题,但我还没有找到适合我们需求的优雅方法。

【问题讨论】:

    标签: .net visual-studio azure msbuild azure-cloud-services


    【解决方案1】:

    在玩了一段时间之后,我想我找到了一个或多或少达到我想要的策略。您可以将内容文件添加到与云服务一起打包和部署的 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\")
    

    感觉有点像 hack-ish,但它似乎工作得很好。

    【讨论】:

    • 我不认为有任何明显的限制。在注册您的 MEF 容器之前的任何地方都应该这样做。 Global.asax 的 Application_OnStart() 可以工作。
    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2014-06-16
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多