2017-11-08 6 views
0

Docker 컨테이너에 배포하는 Asp.Net Core 2.0 웹 서비스가 있습니다.Docker 컨테이너의 종속 패키지에 대한 Xml 설명서를 가져옵니다.

웹 서비스의 경우 xml 문서 파일을 생성하고 Swagger-ui에서 해당 파일을 사용합니다. 이것은 프로젝트 자체에서 생성 된 XML 문서에 대해서는 잘 작동하지만 웹 서비스가 Docker 컨테이너에 배포 될 때 포함 된 패키지에 대해 생성 된 XML 주석을 볼 수 없습니다.

(우리가 만든) nuget 패키지에는 xml 문서 파일이 포함되어 있으며 로컬 컴퓨터에서 서비스를 실행할 때이를 사용할 수 있습니다. .IncludeXmlComments를 호출하여 문서를 멋지게 사용할 수 있으며 문서의 경로는 어셈블리 경로를 가져온 다음 .dll 확장명을 .xml로 바꿈으로써 결정됩니다.

패키지의 xml doc 파일이 컨테이너에 포함되어 있지 않아서 찾을 수 없다고 생각됩니다. Dockerfile에서 내가 명령을 참조

COPY publish . 

나는 것 중 하나 또한 복사/패키지의 XML 문서 파일을 추가하거나 게시 자산은 XML 문서 파일 부분을 만드는 방법을 알고 같은 명령. 내 컴퓨터뿐만 아니라 강력한 방식으로이 작업을 수행하는 다른 솔루션도 환영합니다.

EDIT : 이제 Docker 컨테이너에 xml 추가 doc 파일이 생겼지 만 Swagger는 해당 파일에서 제공되는 설명 (로컬에서 실행 중일 때)을 여전히 표시하지 않습니다. 우리는이 유사한 사용 : {에 PackageName가} 패키지의 실제 이름으로 대체해야

<Target Name="PrepublishScript" BeforeTargets="PrepareForPublish"> 
    <ItemGroup> 
     <DocFile Include="$(USERPROFILE)\.nuget\packages\{packagename}\**\lib\$(TargetFramework)\{PackageName}.xml" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(DocFile)" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="false" /> 
</Target> 

있는합니다. 경로의 와일드 카드는 버전을 독립적으로 유지합니다 (여러 버전이 있기 때문에 문제가 발생하는지 확인해야하지만).

답변

0

동료가이 문제를 해결하는 방법을 알아 냈기 때문에 나는 내 자신의 질문에 답할 것입니다. 당신은 다음 단계 따르 nuget 패키지를 변경해야

  1. 을 (projectname.targets 말) 연장 .targets을 가진 파일을 생성 해당 폴더에서 프로젝트
  2. 에서 "빌드"폴더 만들기 내용으로

  3. <?xml version="1.0" encoding="utf-8"?> 
    <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
        <None Include="$(MSBuildThisFileDirectory)projectname.xml"> 
         <Link>projectname.xml</Link> 
         <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
        </None> 
    </ItemGroup> 
    
    는 편집 csproj 파일은 최종 </프로젝트 >t 전에이 추가
    <ItemGroup> 
        <None Include="bin\$(Configuration)\$(TargetFramework)\projectname.xml" Pack="true" PackagePath="build" /> 
        <None Include="build\projectname.targets" Pack="true" PackagePath="build" /> 
    </ItemGroup> 
    
    <ItemGroup> 
        <Folder Include="build\" /> 
        <Folder Include="Properties\" /> 
    </ItemGroup> 
    
    선택의 당신의 이름

대체 "프로젝트 이름 AG

, 우리는 우리의 프로젝트의 이름을 사용했다. 이러한 수정은 빌드 동작 : 없음 및 Copy to Output Directory : Copy always 속성을 사용하는 (해당) 프로젝트의 루트에 패키지의 XML 문서 파일을 추가합니다. 그런 다음 Docker 컨테이너에 배포 된 경우 Docker 파일을 수정하지 않아도 패키지의 XML 주석을 볼 수 있습니다.