2015-01-24 3 views
0

VS 2013을 사용하여 Azure에 웹 역할을 배포하고 있습니다. .csdef 파일에 Contents 요소를 추가하여 다음과 같은 Azure 배포 패키지에 포함되지 않은 추가 파일을 배포합니다.Azure sitesroot에 배포 된 모든 파일이 포함되어 있지 않습니다.

패키지가 배포되면
<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition name="..." xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4"> 
    <WebRole name="..." vmsize="Small"> 
    <!-- snip --> 

    <Contents> 
     <Content destination="bin/"> 
     <SourceDirectory path="C:\...\bin"/> 
     </Content> 
    </Contents> 
    </WebRole> 
</ServiceDefinition> 

, 나는 여분의 파일이 인스턴스의 F: 드라이브에 approot 폴더에 저장되는 것을 볼 수 있습니다. 그러나이 파일은 웹 역할이 실행되는 것으로 보이는 sitesroot\0 폴더에 배포되지 않습니다. 이러한 추가 파일은 동적으로로드 할 어셈블리이므로 응용 프로그램의 다른 어셈블리와 함께 사용하고 싶습니다.

이 동작은 고의적입니까, 아니면 잘못하고 있습니까? 이 온라인에 대한 정보는 많지 않습니다.

답변

1

결국 Content 요소를 사용했지만 결국 destinationroot 폴더를 가리키는 다른 대상 경로가 생깁니다. 약간의 해킹이나 적어도 MSBuild 나 배포의 수동 패키징을하지 않고도 작동합니다.

<ServiceDefinition name="..." xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4"> 
    <WebRole name="..." vmsize="Small"> 
    <!-- snip --> 

    <Contents> 
     <Content destination="..\sitesroot\0\bin"> 
     <SourceDirectory path="C:\...\bin" /> 
     </Content> 
    </Contents> 
    </WebRole> 
</ServiceDefinition> 
0

동작은 as per the documentation입니다.이 동작은 배포 된 위치가 역할의 APPROOT (볼 때의 동작)과 관련이 있음을 나타냅니다.

사이트의 bin 폴더에 배포하려면 Visual Studio 솔루션의 일부로 패키지를 패키지해야합니다.

+0

본인은 문서에 설명 된대로 동작하는 것으로 알고 있습니다. 나는이 폴더가 어떤 식 으로든 동기화 될 것이라고 생각했습니다. 이러한 파일을 솔루션에 추가 할 수 없습니다 (어쨌든 '참조 어셈블리 및 로컬 복사'종류가 아닙니다). 어떻게하면 될까요? – MLowijs

+0

cspack (https://msdn.microsoft.com/en-us/library/azure/gg433133.aspx) 패키지가 설치 될 수 있도록 솔루션의 올바른 폴더에 복사되었는지 확인하여 게시 빌드 단계를 사용하여 수동으로 포함시킬 수 있습니다 배포 패키지에 추가하십시오. –

0

프로젝트의 루트 디렉토리 (Add -> Existing Item)에 DLL을 추가 할 수 있습니다. DLL을 가져 와서 Build ActionContent으로 설정하고 Copy to Output DirectoryCopy Always으로 설정하면 DLL이 사용자의 BIN 폴더 또는 equiv에 있다는 것을 확인합니다.


내가 과거에 무슨 짓을했는지의 예 :라는 솔루션에 두 프로젝트 :

  • DependenciesProject (클래스 라이브러리)
  • WebProject (MVC 응용 프로그램)

컴파일 된 패키지에 번들해야하는 특정 DLL이 포함되어 있지만 사용되는 특정 DLL은 컴파일 된 타겟 (x64 vs x86)을 기반으로 변경하십시오. 우리가 선택한 해결책은 위에서 설명한대로 DependenciesProject을 수행하고 컴파일시 지정한 대상 (Any CPU)을 기반으로이 기본 DLL에 대한 경로를 변경하도록 .csproj 파일을 수정했습니다.

는 그래서 DependenciesProject는 루트 디렉토리에 이러한 DLL했다 (과를 그 .csproj 우리의 Nuget packages 폴더에 존재하는 DLL을 동적 경로에 대한 일부 개조하면 되겠 가진) Content와의 Build Action 세트는 솔루션 탐색기에서와 DLL을했다 Copy to Output DirectoryCopy Always으로 설정됩니다. 즉, DependenciesProject.dll 파일을 컴파일 할 때마다 다른 DLL을 해당 .DLL 파일과 동일한 출력 폴더로 이동시킵니다.

이제 WebProject 프로젝트의 프로젝트 참조는 DependenciesProject입니다. 즉, WebProject을 컴파일하려고 할 때마다 먼저 DependenciesProject을 컴파일 한 다음 출력 폴더를 WebProject의 출력 폴더로 복사합니다.

최종 결과 : DependenciesProject.dllMySpecial.dll은 필자가 필요할 때마다 내 웹 응용 프로그램과 함께 존재했습니다.


관련 문제