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.json
appsettings.staging.json
appsettings.production.json
project.json
project.json
msbuild
.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>
'programing' 카테고리의 다른 글
IntelliJ가 내 소스 코드에만 들어가도록 강제하는 방법은 무엇입니까? (0) | 2020.12.09 |
---|---|
Webpack : 플러그인 순서가 중요합니까? (0) | 2020.12.09 |
공개 키 인증은 어떻게 설정합니까? (0) | 2020.12.08 |
C #의 유전 프로그래밍 (0) | 2020.12.08 |
.NET Framework, CLR 및 Visual Studio 버전 번호는 서로 어떤 관련이 있습니까? (0) | 2020.12.08 |