quando eu publico meu aplicativo da web principal do asp.net em meu sistema de arquivos local, ele sempre leva a configuração de produção e a variável ASPNETCORE_ENVIRONMENT com o valor = "Production".
como e onde devo definir o valor da variável ASPNETCORE_ENVIRONMENT para que seja considerado não apenas para depuração, mas também para publicação ? já tentei as seguintes opções sem sucesso:
- nas configurações do Windows
- no arquivo .pubxml
- em launchSettings.json
- em project.json
Respostas:
Além das opções mencionadas acima, existem algumas outras soluções.
1. Modificando o arquivo de projeto (.CsProj)
O MSBuild oferece suporte à
EnvironmentName
propriedade que pode ajudar a definir a variável de ambiente certa de acordo com o ambiente que você deseja implantar. O nome do ambiente seria adicionado ao web.config durante a fase de Publicação.Basta abrir o arquivo de projeto (* .csProj) e adicionar o seguinte XML.
O código acima adicionaria o nome do ambiente como
Development
para a configuração de depuração ou se nenhuma configuração for especificada. Para qualquer outra configuração, o nome do ambiente estariaProduction
no arquivo web.config gerado. Mais detalhes aqui2. Adicionando a propriedade EnvironmentName nos perfis de publicação.
Podemos adicionar a
<EnvironmentName>
propriedade no perfil de publicação também. Abra o arquivo de perfil de publicação localizado emProperties/PublishProfiles/{profilename.pubxml}
Isso definirá o nome do ambiente em web.config quando o projeto for publicado. Mais detalhes aqui3. Opções de linha de comando usando dotnet publish
Além disso, podemos passar a propriedade
EnvironmentName
como uma opção de linha de comando para odotnet publish
comando. O comando a seguir incluiria a variável de ambiente comoDevelopment
no arquivo web.config.dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
fonte
dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
é exatamente o que eu estava procurando. Obrigado!Opção 1:
Para definir a variável de ambiente ASPNETCORE_ENVIRONMENT no Windows,
Linha de comando -
setx ASPNETCORE_ENVIRONMENT "Development"
PowerShell -
$Env:ASPNETCORE_ENVIRONMENT = "Development"
Para outro sistema operacional, consulte - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments
Opção 2:
Se você deseja definir ASPNETCORE_ENVIRONMENT usando
web.config
seguida, adicioneaspNetCore
como this-fonte
Maneira simples de configurá-lo no IDE do Visual Studio.
Projeto> Propriedades> Depurar> Variáveis de ambiente
fonte
Você deve seguir as instruções fornecidas na documentação , usando o
web.config
.Observe que você também pode definir outras variáveis de ambiente.
fonte
É assim que podemos definir em tempo de execução:
fonte
Com a versão mais recente do dotnet cli (2.1.400 ou superior), você pode apenas definir esta propriedade msbuild
$(EnvironmentName)
e as ferramentas de publicação se encarregarão de adicionar ASPNETCORE_ENVIRONMENT ao web.config com o nome do ambiente.Além disso, o suporte XDT está disponível a partir de 2.2.100-preview1.
Amostra: https://github.com/vijayrkn/webconfigtransform/blob/master/README.md
fonte
you can just set this msbuild property $(EnvironmentName) and publish
ou fornecer uma referência?Crie seus arquivos appsettings. *. Json. (Exemplos: appsettings.Development.json, appsettings.Staging.json, appsettings.Production.json)
Adicione suas variáveis a esses arquivos.
Crie um perfil de publicação separado para cada ambiente, como faria normalmente.
Abra PublishProfiles / Development.pubxml (a nomenclatura será baseada no nome que você chamou de Perfil de Publicação).
Basta adicionar uma tag ao PublishProfile para definir a variável EnvironmentName , a convenção de nomenclatura do arquivo appsettings. *. Json faz o resto.
Referência: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-3.1
Consulte a seção “Definir o ambiente”.
fonte
Esta variável pode ser salva em json. Por exemplo envsettings.json com o conteúdo abaixo
Posteriormente, modifique seu program.cs conforme abaixo
Dessa forma, ele sempre será incluído na publicação e você pode alterar para o valor necessário de acordo com o ambiente onde o site está hospedado. Este método também pode ser usado no aplicativo de console, pois as alterações estão em Program.cs
fonte
Achei que funcionava para mim, definindo essa variável diretamente no Azure platorm (se você usá-lo). Basta selecionar seu aplicativo da web -> configuração -> configurações do aplicativo e adicionar a variável e seu valor, em seguida, pressione o botão Salvar.
fonte
Outra opção que usamos em nossos projetos para poder definir o ambiente por site é adicionar um arquivo Parameters.xml ao projeto com o seguinte conteúdo:
A ação de construção para este arquivo é Conteúdo e a ação de cópia é Copiar se mais recente, portanto, fará parte do pacote a ser implantado.
Em seguida, para implantar o pacote e definir o ambiente, na versão, na tarefa "WinRM - IIS Web App Deployment" (funciona tão bem ao usar a tarefa "IIS web app deploy"), definimos argumentos adicionais para msdeploy :
Dessa forma, podemos ter vários lançamentos, todos usando o mesmo artefato, mas implantados em ambientes diferentes.
fonte
Eu sei que este é um post antigo, mas pensei em jogar minha solução simples na mistura, já que ninguém sugeriu.
Eu uso o diretório atual para determinar o ambiente atual e, em seguida, viro a string de conexão e a variável de ambiente. Isso funciona muito bem, desde que você tenha uma convenção de nomenclatura para as pastas do seu site, como test / beta / sandbox.
fonte