发布期间如何设置ASPNETCORE_ENVIRONMENT?

时间:2019-04-03 21:42:26

标签: asp.net-core asp.net-core-mvc

我有几个WebDeploy发布配置文件,这些配置文件将.NET Core Web项目部署到各个位置(Dev,QA,IIS上的Stage)。为了使应用程序知道它在哪里运行,我需要设置ASPNETCORE_ENVIRONMENT环境变量。

是否可以在发布应用程序时设置ASPNETCORE_ENVIRONMENT环境变量?

P.S。 This question并没有为我解决任何问题,因为它显示了如何手动实现。我希望它在部署发布配置文件时是自动的。

4 个答案:

答案 0 :(得分:2)

来自https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-3.1#set-the-environment

对于Windows IIS部署:将属性包括在发布配置文件(.pubxml)或项目文件中。该方法在项目发布时在web.config中设置环境。

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

答案 1 :(得分:1)

您可以使用 部分中的以下文字来更新 webconfig 文件。

Recreation.assertTrue(identity((x) -> () -> Boolean.TRUE));

或者在将应用程序托管在IIS之后,您可以按照以下步骤操作。

第1步: 单击配置编辑器,如下图所示

enter image description here

第2步:

现在选择 system.webserver / asp.netcore ,然后在其他下拉列表中选择下图所示的 applicationHost.config

enter image description here

第3步:

现在选择 enviromentVariable 并输入值。

enter image description here

希望对您有帮助。

答案 2 :(得分:0)

经过长时间的搜索,阅读和实验,我通过在我的func UnmarshalWithContext(b []byte, v interface{}, ctx *Context) error中添加环境变量ASPNETCORE_ENVIRONMENT来解决了问题

.pubxml

我用它来选择我的应用程序的构建环境,在发布时,我的<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <ASPNETCORE_ENVIRONMENT>Test</ASPNETCORE_ENVIRONMENT> </PropertyGroup> <PropertyGroup> <WebPublishMethod>MSDeploy</WebPublishMethod> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform> ..... </PropertyGroup> </Project> 如下:

.csproj

最后,我的react应用的 <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish"> <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" /> <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:$(ASPNETCORE_ENVIRONMENT.ToLower())" /> ... </Target>

package.json

我有意删除了"scripts": { "start": "env-cmd -f .env.development react-scripts start", "build:production": "env-cmd -f .env.production react-scripts build", "build:staging": "env-cmd -f .env.staging react-scripts build", "build:test": "env-cmd -f .env.test react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "mock:api": "json-server --watch db.json --port 4000" }, 行,因此始终提供环境。

编辑:

我还添加了"build": "react-scripts build"用于在PropertyGroup文件中设置EnvironmentName,因此在发布时,我的.csproj会将web.config设置为环境变量,如所定义在我的ASPNETCORE_ENVIRONMENT中,动态地:

.pubxml

答案 3 :(得分:-1)

要在特定环境下发布web.config,可以尝试Transform web.config

根据您的要求,您可以尝试Profile

  1. 使用不同的ASPNETCORE_ENVIRONMENT环境变量创建多个web。{profile} .config。

    例如web.Dev.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location>
        <system.webServer>
        <aspNetCore>
            <environmentVariables xdt:Transform="InsertIfMissing">
            <environmentVariable name="ASPNETCORE_ENVIRONMENT"
                                value="Dev"
                                xdt:Locator="Match(name)"
                                xdt:Transform="InsertIfMissing" />
            </environmentVariables>
        </aspNetCore>
        </system.webServer>
    </location>
    </configuration>
    

    例如web.Release.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location>
        <system.webServer>
        <aspNetCore>
            <environmentVariables xdt:Transform="InsertIfMissing">
            <environmentVariable name="ASPNETCORE_ENVIRONMENT"
                        value="Release"
                        xdt:Locator="Match(name)"
                        xdt:Transform="InsertIfMissing" />
            </environmentVariables>
        </aspNetCore>
        </system.webServer>
    </location>
    </configuration>
    
  2. 使用诸如DevRelease之类的特定名称创建项目配置文件,则可以使用现有的配置文件名称创建web。{profile} .config。

  3. 发布后,它将特定内容从web.{profile}.config复制到web.config

  4. 当前,它将在已发布文件夹中存在web.configweb.Dev.configweb.Release.config,如果您只喜欢web.config,请更改Project.csproj如下所示,以排除不需要的文件。

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
    <PropertyGroup>
        <TargetFramework>netcoreapp2.2</TargetFramework>
        <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
        <Configurations>Debug;Release;Dev</Configurations>
    </PropertyGroup>
    
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    </ItemGroup>
    <ItemGroup>
        <Content Update="web.Dev.config" CopyToPublishDirectory="Never" />
        <Content Update="web.Release.config" CopyToPublishDirectory="Never" />
    </ItemGroup>
    </Project>