[visual-studio] MSBuild.exe를 사용하여 cmd 줄이있는 ASP.NET MVC 4 프로젝트 “게시”
MSBuild.exe
MVC 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>
그래서;
- 속성 설정
- BuildPackage 대상 호출
- CopyOutput 대상을 호출하고 짜잔!