Mono XBuild 发布 MVC 站点

问题描述 投票:0回答:3

我已经让 Monoserve 和 Nginx 在 Ubuntu 中完美运行,但是我仍然需要使用 MSBuild 在 Windows 机器上本地发布网站,然后复制文件。

我希望有一个 Linux CI 服务器来执行此操作,而不是使用 XBuild,但是我只能让它将项目构建到 .dll 中,如何使用 js、css、视图等发布和部署它?

c# mono xbuild
3个回答
8
投票

通常“构建 dll”部分是最难的部分。如果你解决了这个问题,那么你就成功了 80%。另一半是发布内容。在最基本的方面,您将文件的一部分从源目录复制到网站文件夹。 MSDeploy 是微软对此的回答,它太复杂了。我构建了一个 NAnt 任务来执行此操作,但这也不适用于您的特定场景。然而,一般方法可以:

  1. 抓取 sln 文件以查找 Web 项目。网络项目由什么组成?从技术上讲,csproj 文件中的 guid 或 sln 文件中的项目类型 id。我作弊并将其定义为“目标文件夹包含 web.config 文件”。如果您的解决方案中只有一个网站项目,您可以跳过此步骤,只需硬编码 .csproj 文件即可。

  2. 抓取 csproj 文件以查找

    <Content Include="some\file.ext" />
    节点。 XPath 可以做到这一点,Linq to XML 也可以做到这一点。这将为您提供所有 .aspx、.cshtml、.js、.css、.png、.config 等,同时小心地留下所有 .cs 文件。您需要在 .csproj 文件的路径前加上前缀才能获取真正的原始文件位置,并且您希望确保保留目标位置中的文件夹结构。但这与收集文件列表相比是微不足道的。

  3. 现在您已经获得了文件列表,循环遍历它,从源文件夹复制到目标文件夹。 (您可能想要先清空目标文件夹,或者之后从以前的部署中删除额外的文件。我发现前者更容易。)csproj 文件爬网唯一没有给您的是 bin 文件夹内容,但这就是蛋糕: bin 文件夹的所有内容。 :D (关于是否复制 .pdb 文件有一个健康的争论,但我说是。)

形成一个脚本来执行上述 3 个步骤,然后从 XBuild 任务调用它,或者从 CI 进程调用 XBuild 和此脚本。噗。您已经有了一个部署目标。快乐编码!


0
投票

我希望有一个 Linux CI 服务器来执行此操作,而不是使用 XBuild 好消息是,您可以使用我在this文章中找到的解决方法来做到这一点。以下是上述文章的摘录和解决方法链接:

构建服务器未安装 Microsoft MVC(任何版本)。 不过,这很容易解决——Microsoft MVC 可用 如果您需要,请访问 NuGet http://nuget.org/packages/Microsoft.AspNet.Mvc 要安装旧版本,请单击底部的旧版本 页面的,您将看到有关如何安装该页面的说明 框架的版本。

希望这能让您轻松!


0
投票

@DHarun 的想法很棒! 我只是根据@Dharun的想法写了一个小脚本,希望它可以帮助其他人。 https://github.com/bitshipper/MonoWebPublisher

© www.soinside.com 2019 - 2024. All rights reserved.