2017-12-10 28 views
0

Visual Studio 2017을 사용하고 있으며 여러 웹 프로젝트 및 Webjob 프로젝트가있는 솔루션이 있습니다.웹 패키지를 게시 할 때 로컬로 디버깅하는 동안 webjob 파일을 포함하려면 어떻게합니까?

내가 원하는 일부 파일이 내가 원하는 개발 환경에서 로컬로 실행하면을 포함 웹 출판 패키지의 일부로 배포되는을 제외 할 수 있습니다. connectionstrings.config 파일을 만들 때하는 것은 내 bin\에 복사되는 것을 의미 -

<ItemGroup> 
    <ExcludeFromPackageFiles Include="connectionstrings.config"> 
     <FromTarget>Project</FromTarget> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </ExcludeFromPackageFiles> 
    </ItemGroup> 

이 내 웹 프로젝트에 대해 완벽하게 작동 : 나는 여기에 다른 http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx 및 설명 된 프로세스를 사용하려고 시도하고있어

디렉토리이며 웹 배포 패키지의 일부로 포함되지 않습니다. 반면 내 웹 프로젝트에서 구현하면 파일은 내 bin\ 디렉토리로 복사되지만 배포 패키지에도 포함됩니다. 에서

복사 파일을 다음 내가 볼 msbuild를 출력에서 ​​

: connectionstrings \에 "빈 \ ProdBuildCfg"C \ 사용자 나에게 프로젝트 \ MyApp를 \ MyApp를 \ webjob1 \ connectionstrings.config \ \ 문서 \ ". config "를 입력하십시오. 그것은 또한 나를 로컬/디버그를 실행할 수 있습니다, 그리고 있기 때문에 내가 원하는 것입니다

:

복사 C : \ 사용자 나에게 빈 \ \ 프로젝트 \ MyApp를 \ MyApp를 \ webjob1 \ \ 문서 \ ProdBuildCfg \ connectionstrings.config를 obj \ ProdBuildCfg \ Package \ PackageTmp \ app_data \ jobs \ continuous \ webjob1 \ connectionstrings.config로 변경하십시오.

이는 문제를 보여줍니다. connectionstrings.config는 이후의 게시/배포를 위해 여전히 패키지 디렉토리에 복사됩니다.

위의 문서 및 다른 사람에서 설명하는 과정은 웹 프로젝트에 적용하고, 그들은 당신이 프로젝트 파일의

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

라인 아래 <ItemGroup>을 배치해야 나타냅니다. Webjob 프로젝트는 그 라인을 포함 아니라 닮은 뭔가를하지 않습니다

<Import Project="..\packages\Microsoft.Web.WebJobs.Publish.1.0.13\tools\webjobs.targets" Condition="Exists('..\packages\Microsoft.Web.WebJobs.Publish.1.0.13\tools\webjobs.targets')" />

나는 문제가 목표에 관한 생각 - 하나 내 프로젝트의 적절한 <Import Project="...*.targets')" /> 라인을 포함하지 않는 파일이나 난에 아니에요 파일의 올바른 위치.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<ExcludeFilesFromDeployment>connectionstrings.config</ExcludeFilesFromDeployment> 
</PropertyGroup> 

내가 connectionstrings.config의 빌드 작업이 None로 설정 Copy to output directory 세트 Always에 (나의 이해는 결과를 해당 작업입니다있는 Copy to output directory 설정이 명확하다에서 :

다음 나는 방법은 여기 How do I include webjob files while debugging locally but exclude when publishing a web package? 언급 시도 패키징/배포와 관련된 작업과는 다릅니다). 같은 결과. (필자는 빌드 구성을 위해 <PropertyGroup>을 올바르게 사용하도록했습니다.

참고 : 디버깅하는 동안 나는 "하늘빛 webjob로 게시"VS에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 선택하거나 배포 또는 내가 webjob 파일을 포함하려면 어떻게 msbuild myproj.csproj /p:DeployOnBuild=true /p:Configuration=Release /p:PublishProfile="Prod" /p:VisualStudioVersion=15.0 /p:Password=

답변

0

처럼 게시하는 MSBuild를 명령을 사용하고 있습니다 웹 패키지를 게시 할 때 로컬에 있지만 제외 할 수 있습니까? 당신이 어떤 파일을 게시하지 않으려면 내 지식

는, 당신은 단지 "로 출력 디렉토리복사 복사하지 마십시오"할 파일 속성을 설정해야합니다. 이 방법을 사용하면 특정 파일이 패키지의 일부가 아니며 Azure에 없을 수도 있습니다.

업데이트 :

불행하게도 그 설정은 내가 로컬로 실행하거나 디버깅 할 수 없습니다 의미 출력 디렉토리에 복사되는 파일을 방지 할 수 있습니다.

프로젝트를 디버깅 할 때 "copy to output directory"을 "Copy always"으로 설정할 수 있습니다. 프로젝트를 배포하려면 수동으로 빌드를 지우고 값을 DO NOT COPY으로 변경하십시오.

수동으로 수행하고 싶지 않은 경우 해결 방법을 제공하고 싶습니다. 도움이 될 수 있기를 바랍니다.

이 작업을 수행하려면 프로젝트를 언로드하십시오. 그럼 그냥 스크립트 아래의 종료 태그, 장소 이전 프로젝트의 맨 끝에서 :

<Target Name="ExcludeFileFromPackage" BeforeTargets="PipelineCopyAllFilesToOneFolderForMsdeploy"> 
    <Message Text="Delete the connectionstrings.config from Obj folder to exculde this file in the package directory" /> 

    <Delete Files="$(ProjectDir)obj\Release\Package\PackageTmp\connectionstrings.config" /> 
    </Target> 

이 대상으로, VS/MSBuild에서 이전 패키지와 프로젝트를 게시하여 obj 폴더에서 connectionstrings.config 삭제됩니다.

+0

불행히도 그 설정은 파일을 출력 디렉토리에 복사하지 못하게하여 로컬에서 실행하거나 디버깅 할 수 없음을 의미합니다. 개발 환경에서 로컬로 실행할 때 웹 게시 패키지의 일부로 배포하지 않으려는 파일이 있습니다. – Howiecamp

+0

@Howiecamp, 답장을 보내 주셔서 감사합니다. Webjob 프로젝트에서 'ExcludeFromPackageFiles'의 속성이 작동하지 않는 것 같습니다. 이 문제를 해결하기 위해 해결 방법을 제공 했으므로 업데이트 된 답변을 통해 자세한 정보를 확인할 수 있습니다. 희망이 도움이됩니다. –

+0

당신이 제안하고있는''접근 방식을 시도 할 것입니다. 'msbuild.exe' 명령 줄 (예를 들어 내 질문 참조)을 통해 게시하거나 VS에서 마우스 오른쪽 버튼을 클릭하고 "Azure webjob으로 게시"를 선택하여 대화 형으로 게시할지 여부는 동일하게 작동합니까? – Howiecamp