【问题标题】:Deploy Orchard.Source to Azure via GIT通过 GIT 将 Orchard.Source 部署到 Azure
【发布时间】:2025-11-21 17:55:01
【问题描述】:

更新根据目前给出的答案,这个问题已经演变和扩展。

我想要两件事:(1) Visual Studio 作为我的 Orchard 开发环境和 (2) GIT 作为我推送到 Azure 的手段。为此,我下载了 Orchard.Source 发行版而不是 Orchard.Web 发行版。

因此,我使用 GIT 将 Orchard.Source.1.5.1 发行版从本地计算机上的存储库发布到 Azure 网站(预览技术)。部署成功,但在 Azure 上的后续构建失败,因为它无法确定应该构建哪个解决方案:

remote:无法确定要构建的解决方案文件。 C:\DWASFiles\Sites\MySite\VirtualDirectory0\site\repository\src\Orchard.sln, C:\DWASFiles\Sites\MySite\VirtualDirectory0\site\repository\src\Orchard.Azure\Orchard.Azure.sln, C:\DWASFiles\Sites\MySite\VirtualDirectory0\site\repository\src\Orchard.Azure\Orchard.Azure.Web\Modules\Orchard.ContentTypes\Orchard.ContentTypes.sln, C:\DWASFiles\Sites\MySite\VirtualDirectory0\site\repository\src\Orchard.Azure.Tests\Orchard.Azure.Tests.sln, C:\DWASFiles\Sites\MySite\VirtualDirectory0\site\repository\src\Orchard.Web\Modules\Orchard.ContentTypes\Orchard.ContentTypes.sln。 远程:错误 - 更改已提交到远程存储库,但您的网站未更新。

该转储中列出的第一个解决方案 Azure 是它应该使用的解决方案。我该如何告诉 Azure?

在 David Ebbo 的帮助下,我现在明白我问错了问题:

  1. 问题已通过“.deployment”配置文件和
  2. 解决
  3. 指向“正确”的 Visual Stuio 解决方案是不正确的!要通过 GIT 部署到 Azure,我必须指向一个项目文件(在本例中为 Orchard.Web.csproj):

    [配置]
    项目 = src/Orchard.Web/Orchard.Web.csproj

这让我走得更远,但我的下一个问题是我故意从我的 GIT 存储库中省略了 Orchard.Source 的“lib”文件夹。我错误地认为,如果我为 Orchard.sln 启用“nuget restore”,Azure 中项目文件的构建将获取所需的依赖项。

在 Sebastien 的帮助下,我现在了解到启用 nuget 可能是一场艰苦的战斗,因为一些 Orchard 3rd 方依赖项已经由 Orchard 团队进行了源代码级别的自定义。简而言之,如果我想使用 Orchard.Source 发行版快速启动并运行 - 那么我只需将“lib”文件夹提交到我的 GIT 存储库(该死!)。

当我通过 GIT 对 Azure 进行下一次推送时,我的编译仍然失败 - 但至少错误数量大大减少了。我认为它现在唯一不高兴的是:

For OrchardFramework.csproj:
   Could not find assemblies: Castle.Core, Casstle.DynamicProxy2
   Missing type or namespace: Castle, AbstractLoggerFactory, DefaultProxyBuilder

如果我能克服这个问题,我可能最终拥有两全其美的优势:Visual Studio 开发环境(由于 Orchard.Source 发行版)和支持 GIT 的 Azure 推送。有谁知道最后一个问题可能是什么?

附言Orchard.Source 发行版中有一个“ClickToBuildAzurePackage.cmd”文件,该文件是在创建“GIT 推送到 Azure”之前创建的。这个小批处理文件试图复制 GIT 推送到 Azure 现在提供的大部分工作。我可能会更多地探索这个选项,但当然理想的情况是依赖新的 Azure 内置功能。

更新 2:事实证明这仅仅是因为 lib/*/Castle Windsor 2.0/bin/*.gitignore 忽略了。在强制输入这些文件之后,整个事情现在构建和部署!现在唯一的问题是该网站在我访问它时没有给出响应。如有必要,我将把它变成一个单独的问题。照原样,我认为这个特定问题已得到解答。

【问题讨论】:

    标签: git azure nuget orchardcms azure-web-app-service


    【解决方案1】:

    您可以使用存储库根目录中的 .deployment 文件指定要部署的项目。请参阅https://github.com/projectkudu/kudu/wiki/Customizing-deployments 了解更多信息。

    另外,请参阅 https://github.com/AzureWebSites/OrchardCMS,了解可在 Azure 网站上运行的 Orchard 存储库示例(但它有点过时)。

    【讨论】:

    • 我刚刚看了你的视频 (youtube.com/watch?v=72SAHWUHnzA),这意味着我可以放心地忽略 Orchard lib 文件夹,因为 Azure 应该能够通过 nuget 自己提取所有这些依赖项。是的?当它通过 nuget 拉取这些时,它是否计入我的网络带宽消耗?
    • 好的,带有src/Orchard.sln 的.deployment 文件失败,因为它认为Orchard.sln 是路径而不是文件。但是通过仅指定src 解决了问题。我的下一个问题是 Azure 无法启动该站点。 Orchard-source 发行版的文件结构在 Azure 上不起作用。我不明白为什么不;如果 Azure 可以构建 Orchard.sln 文件,它肯定可以创建虚拟文件夹或将文件移动到位,是吗?如果不是,这是否意味着我必须使用 Orchard-Azure 发行版?我认为这仅适用于希望使用 Azure Gallery 的非编码人员?
    • 你试过我上面提到的回购吗?我应该照常工作。我不是 Orchard 专家,所以如果遇到困难,您可能需要 @sebastien-ros 的帮助。
    • 那个特定的回购“给我一条鱼”而不是“教我如何钓鱼”。所以,是的,希望 sebastien 不仅会透露 repo,还会透露 Azure 可以使用该 repo 的原因。在这里查看我的问题:social.msdn.microsoft.com/Forums/en-US/…
    • 布伦特 - 你有想过这个吗?我也在尝试在 WAWS 中转换我的生产 Orchard 实例 > Git 部署。我有一个源登记,我从本地分支以添加我的调整。目前,我运行本地构建脚本来构建所有内容,但理想情况下我希望推送我的更新 > 一个 WAWS 实例。
    【解决方案2】:

    Orchard 没有使用 Nuget 作为其依赖项,这意味着这些库已签入源代码控制系统,如果按源代码部署,则需要它们。

    David Hayden 有一个关于使用 Git Publishing 在 Windows Azure 网站上安装 Orchard 的非常好的教程:http://www.davidhayden.me/blog/git-publishing-orchard-cms-to-windows-azure

    【讨论】:

    • David 的说明适用于“如果您从 CodePlex 下载 Orchard.Web”,但我想要来自 codeplex 的 Orchard.Source,因为我打算从 Visual Studio 进行开发。在这种情况下,他的指示不适用。但事实上,您已经给了我最好的见解:Orchard.sln 不使用 nuget(doh!)。这样我就可以避免将这些依赖项放入 GIT,也许我应该将 Orchard.sln 和项目转换为使用 nuget。是的?以这种方式转换 Orchard 解决方案是否会遇到任何重大障碍?
    • 您不能对每个库都使用 Nuget,因为我们可能会将自定义补丁应用于开源库。但你应该能够为他们中的大多数人这样做。
    • 我不喜欢它,但为了暂时避免 nuget 问题,我只是选择将 Orchard.Source 发行版的“lib”文件夹添加到我的 GIT 存储库中。然后我发布了,发现在 Azure 上编译仍然无法正常工作,但产生的错误要少得多。我认为这仅仅是因为 OrchardFramework.csproj 找不到依赖程序集 Castle.Core 和 DynamicProxy2。如果这些通常由 Orchard.sln 构建/提供,那么我可以理解发生了什么。否则,你凭什么认为那一处有问题?
    • 我已更新我的问题以反映必要的最终修复。现在可以了。好吧,至少它成功构建和部署。当我访问该站点时,浏览器会无休止地等待响应。如有必要,我将把它变成一个新问题。
    【解决方案3】:

    以下是我们的高级步骤和常见问题。

    高级步骤

    1. 将 Orchard 源克隆到 SomeDirectory
    2. 将 .deployment 文件添加到 SomeDirectory(例如,来自 PowerShell,ni –t f .deployment

    检查点:SomeDirectory 现在将包含:

    .git
    .deployment 
    lib 
    src 
    .gitignore 
    build.cmd 
    ClickToBuild.cmd 
    ClickToBuildAzurePackage.cmd 
    CREDITS.txt 
    DeleteModuleBinaries.cmd 
    LICENSE.txt 
    Orchard.proj
    
    1. 接下来,在 SomeDirectory 打开开发人员命令提示符。
    2. 运行build precompiled

    检查点:SomeDirectory 现在将包含另外两个子目录:

    build 
    buildtasks
    
    1. 接下来,打开您的 .deployment 文件...

    ...并添加以下内容:

    [config] 
    project = build/precompiled
    
    1. 添加、提交和推送您的文件到 GitHub(或任何地方)。
    2. 创建一个新的 Windows Azure 网站。
    3. 从版本控制> GitHub > 等中选择部署。
    4. 等待部署完成。
    5. 测试...

    通过 FTP 查看您的 Azure 网站将显示以下内容:

    通过浏览器查看您的网站将显示:

    常见问题

    1. 如果您有一个忽略 build/ 目录的 .gitignore 文件,您必须要求 git 强制添加预编译文件夹中的所有内容(App_Data 和 Media 除外,因为它们将包含我们从 Orchard UI 添加的实时内容)。

    例子:

    git add –-f  bin/*
    git add –-f Config/*
    git add –-f Core/*
    git add –-f Modules/*
    git add –-f Themes/*
    git add –-f CREDITS.txt
    git add –-f Global.asax
    git add –-f LICENSE.txt
    git add –-f Refresh.html
    git add –-f Web.config
    (Yes. Git is case sensitive).
    
    1. 如果您在添加、删除、排除或包含新文件后忘记保存 .csproj 文件,则 Git Deploy 将抱怨找不到某些文件。

    【讨论】: