Использование 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
И вуаля!