Mono XBuild публикует сайт MVC

У меня есть Monoserve и Nginx, которые отлично работают в Ubuntu, однако мне все еще нужно опубликовать веб-сайт локально в окне Windows с помощью MSBuild, а затем скопировать файлы.

Предпочтительно, я хотел бы иметь сервер Linux CI, который делает это вместо использования XBuild, однако я могу заставить его только собрать проект в .dll, как мне опубликовать и развернуть его с помощью js, css, представлений и т. д.?


person Dharun    schedule 12.01.2013    source источник
comment
Вы вручную редактировали файл msbuild?   -  person flup    schedule 26.01.2013
comment
И пометили ли вы свои файлы содержимого с помощью действия сборки Content?   -  person flup    schedule 26.01.2013
comment
Я предполагаю, что следующая ссылка может помочь решить эту проблему - stackoverflow.com/questions/32781983/   -  person user3220129    schedule 29.09.2015


Ответы (3)


Как правило, самая сложная часть — «сборка dll». Если вы решили эту проблему, вы на 80%. Другая половина — публикация контента. В самом элементарном аспекте вы копируете часть файлов из исходного каталога в папку веб-сайта. MSDeploy — это ответ Microsoft на это, и он слишком сложен. Я создал задачу NAnt, которая делает это, хотя это также не относится к вашему конкретному сценарию. Однако общая методология может:

  1. Просканируйте sln-файл в поисках веб-проектов. Что делает веб-проект? Технически направляющие в файле csproj или идентификаторы типов проектов в файле sln. Я обманул и определил это как «целевая папка включает файл 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, либо вызовите и XBuild, и этот сценарий из процесса CI. Пуф. У вас есть цель развертывания. Удачного кодирования!

person robrich    schedule 20.01.2013
comment
Спасибо, я сделал сценарий оболочки, чтобы сделать это. Работает прекрасно, я всегда считал, что повторить процесс развертывания слишком сложно. - person Dharun; 27.01.2013

Я бы предпочел иметь сервер Linux CI, который делает это вместо использования XBuild. Хорошая новость заключается в том, что вы МОЖЕТЕ сделать это с помощью обходного пути, который я нашел в этой статьи. Вот выдержка и ссылка на обходной путь из статьи выше:

На сервере сборки не установлен Microsoft MVC (любой версии). Однако это очень легко обойти — Microsoft MVC доступен в NuGet по адресу http://nuget.org/packages/Microsoft.AspNet.Mvc, если вам нужно установить более старую версию, щелкните старую версию внизу страницы, и вы получите инструкции по установке этой версии фреймворка.

Надеюсь, это облегчит вам задачу!

person FrostyFire    schedule 27.01.2013
comment
Спасибо за ссылку, но я не думаю, что это справится с полным развертыванием веб-сайта, только с компиляцией dll. - person Dharun; 27.01.2013

Идея @DHarun отлично работает! Я только что написал небольшой скрипт, основанный на идее @Dharun, надеюсь, он поможет другим. https://github.com/z-ji/MonoWebPublisher

person zji    schedule 24.11.2014