programing

dotnet publish가 올바른 앱 설정을 게시하지 않습니다. {env.EnvironmentName} .json

nasanasas 2020. 12. 8. 08:17
반응형

dotnet publish가 올바른 앱 설정을 게시하지 않습니다. {env.EnvironmentName} .json


명령 줄에서 다음 명령을 실행할 때 :

dotnet publish -o "./../output" -c Release

dotnetcli올바르게 프로젝트를 게시합니다. 그러나 appsettings.Production.json파일을 복사하지 않고 appsettings.json.

왜 이런거야? 공식 핵심 문서를 검색하고 읽었지만 올바른 환경 appsettings.json이 게시 출력 에서 어떻게 끝나야 하는지를 찾지 못했습니다 .

appsettings.Production.json게시 된 폴더에 수동으로 복사해야합니까 ?


업데이트 : 현재 (새) .csproj 형식의 경우 CopyToPublishDirectory속성을 사용해야합니다. 파일을 게시 디렉토리에 복사할지 여부를 결정하고 다음 값 중 하나를 가질 수 있습니다.

  • 항상,
  • 보존 최신

따라서 다음 섹션을 추가하십시오 .csproj.

<ItemGroup>
   <None Include="appsettings.Production.json" CopyToPublishDirectory="Always" />
</ItemGroup>

조사 @nover 응답 및 SO 제외 또는 게시에 파일을 포함 출판하는 동안 파일의 컨트롤에 대한 자세한 내용은.


" project.json파일에는 "appsettings.json "과 같은 파일이 이미있는 publishOptions하위 섹션이있는 섹션 include있습니다.

"publishOptions": {
  "include": [
    "appsettings.json",
    "hosting.json",
    "project.json",
    "web.config"
  ]
},

"appsettings.Production.json"이 배열에 추가해야합니다 .

댓글에 따른 업데이트 :

  • , appsettings.*.json같은 모든 파일 은 항상 모든 환경에서 끝납니다. 조건 규칙을 지원하지 않으므로을 사용하여 간단히 처리 할 수 ​​없습니다 . 때, 미래에 변경됩니다 됩니다 다시 교체. 이것이 앱에 중요한 경우 환경 변수, 데이터베이스 등과 같은 다른 구성 저장소를 사용하는 것이 좋습니다.appsettings.development.jsonappsettings.staging.jsonappsettings.production.jsonproject.jsonproject.jsonmsbuild.csproj

  • 여러 위치에있는 경우 적용 할 설정을 결정하므로 순서가 중요합니다. 에서 문서 :

    구성 소스가 지정되는 순서는 중요합니다. 설정이 여러 위치에있을 경우 적용되는 우선 순위를 설정하기 때문입니다. 아래 예에서 동일한 설정이 appsettings.json과 환경 변수 모두에 존재하는 경우 환경 변수의 설정이 사용됩니다. 설정이 둘 이상의 위치에있는 경우 마지막 구성 소스가 "승인"합니다. ASP.NET 팀은 배포 된 구성 파일에 설정된 모든 항목을 로컬 환경이 재정의 할 수 있도록 환경 변수를 마지막으로 지정할 것을 권장합니다.


당신 project.json에는 섹션이 publishOptions있습니다. 게시 할 때 포함될 모든 파일과 폴더가 나열됩니다. 다음과 같이 보이도록 업데이트해야합니다.

{
  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "appsettings.Production.json",
      "web.config"
    ]
  },
}

글 로빙 패턴을 사용할 수도 있으므로이 방법도 사용할 수 있습니다 (나는이 패턴을 테스트하지 않았습니다).

{
  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings*.json",
      "web.config"
    ]
  },
}

csproj프로젝트 형식의 ItemGroup경우 콘텐츠와 함께 새 항목을 추가 해야합니다.

<ItemGroup>
  <Content Include="appsettings.json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
  <Content Include="appsettings.Production.json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
</ItemGroup>

appsettings.{env}.json파일 이 여러 개인 경우 Content동일한 태그 를 반복하면 ItemGroup모든 설정 파일이 게시 폴더에 저장됩니다.

주석에서 언급했듯이 더 깨끗한 솔루션은 다음과 같은 와일드 카드를 사용하는 것입니다.

<ItemGroup>
  <Content Include="appsettings*json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
</ItemGroup>

그리고 모든 appsettings파일이 게시됩니다!


Visual Studio 2017 15.3 이후

.csproj 파일을 편집하여 파일 / 폴더가 게시되지 않도록 수동 제외

<ItemGroup>
  <Content Remove="appsettings.Development.json" />
</ItemGroup>

참조 : https://www.danielcrabtree.com/blog/273/fixing-the-duplicate-content-error-after-upgrading-visual-studio-2017

원본 소스

참고URL : https://stackoverflow.com/questions/37858312/dotnet-publish-doesn%c2%b4t-publish-correct-appsettings-env-environmentname-json

반응형