[visual-studio] MSBuild.exe를 사용하여 cmd 줄이있는 ASP.NET MVC 4 프로젝트 “게시”

MSBuild.exeMVC 4 프로젝트를 가져 와서 지정된 디렉토리에 게시하는에 대해 실행할 명령을 찾고 있습니다.

예를 들면

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

이것은 분명히 잘못된 구문입니다. 나는 내 질문을 단순화하려고 노력하고 있습니다.

이 질문 은 빌드 XML에 대해 이야기하지만 그 정도의 세부 사항으로 아무것도하지 않으려 고합니다.

나는 단순히 배포를 시도하고 있습니다.

이 질문 에서 더 아래로 누군가 “MSDeploy”에 대해 말합니다. 내가 조사 할 수는 있지만 유일한 옵션입니까? 서버에 웹 배포를 설치할 수 없습니다. 이 경우 내가 정말로해야 할 일은 “게시”하고 게시 된 프로젝트의 내용을 서버 / 파일 시스템의 지정된 디렉토리로 보내는 것입니다.

누구든지 내가 사용할 수있는 하나의 라이너가 있습니까?

MSDeploy를 사용해야합니까?

MSDeploy를 사용하려면 서버에 웹 배포를 설치해야합니까?

서버에서 웹 배포를 설정하려면 일부 포트와 권한을 설정하고 일부 IIS 추가 기능을 설치해야하지 않습니까?

나는 단순한 것을 실행하고 싶다.



답변

VS 2012 ( VS 2010 용 Azure SDK 에서 제공되는 게시 업데이트 포함 )에서는 웹 프로젝트에 대한 명령 줄 게시를 단순화했습니다. 프로필 게시를 사용하여이를 수행했습니다.

웹 프로젝트 용 VS에서 게시 대화 상자를 사용하여 게시 프로필을 만들 수 있습니다. 해당 프로필을 만들면 Properties \ PublishProfiles 아래의 프로젝트에 자동으로 저장됩니다. 생성 된 프로필을 사용하여 다음 명령 줄을 통해 명령 줄에서 게시 할 수 있습니다.

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

게시 프로필 (.pubxml 파일)을 다른 위치에 저장하려는 경우 PublishProfile 경로를 전달할 수 있습니다.

게시 프로필은 MSBuild 파일입니다. 게시 프로세스를 사용자 지정해야하는 경우 .pubxml 파일 내에서 직접 수행 할 수 있습니다.

최종 목표가 명령 줄에서 속성을 전달하는 것입니다. 다음을 추천합니다. VS에서 샘플 게시 프로필을 만듭니다. 해당 게시 프로필을 검사하여 명령 줄에서 전달해야하는 MSBuild 속성을 결정합니다. 참고로 모든 게시 방법이 명령 줄 게시 (예 : FTP / FPSE)를 지원하지는 않습니다.

참고로 .sln 대신 .csproj / .vbproj를 빌드하고 VS 2012를 사용하는 경우 /p:VisualStudioVersion=11.0. 이유에 대한 자세한 내용은 http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx를 참조 하십시오 .


답변

아래와 같은 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>


답변

아래 명령은 완벽하게 작동합니다.

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


답변

대답은 기본 구성 즉 디버그를 배포하는 것이라고 말했습니다. 게시 프로필에서 선택한 구성이 MSBuild에서 무시되는 것 같습니다. 따라서 배포에 대한 올바른 구성을 지정하도록 명령을 변경했습니다.

msbuild mysln.sln /p:Configuration=[config-name] /p:DeployOnBuild=true /p:PublishProfile=[profile-name]

여기서 config-name = 릴리스 또는 생성 한 다른 빌드 구성


답변

웹 프로젝트를 사용하면 위와 같이 빌드해야하지만 패키지 / 복사도 필요합니다. 우리는 “게시”가 아닌 파일 사본을 사용합니다.

또한; 웹 사이트 구축을 위해 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>

그래서;

  1. 속성 설정
  2. BuildPackage 대상 호출
  3. CopyOutput 대상을 호출하고 짜잔!


답변