Использование MSBuild.exe для публикации проекта ASP.NET MVC 4 с помощью строки cmd

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

Например,

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

Это явно неверный синтаксис. Я пытаюсь упростить свой вопрос.

Этот вопрос говорит о построении XML, но я не пытаюсь сделать что-либо с этой подробностью.

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

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

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

Нужно ли использовать MSDeploy?

Требуется ли MSDeploy для развертывания веб-развертывания на сервере?

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

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

Ответ 1

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

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

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

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

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

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

FYI, если вы создаете .csproj/.vbproj вместо .sln, и вы используете VS 2012, вы также должны пройти /p:VisualStudioVersion=11.0. Подробнее об этом см. http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx.

Ответ 2

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

Запустите командную строку Visual Studio

Запустите msbuild build.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>

Ответ 3

Приведенная ниже команда отлично работает:

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

Ответ 4

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

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

Итак, мы сначала создаем его с помощью 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>

Итак,

  • Настройка свойств
  • Вызвать цель BuildPackage
  • Вызов цели CopyOutput И вуаля!