【问题标题】:Deployment of multi-project MVC4 solution to Azure fails将多项目 MVC4 解决方案部署到 Azure 失败
【发布时间】:2013-02-09 20:41:08
【问题描述】:

这是我第二次部署到 Azure。 首先是一个带有数据库的简单 MVC4 网站,我通过 git 部署了它。像魅力一样工作。

现在我有以下内容: 一个包含三个项目的解决方案。

  • Web -> MVC4 前端
  • 模型 -> 包含模型和数据库上下文
  • 后端 -> 用于数据管理的 MVC4 项目

所有项目都是 MVC4(不知道如何更好地管理 Models 项目)。 在我的模型项目中,我正在运行代码适配迁移。 后端运行在虚拟目录:localhost:80/Backend (在本地主机上完美运行) Web 和 Backend 项目都引用了 Models 项目。

文件夹结构: 解决方案文件夹包含: Web/模型/后端/MySolution.sln

第一次部署时,我在 Projects 文件夹中创建了一个 git repo(因为它是一个项目)。现在我的仓库在解决方案文件夹中。

我还在后端上传文件,并通过以下路径将其移动到另一个项目(Web):

Directory.GetParent(HttpContext.Current.Server.MapPath("~")).ToString() + DirSeperator + "Web" + DirSeperator + "Store" + DirSeperator;

这会在 Azure 上出现问题吗?

所以我现在的问题是,我该如何部署这个解决方案?


我在 Azure 中创建了一个带有源代码控制的网站,并向其中添加了一个 SQL 数据库。

我已设法将解决方案推送到 Azure, 但在 Azure 上有消息

找到解决方案...没有可部署的项目。而是部署文件。

现在。


你有什么关于这个问题的好教程吗?

我做错了吗? (我想是的)

我对 ASP.NET 和 Azure 比较陌生,所以对我来说有点难以理解。

谢谢, 托比

【问题讨论】:

  • 请提供更多信息:您如何重定向程序集?您是否为您的项目创建了可部署的依赖文件夹?
  • 我什至不知道什么是可部署的依赖文件夹 :( 对于 Web 和后端项目,我在上下文菜单中选择了“添加引用”并检查了我的模型项目。这就是我所做的一切现在。
  • 好的,如果您在解决方案资源管理器中右键单击 MVC 项目文件,您可以选择“添加可部署依赖项”。这些 dll 不包含在 IIS .net V 4 或 4.5 中,并且通常必须复制以进行部署。但不要完全专注于这一点。部署到 Azure 涉及许多检查点:例如重定向程序集、可能添加依赖项等。通读我包含的指南。从那里,希望您能集中解决具体问题
  • 谢谢。添加可部署依赖项不再适用于 VS2012(因此我找不到按钮),请参见此处:link 我已经阅读了前 3 个指南,但似乎只有第 4 个有帮助。我会试一试。我不明白,我应该如何处理“重定向程序集版本”?
  • 我没有意识到你在 VS 2012 上(我们在 2010 年尝试使用 MVC 4 RC 但放弃了它)。这缩小了潜在的问题清单。我有点想你的一切,希望能解决这个问题。

标签: asp.net asp.net-mvc git deployment azure


【解决方案1】:

后续编辑:我现在明白了,这与配置 2 个项目部署有关。您将需要创建部署脚本

我还没有做完研究,但是看看这些帖子:

http://blog.amitapple.com/post/38419111245/azurewebsitecustomdeploymentpart3

http://kellyhpdx.wordpress.com/2012/04/11/deploying-multiple-web-applications-to-a-single-azure-instance-and-applying-web-config-transforms-correctly/

【讨论】:

  • @artistandsocial,我将我的帖子更新为更有用的线程,专门处理将多个项目从 git 部署到 Azure。同时,我将检查我们自己的一个包含多个项目的存储库,看看我们如何为多个部署进行配置。
  • 嗨。谢谢你的支持。我现在正在使用新的解决方案(更易于部署)。我已经了解了一些关于 Azure 上的网站和 Web 角色之间的区别,但似乎我不能用网站做我想做的事。因此,我创建了一个 Web 角色,并将在接下来的几天尝试在其上部署多个网站(如 Kelly 在您的第二个链接中所示)。我现在已经在其中的一个项目中进行了尝试,它按预期工作(尽管部署非常慢 - 大约需要 10 分钟)。我希望这是现在正确的方法。谢谢。
【解决方案2】:

我已经设法解决了我的问题。 抱歉,我正在回答我自己的问题 - 希望这不会冒犯任何人。

Azure 网站无法实现我想要实现的目标,而 Web 角色则无法实现。 正如在CloudCoverStructureTooBig 上看到的那样。

所以我在 Visual Studio 中创建了一个新的 Azure 云应用程序(由 Azure 工具提供),它具有默认的 Web 角色,这是我的 Web 前端项目。 我已将一个名为“后端”的 VirtualApplication 添加到 Web 角色,并将物理目录设置为我的后端项目路径。 然后我添加了一个 VirtualDirectory“存储”,我可以从两个项目中访问它以进行文件上传。

我的 WebRole 现在看起来像这样:

<WebRole name="MvcWebRole1" vmsize="ExtraSmall">
<Sites>
  <Site name="Web" physicalDirectory="[projectpath]">
    <VirtualApplication name="backend" physicalDirectory="[projectpath]">
    </VirtualApplication>
    <VirtualDirectory name="store" physicalDirectory="[projectpath]">
    </VirtualDirectory>
    <Bindings>
      <Binding name="Endpoint1" endpointName="Endpoint1" />
    </Bindings>
  </Site>
</Sites>
<Endpoints>
  <InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Imports>
  <Import moduleName="Diagnostics" />
  <Import moduleName="RemoteAccess" />
  <Import moduleName="RemoteForwarder" />
</Imports>

我现在通过以下方式访问(读+写)商店:

HttpContext.Current.Request.MapPath("/Store" + DirSeperator);

而不是

Directory.GetParent(HttpContext.Current.Server.MapPath("~")).ToString() + DirSeperator + "Web" + DirSeperator + "Store" + DirSeperator;

这对两个项目都非常有效。

所以,这个解决方案有效,我已经将它部署到生产中!

新出现的问题:

  • 网站使用 git 集成,但云服务不能(这对我的工作流程非常不利)。
  • 部署大约需要 30-45 分钟。圣洁...
  • 我必须再次发布所有内容才能激活远程访问和 WebDeploy 功能。我希望 WebDeploy 能够节省部署更新的时间……因为我现在每次更新时,都会在服务器上替换完整的解决方案(在上述时间范围内)。
  • 有没有办法通过 FTP 访问数据?

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多