45

Folks,VS2010 Web Публикация версия для командной строки из файловой системы развертывания

В двух словах, я хочу повторить этот диалог: alt text

Это Visual Studio 2010 проект ASP.Net MVC. Если я выполню эту команду, я получу все файлы, которые я хочу, включая преобразованные web.configs в каталоге «C: \ ToDeploy».

Я хочу реплицировать это в командной строке, чтобы я мог использовать его для сборки окружения QA.

Я видел различные статьи о том, как это сделать в командной строке для удаленных развертываний, но я просто хочу сделать это для развертывания файловой системы.

Я знаю, что могу реплицировать эту функцию с помощью nAnt-задач или графических скриптов, но я хочу сделать это с использованием этого механизма, чтобы я не повторялся.

Я исследовал это еще немного, и я нашел эти ссылки, но ни один из них не решить чисто:

Спасибо заранее!

ответ

46

Хорошо, наконец, понял это.

командной строки вам нужно:

msbuild path/to/your/webdirectory/YourWeb.csproj /p:Configuration=Debug;DeployOnBuild=True;PackageAsSingleFile=False 

Вы можете изменить, где выходы проектные, добавив свойство outdir=c:\wherever\ в/р: раздел.

Это создаст выход на:

path/to/your/webdirectory/obj/Debug/Package/PackageTmp/ 

Вы можете скопировать эти файлы из каталога выше, используя любой метод, который вы хотите.

У меня все работает как задача рубинового рейка, используя Albacore. Я пытаюсь сделать все это, поэтому я могу на самом деле выразить это как вклад в проект. Но если кто-то хочет, чтобы код до этого, дайте мне знать.

Еще одна морщина, которую я обнаружил, заключалась в том, что она помещала Tokenized Parameters в Web.config. Если вам не нужна эта функция, убедитесь, что вы добавить:

/p:AutoParameterizationWebConfigConnectionStrings=false 
+0

К сожалению, это копирует весь пакет. Я думаю, вам нужно будет использовать MS Web Deploy только для копирования измененных файлов. – jrummell

+5

Для полноты свойство OutDir должно заканчиваться конечной косой чертой (в противном случае ошибки MSBuild исключаются). Поэтому ваше предложение должно быть «outdir = c: \ wherever \». –

+0

Кроме того, вместо '/ p: DeployOnBuild = True' вы можете просто использовать цель пакета:'/t: Package'. Работает для меня, плюс параметры «PackageAsSingleFile» и «AutoParameterizationWebConfigConnectionStrings» также соблюдаются. –

11

Я думал, что опубликовать другое решение, которое я нашел, я обновил это решение включить в файл журнала.

Это похоже на Publish a Web Application from the Command Line, но только что очищенный и добавленный файл журнала. также проверьте исходный источник http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

Создайте MSBuild_publish_site.летучая мышь (назовите его что угодно) в корневом каталоге вашего проекта веб-приложения

set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319 
set destPath=C:\Publish\MyWebBasedApp\ 

:: clear existing publish folder 
RD /S /Q "%destPath%" 

call %msBuildDir%\msbuild.exe MyWebBasedApp.csproj "/p:Configuration=Debug;PublishDestination=%destPath%;AutoParameterizationWebConfigConnectionStrings=False" /t:PublishToFileSystem /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_Publish_LOG.log 

set msBuildDir= 
set destPath= 

Обновление веб-приложения файл проекта MyWebBasedApp.csproj, добавив следующий XML под <Import Project= тегом

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> 
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> 

    <ItemGroup> 
     <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> 
    </ItemGroup> 

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> 
</Target> 

это работает лучше для меня, чем другие решения.

проверьте следующее для получения дополнительной информации:

1) http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

2) Publish a Web Application from the Command Line

3) Build Visual Studio project through the command line

+2

Это работает очень хорошо – Dann

-1

Полный MSBuild файла с вдохновением от CubanX

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Publish"> 
     <RemoveDir Directories="..\build\Release\Web\" 
        ContinueOnError="true" />   
     <MSBuild Projects="TheWebSite.csproj" 
       Targets="ResolveReferences;_CopyWebApplication" 
       Properties="Configuration=Release;WebProjectOutputDir=..\build\Release\Web;OutDir=..\build\Release\Web\bin\" 
     /> 
    </Target> 
    <Target 
     Name="Build" 
     DependsOnTargets="Publish;"> 
    </Target> 
</Project> 

Это помещает опубликованный веб-сайт в Интернете .. \ папка Release сборки \

0

У меня есть решение Visual Studio 2012: https://stackoverflow.com/a/15387814/2164198

Однако, она работает без каких-либо Visual Studio установлена ​​на всех! (см. ОБНОВЛЕНИЕ). Я еще не проверял, можно ли получить все необходимые вещи из Visual Studio Express 2012 для веб-установки.

1

Мое решение для CCNET с преобразованием Web.config:

<tasks> 
    <msbuild> 
     <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> 
     <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory> 
     <projectFile>GertakariakMSWeb2.vbproj</projectFile> 
     <targets>Build</targets> 
     <timeout>600</timeout> 
     <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger> 
     <buildArgs> 
      /noconsolelogger /p:Configuration=Release /v:diag 
      /p:DeployOnBuild=true 
      /p:AutoParameterizationWebConfigConnectionStrings=false 
      /p:DeployTarget=Package 
      /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web 
     </buildArgs> 
     </msbuild> 
</tasks> 
1

На VS2012 и выше, вы можете обратиться к существующим publish profiles on your project с MSBuild 12.0, это было бы эквивалентно правой кнопкой мыши и публиковать ... выбирая профиль публикации («MyProfile» в этом примере):

msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile" 

 Смежные вопросы

  • Нет связанных вопросов^_^