我已经让 Monoserve 和 Nginx 在 Ubuntu 中完美运行,但是我仍然必须使用 MSBuild 在 Windows 机器上本地发布网站,然后将文件复制过来。
最好我希望有一个 Linux CI 服务器来执行此操作,而不是使用 XBuild 但是我只能让它将项目构建到 .dll 中,我如何使用 js、css、视图等发布和部署它?
通常,“构建 dll”部分是最难的部分。如果你已经解决了这个问题,那么你就完成了 80%。另一半是发布内容。在最基本的方面,您将部分文件从源目录复制到网站文件夹。MSDeploy 是微软的解决方案,它太复杂了。我构建了一个执行此操作的 NAnt 任务,尽管这也不适用于您的特定场景。但是,一般方法可以:
爬取 sln 文件以查找 Web 项目。是什么造就了一个 Web 项目?csproj 文件中的技术指南或 sln 文件中的项目类型 ID。我作弊并将其定义为“目标文件夹包含一个 web.config 文件”。如果您的解决方案中只有一个网站项目,则可以跳过此步骤,只需对 .csproj 文件进行硬编码。
爬取 csproj 文件以查找<Content Include="some\file.ext" />
节点。XPath 可以做到这一点,Linq to XML 也可以做到。这将为您提供所有 .aspx、.cshtml、.js、.css、.png、.config 等,同时小心地留下所有 .cs 文件。您需要为 .csproj 文件的路径添加前缀以获取真正的原始文件位置,并且您希望确保将文件夹结构保留在目标位置。但这与收获文件列表相比是微不足道的。
现在您已经获得了文件列表,循环遍历它,从源文件夹复制到目标文件夹。(您可能想先清空目标文件夹,或者然后从以前的部署中删除多余的文件。我发现前者更容易。) csproj 文件抓取没有给您的是 bin 文件夹内容,但这就是小菜一碟:复制bin 文件夹的所有内容。:D (关于是否复制 .pdb 文件存在一个健康的争论,但我说是的。)
形成一个脚本来执行上述 3 个步骤,然后从 XBuild 任务中调用它,或者从 CI 过程中同时调用 XBuild 和此脚本。噗。你有一个部署目标。快乐编码!
Preferably I'd like to have a Linux CI server that does this instead using XBuild The good news is that you CAN do this with a workaround I found in this article. Here is an excerpt and the workaround link from the above article:
The build server does not have Microsoft MVC (any version) installed. However, this is very easy to work around-Microsoft MVC is available on NuGet at http://nuget.org/packages/Microsoft.AspNet.Mvc if you need to install an older version, click on the older version at the bottom of the page and you’ll reach instructions on how to install that version of the framework.
Hope this make it easy for you!
@DHarun 的想法很棒!我只是根据@Dharun 的想法写了一个小脚本,希望它可以帮助别人。 https://github.com/z-ji/MonoWebPublisher