18

게시 이벤트 후 간단한 작업을 호출하려고합니다. "게시"라고 말하면 Visual Studio에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 "게시 ..."를 누르는 것을 의미합니다. 빌드 이벤트에서 이미 테스트했기 때문에 (잘 임포트 된) 대상 파일을 프로젝트 파일에 포함 시켰습니다. http://msdn.microsoft.com/en-us/library/ms366724.aspx에 내가 필요한 것을해야하는 AfterPublish 이벤트가 있다는 것을 알았지 만, 그렇지 않습니다. Visual Studio에서 게시 할 때 트리거해야하는 것과 동일한 이벤트인지 확실하지 않습니다. 다른 사람이이를 분명히하십시오. 내 질문은 Visual Studio에서 게시시 대상 파일에서 모든 종류의 작업을 트리거하는 방법입니다.Visual Studio에서 게시 이벤트 후

나는 목표 파일이 시도했다 :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="AfterPublish"> 
     <Message Label="Test"></Message>   
     <Warning Label="Test"></Warning> 
    </Target> 
</Project> 

내가 비주얼 스튜디오를 사용하고 2010 년

편집 : 나는 사실의 게시에 특정 동작을 실행할 수있는 방법을 찾고 있어요

비주얼 스튜디오. 또한 Build Events를 추가하려고 생각했지만 진행 중인지 여부를 결정하는 방법을 알지 못합니다.

편집 : @Alexey Shcherbak 빠른 답장을 보내 주셔서 감사합니다.

12/10/2012 12:29:40 AM:  Done executing task "CallTarget". 
12/10/2012 12:29:40 AM:  Done building target "PipelinePreDeployCopyAllFilesToOneFolder" in project "PublishTestApp.csproj". 
12/10/2012 12:29:40 AM:Done building project "PublishTestApp.csproj". 
Deleting existing files... 
Publishing folder /... 
Publishing folder Account... 
Publishing folder bin... 
Publishing folder Scripts... 
Publishing folder Styles... 
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== 
========== Publish: 1 succeeded, 0 failed, 0 skipped ========== 

그래서 내 작업이 바로 PipelinePreDeployCopyAllFilesToOneFolder 후하지만 파일의 실제 대처하기 전에 실행하고 나는 그 시점에서 아직 이루어지고의 사이트에 고려하지 않는다 : 내 MSBuild에서 출력이 무엇입니까. 물론, 실제로 테스트 했으므로 MSBuild 작업에서 게시 폴더에 복사 할 텍스트 파일에서 간단한 읽기를 실행하고 실패했습니다.

+0

수정에 대한 답변으로 다른 부분을 추가했습니다 –

답변

14

게시 상황에 맞는 메뉴는 "게시"대상을 실행하지 않습니다 (게시 웹 사이트, ClickOnce 패키지 게시가 아닌 경우).

VS2010 - 컨텍스트 메뉴를 사용하는 경우 컨텍스트 메뉴에서 "PipelinePreDeployCopyAllFilesToOneFolder"대상을 실행하고 VS2012 (전환하려는 경우이 사실을 명심하십시오)에서 "MSDeployPublish"대상을 실행합니다.

this question and answer을 읽어야합니다. Jez와 나는 Before \ After 게시 대상에 연결하는 방법에 대한 꽤 포괄적 인 대답을 제공했습니다. CopyAllFilesToSingleFolderForPackage 대신 PipelinePreDeployCopyAllFilesToOneFolder 사용 - 파일이 대상 후 복사되어야한다 : 당신이 EDIT1 @이 방법

<Target Name="Mytarget" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder" > 
    <Message Label="Test"></Message>   
    <Warning Label="Test"></Warning> 
</Target> 

를 사용할 수 MSBuild를 버전> = 4.0 - 짧은에서

. VS 컨텍스트에서 실행될 때만 대상을 발사해야하는 경우 - 내가 게시 한 링크를 확인하고 조건 추가 -이 같은 Visual Studio 시작 확인 Condition="'$(BuildingInsideVisualStudio)'=='true' AND '$(VisualStudioVersion)'=='10.0'" 원하는 대상의 유형과 같은 컨텍스트를 추가하는 경우 게시 후 발매- 그것은 그냥 내가 여기에 비주얼 스튜디오 2013 년이 달성 방법에 대한 게시물 작성

+0

문제의 업데이트를 참조하십시오. 고맙습니다. –

+0

이것은 내가 찾고있는 '목표'였습니다 (블로그 게시글이있는 경우 모든 MSBuild 대상에 대해 설명해 주시면 감사하겠습니다). 내 문제는 파일을 변환 할 때만 전환을 사용하고 빌드를 전환하지 말아야한다는 것이 었습니다. –

+0

@RobScott AFAIK MSBuild가 설계된 방식은 타겟 및 버전 (및 오버라이드) 세트가 컴퓨터에서 매우 고유하고 SDKs \ 프로젝트 유형 \ msbuild 및 VS의 버전에 따라 달라진다는 것을 의미합니다. 설치. 환경을 기반으로 빌드 스크립트를 동적으로 작성합니다. 이것은 매우 강력하지만 동시에 매우 연약합니다. 그래서 그것은 포괄적 인 목표 목록을 가질 수 없습니다. 자세한 로그를 읽는 방법과 .targets 파일을 읽는 방법을 배우면 필요한 내용을 찾을 수 있지만 치트 시트는 없습니다. ( –

4

문제를 이해하기 위해 다른 사람을 더 컨텍스트를 추가하고 도움이 될 수 :

<Target Name="Mytarget" AfterTargets="MSDeployPublish" > 
    <Message Text="The name of the publish profile is $(DestinationAppRoot)"/> 
    .... Here's where you do something awesome... 
</Target> 
: 기본적으로 http://www.alexdresko.com/2015/02/28/taking-visual-studio-build-and-publish-events-to-the-next-level/

에게, 이것은 마법

자세한 내용은 전체 게시물을 읽는 것이 좋습니다.

+1

예를 들어 도착 URL에 도착하기 위해 $ (DestinationAppRoot)와 같은 변수가 더 있습니까? –

+0

솔직히 말해서 전체 하드 드라이브에서 'DestinationAppRoot'및 당신은 유용한 것을 우연히 발견 할 수 있습니다. 나는 여기에 게시 된 솔루션을 어떻게 생각해 냈는지 정말로 기억하지 못합니다. :) –

0

다른 질문에 대한 답이 도움이 될 수 있습니다.

AfterPublish script doesn't run when I publish a web app

특히, '출판 파일'의 경로를 사용하여, 당신은 $(WebProjectOutputDir)\$(WPPAllFilesInSingleFolder)를 통해 매개 변수에 전달할 수 있습니다. 이것은 c:\{path to *.csproj}\obj\{build configuration}\Package\PackageTmp과 같을 것입니다.

+0

그러면 아마도이 대신에 중복으로 투표해야합니까? –

+0

'정확한 중복'인지 모르겠다 ... 다른 답변에 대한 나의 정보가 도움이 될 것이라고 생각했다. 필요한 경우 신고 할 것입니다. 감사. – Terry

+0

전 주제 전문가가 아닙니다. 게시물이 중복되지 않은 경우 질문에 대한 답변을 작성하십시오. 내부 링크가 사라져도 미래의 방문자는 아무데도 가리 키지 않는 '여기를 보시오'링크가 붙어 있습니다. –

1

다른 모든 대답을 시도했지만 작동하지 않았습니다. 내 경우에는, 내가 VSTO 추가 기능을 VS2015으로 게시, 그래서 아마 계속 다른 무언가가있다, 그러나 여기에서 작업 한 두 가지 옵션이 있습니다 : 이유

<Target Name="AfterPublish"> 
    <Warning Text="publish warning 1" /> 
</Target> 
<Target Name="CustomTarget" AfterTargets="AfterPublish"> 
    <Warning Text="publish warning 2" /> 
</Target> 

일부는 I (및 assumedly 등) 이것으로 어려움을 겪었습니다. Message 작업이 아무 것도하지 않는 것 같습니다. Output보기에서 텍스트를 예상했지만 아무것도 표시되지 않았습니다. Error List에는 Message 항목이 없었지만 대신 Warning을 사용하여 Error List에 표시되었습니다. 불행히도 나는 MSBuild에 대해 왜 Message이 예상대로 동작하지 않는지에 대해 충분히 알지 못합니다.

+1

VS.NET 2017 RC4 및 AfterTargets = "AfterPublish"에서이 중 하나를 시도했습니다. 감사. – dstr

관련 문제