С Помощью MSBuild.exe для "публикации" a ASP.NET проект MVC 4 с линией cmd


Я ищу команду для запуска против MSBuild.exe это просто берет проект MVC 4 и публикует его в заданном каталоге.

например,

MSBuild <solution>/<project>.csproj -publish -output=c:/folder

Это, очевидно, неправильный синтаксис. Я пытаюсь упростить свой вопрос.

этот вопрос говорит о построении XML, но я не пытаюсь ничего делать с такой детализацией.

Я просто пытаюсь сделать развертывание.

далее в этом вопросе, кто-то говорит о "MSDeploy". Я могу посмотреть на это, но это единственный вариант? У меня нет возможности установить web deploy на сервере. В этом случае все, что мне действительно нужно сделать, это "опубликовать" и отправить содержимое опубликованного проекта в заданный каталог на сервере/файловой системе.

у кого-нибудь есть один лайнер, который я могу использовать?

должен ли я использовать MSDeploy?

есть ли средства msdeploy требуется веб-развертывания для установки на сервер?

не настраивает веб развертывание на сервере требует настройки некоторых портов, разрешений и установки некоторых надстроек IIS?

Я хотел бы просто выполнить что-то простое.

4 71

4 ответа:

в VS 2012 (а также публиковать обновления, доступные в Azure SDK для VS 2010) мы упростили публикацию командной строки для веб-проектов. Мы сделали это с помощью публикации профилей.

в VS для веб-проекта вы можете создать профиль публикации с помощью диалогового окна публикации. При создании этого профиля он автоматически сохраняется в проекте в разделе свойства\PublishProfiles. Созданный профиль можно использовать для публикации из командной строки с помощью командная строка следующее.

msbuild mysln.sln /p:DeployOnBuild=true /p:PublishProfile=<profile-name>

Если вы хотите сохранить профиль публикации (.pubxml file) в каком-то другом месте вы можете передать путь к PublishProfile.

профили публикации-это файлы MSBuild. Если вам нужно настроить процесс публикации, вы можете сделать это прямо изнутри .pubxml файл.

Если ваша конечная цель-передать свойства из командной строки. Я бы рекомендовал следующее. Создание образца публикации профиль в против. Проверьте, что опубликовать профиль, чтобы определить, какие свойства MSBuild необходимо передать в командной строке. FYI не все методы публикации поддерживают публикацию командной строки (например, FTP/FPSE).

к вашему сведению, если вы строите .csproj/.vbproj вместо своего .sln и вы используете VS 2012 вы также должны пройти в /p:VisualStudioVersion=11.0. Для получения более подробной информации о том, почему см. http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx.

создать строить.xml-файл, который выглядит как ниже

запустить командную строку Visual Studio

выполнить сборку msbuild.xml

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build">

  <PropertyGroup>
    <Build>$(MSBuildProjectDirectory)\Build</Build>
    <ProjectFile>MyProject.csproj</ProjectFile> 
    <ProjectName>MyProjectNameInVisualStudio</ProjectName>
    <CopyTo>$(MSBuildProjectDirectory)\CopyTo</CopyTo>
  </PropertyGroup> 

  <Target Name="Build"> 
    <RemoveDir Directories="$(Build)"/>  
    <MSBuild Projects="$(ProjectFile)" Properties="Configuration=Release;OutputPath=$(Build);OutDir=$(Build)/"></MSBuild>  
    <Exec Command="robocopy.exe  $(Build)\_PublishedWebsites$(ProjectName) $(CopyTo) /e /is
      if %errorlevel% leq 4 exit 0 else exit %errorlevel%"/>    
  </Target>

</Project>

С веб-проектами вам нужно построить, как указано выше, но тогда вам также нужно упаковать/скопировать. Мы используем копию файла, а не "опубликовать"...

также; мы используем DEBUG / RELEASE для создания веб-сайта; но затем фактические среды, т. е. "QA" или "PROD" для обработки веб-сайта.конфигурация трансформируется.

Итак, мы строим его изначально с RELEASE, а затем упаковываем его с QA - в примере ниже.

  <PropertyGroup>   
    <SolutionName>XXX.Website</SolutionName>
    <ProjectName>XXX.Website</ProjectName>
    <IisFolderName>XXX</IisFolderName>

    <SolutionConfiguration>QA</SolutionConfiguration> <!--Configuration will be set based on user selection-->   

    <SolutionDir>$(MSBuildThisFileDirectory)..</SolutionDir>
    <OutputLocation>$(SolutionDir)\bin\</OutputLocation>
     <WebServer>mywebserver.com</WebServer>
  </PropertyGroup>

  <Target Name="BuildPackage">
    <MSBuild Projects="$(SolutionDir)$(SolutionName).sln" ContinueOnError="false" Targets="Clean;Rebuild" Properties="Configuration=Release" />
    <MSBuild Projects="$(SolutionDir)$(ProjectName)$(ProjectName).csproj" ContinueOnError="false" Targets="Package" Properties="Configuration=$(SolutionConfiguration);AutoParameterizationWebConfigConnectionStrings=False" />
  </Target>

  <Target Name="CopyOutput">
    <ItemGroup>
      <PackagedFiles Include="$(SolutionDir)$(ProjectName)\obj$(SolutionConfiguration)\Package\PackageTmp\**\*.*"/>
    </ItemGroup>
    <Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\$(WebServer)$(IisFolderName)$(SolutionConfiguration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
  </Target>

Так,

  1. настройки свойства
  2. вызов цели BuildPackage
  3. вызов цели CopyOutput И вуаля!

команда ниже работает идеально:

msbuild Myproject.sln  /t:Rebuild /p:outdir="c:\outproject\" /p:Configuration=Release /p:Platform="Any CPU"