2017-01-23 3 views
2

VS 2013에서 웹 및 Windows 프로젝트를 혼합했습니다. 모든 프로젝트를 빌드 할 수있는 솔루션이 있습니다. 테스트 목적으로 일부 웹 프로젝트를 로컬 폴더에 자동으로 배포하려고합니다. 난 내가Visual Studio 2013 빌드 및 게시

msbuild C:\work\Source\AppManager\SereverManager.csproj /p:DeployOnBuild=true /p:PublishProfile=Local 
으로 msbuild를을 사용하여 명령 줄에서 게시 할 수 있습니다
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>False</ExcludeApp_Data> 
    <publishUrl>$(MSBuildThisFileDirectory)..\..\bin\PublishFolder\</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles> 
    </PropertyGroup> 
</Project> 

과 같은 제작 프로파일을 만든

... 바로 게시 메뉴를 클릭하고, 수동으로 작업을 수행 할 수 있습니다

그것도 나에게 설계 결과를 제공합니다.

내가하고 싶은 것은 프로젝트 빌드와 게시를 결합하는 것입니다. 즉, 프로젝트를 빌드 할 때마다 자동으로 배포하고 싶습니다.

postbuild 이벤트에서 배치 파일을 설정하고 msbuild를 호출 해 보았습니다.하지만 VS가 고정되어 있기 때문에 올바른 방법인지 확실하지 않습니다. 프로젝트를 빌드 할 때마다 게시하도록 csproj 파일을 수정할 수 있습니까?

답변

2

예, 이것은 가능합니다. ServerManager.csproj 파일에 다음 XML을 추가하기 만하면됩니다.

<PropertyGroup> 
    <DeployOnBuild>true</DeployOnBuild> 
    <PublishProfile>Local</PublishProfile> 
    </PropertyGroup> 

업데이트 : 2017년 2월 13일

실제로 내가 유 서프가 정확하고 내가 명시 적으로 MSBuild.exe를 호출에 DeployOnBuildPublishProfile은 MSBuild 속성을 설정할 때 배포는 일 발견이 솔루션을 테스트 한 후.

>"c:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild" /p:DeployOnBuild=true /p:PublishProfile=Local 

.csproj의 속성을 설정하는 것은 일반적으로 문제없이 작동합니다. DeployOnBuild 속성이 특별 한 것으로 보입니다. 이것이 버그인지 의도적인지는 확실하지 않지만 프로젝트 파일이나 참조 된 타겟 파일에 설정하면 빌드 어딘가에 덮어 씁니다. MSBuild.exe 호출에서 플래그로 설정하여 전역 MSBuild 속성으로 정의한 경우에만이를 준수합니다.

일단 내가 이것을 발견하면 작동하는 대체 솔루션을 발견했습니다. 프로젝트의 두 번째 MSBuild 호출에 속성을 전달하십시오. 이제 VS 또는 명령 줄에서 빌드 할 때 자동으로 배포됩니다. 원래의 대답은 나를 위해 MSB4006을 던지고

<Target Name="Deploy" AfterTargets="Build"> 
    <MSBuild 
     Condition="'$(DeployOnBuild)'!='true'" 
     Projects="$(ProjectPath)" 
     Targets="WebPublish" 
     Properties="PublishProfile=$(AutoDeployPublishProfileName)"/> 
</Target> 

:

+0

감사합니다. @ chief7. 나는 당신의 제안을 시도했지만 그것은 내가보고있는 것을 얻지 못했습니다. 릴리스 구성 PropertyGroup에 DeployOnBuild 및 PublishProfile을 추가하려고 시도했습니다. – Yusuf

+0

여러 번 시도 했으므로 작동하는 것으로 알고 있습니다. 릴리스 구성을 구축하고 있습니까? – chief7

+0

예 릴리스 구성을 작성 중입니다. 나는 그것이 행할 수 있다고 확신한다, 내가 무엇을 놓치고 있는지 확실하지 않다. csproj 파일의 복사본에 대한 원본 메시지의 링크를 만들었습니다. – Yusuf

0

건물 @ chief7의 대답에, 난과 같이 비주얼 스튜디오 2015에서 MVC 프로젝트에서이 작업을 얻을 수 있었다

대상 "AfterBuild"와 관련된 대상 종속성 그래프에 순환 종속성이 있습니다.

This answer은 대상 이름을 변경하고 위의 그림과 같이 AfterTargets 속성을 추가하는 것이 좋습니다.

구성 (Debug, Release 등)에 따라 배포를해야하는 사람들을 위해 - @ chief7은 a great write-up on their website입니다.