NAnt MVC опубликовать сайт - PullRequest
       10

NAnt MVC опубликовать сайт

6 голосов
/ 22 апреля 2011

Проблема : Я хочу элегантно опубликовать веб-сайт MVC с помощью NAnt.

Просто нет?Неправильно ... Вот некоторые из ресурсов стекового потока, на которые я смотрел.У каждого из них есть проблема ...

Stackoverflow 1: Публикация веб-приложения с использованием NAnt

Результатом этого было то, что сеть.config не преобразовывался, и в корзине появлялись дополнительные файлы, которые, как предполагалось, не нравились entity.dll.config всех вещей!

Stackoverflow 2: Реплицируйте VS2008 «Опубликовать веб-сайт» из командной строки

Это будет делать то же самое, что и предыдущее решение, за исключением того, что оно еще хуже ... оно скопирует ВСЕ из моего проекта и сбросит его в папку публикации... без шуток!

Stackoverflow 3: MSBuild Script и публикация VS2010 применяются Web.config Transform

Принятое решение основывается наStackoverflow 1, но это чистый MsBuild xml, а не NAnt xml.Он также исправляет только Webconfig и оставляет те случайные файлы, которые отображаются.Есть также другое решение (не принятое), которое дает pattersonc, которое очень, очень близко к правильному, но строки подключения в web.config находятся в поддельном состоянии, оставляя вас с еще одним плохим web.config

Нет нужды говорить, что прошло 3-4 дня, 10+ разных ответов на StackOverFlow и никакой серебряной пули ... Нет ли простого решения?Должен ли я совершить какой-то кардинальный грех и создать какой-то ужасно испорченный скрипт NAnt, чтобы добиться правильных результатов публикации, которые VS2010 обеспечивает так хорошо?

Ответы [ 2 ]

6 голосов
/ 09 мая 2011

Хорошо, я понял это после того, как перебрал этот блог, http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

На шаге 4 он показывает аргумент командной строки, которого я раньше не видел, / Т: TransformWebConfig

К сожалению, одно это не решает проблему. Он выполняет преобразование, но преобразование находится в obj / Release / TransformWebConfig / transformed / Web.config (obj / Release или obj / Debug или obj / YourTranformName).

Итак, чтобы наконец найти достойное решение, это то, что мне пришлось сделать.

<exec program="${exec.msbuild}" failonerror="true">
    <arg value="${path.sourceCode}/ProjectFolder/Project.csproj" />
    <arg value="/p:Configuration=Release" />
    <arg value="/t:ResolveReferences" />
    <arg value="/t:_CopyWebApplication" />
    <arg value="/t:TransformWebConfig" />
    <arg value="/p:OutDir=${path.buildFromProject}/temp/" />
    <arg value="/p:WebProjectOutputDir=${path.buildFromProject}/ProjectBuild/" />
</exec>

<delete dir="${path.build}/temp" failonerror="true"/>
<delete file="${path.build}/ProjectBuild/Web.config" failonerror="true"/>
<delete file="${path.build}/ProjectBuild/Web.Debug.config" failonerror="true"/>
<delete file="${path.build}/ProjectBuild/Web.Release.config" failonerror="true"/>
<copy file="${path.sourceCode}/ProjectFolder/obj/Release/TransformWebConfig/transformed/Web.config" tofile="${path.build}/ProjectBuild/Web.config" />

Обратите внимание, что OutDir отличается от WebProjectOutputDir. Это причина, почему:

  • OutDir дает вам все в проект "решение".
  • WebProjectOutputDir дает вам Минимум для веб-проекта (т.е. не все решение).

Из других проектов в решении, использующих OutDir, пришло много лишнего багажа, который нам не нужен, поэтому мы просто отправили OutDir во временную папку и удалили, как вы можете видеть на шагах выше. Кстати, OutDir абсолютно необходим. Сборка не будет работать, если вы удалите ее. Кажется, что WebProjectOutputDir работает вне OutDir.

Во всей этой настройке есть только один незначительный недостаток. Многие файлы pdb отсутствуют в библиотеке bin. Единственный скопированный pdb был из веб-проекта.

Если кто-нибудь найдет одношаговое решение с MSBuild для этого, пожалуйста, опубликуйте его: P Хотя это хорошее решение, оно все еще идеально на 99,9999% и очень похоже на перечисленные выше, я уверен, что будет небольшой нюанс или пропущенный шаг.

3 голосов
/ 20 декабря 2012

После проверки вашего решения я наткнулся на другое решение https://stackoverflow.com/a/2953376/662853

Я изменил ваш ответ, чтобы вместо него использовать цель _WPPCopyWebApplication:

<exec program="${exec.msbuild}" failonerror="true">
    <arg value="${path.sourceCode}/ProjectFolder/Project.csproj" />
    <arg value="/p:Configuration=Release" />
    <arg value="/t:ResolveReferences" />
    <arg value="/t:_WPPCopyWebApplication" />
    <arg value="/t:TransformWebConfig" />
    <arg value="/p:OutDir=${path.buildFromProject}/temp/" />
    <arg value="/p:WebProjectOutputDir=${path.buildFromProject}/ProjectBuild/" />
</exec>

После тестирования мне больше не нужно было удалять конфиги и копировать преобразованные файлы.

...