Program Club

MSBuild.exe를 사용하여 cmd 행으로 ASP.NET MVC 4 프로젝트를 "게시"

proclub 2020. 10. 9. 12:35
반응형

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"

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

또한; 웹 사이트 구축을 위해 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 타겟을 호출하고 짜잔!

참고 URL : https://stackoverflow.com/questions/13920146/using-msbuild-exe-to-publish-a-asp-net-mvc-4-project-with-the-cmd-line

반응형