我有几个WebDeploy发布配置文件,这些配置文件将.NET Core Web项目部署到各个位置(Dev,QA,IIS上的Stage)。为了使应用程序知道它在哪里运行,我需要设置ASPNETCORE_ENVIRONMENT环境变量。
是否可以在发布应用程序时设置ASPNETCORE_ENVIRONMENT环境变量?
P.S。 This question并没有为我解决任何问题,因为它显示了如何手动实现。我希望它在部署发布配置文件时是自动的。
答案 0 :(得分:2)
对于Windows IIS部署:将属性包括在发布配置文件(.pubxml)或项目文件中。该方法在项目发布时在web.config中设置环境。
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
答案 1 :(得分:1)
您可以使用 部分中的以下文字来更新 webconfig 文件。
Recreation.assertTrue(identity((x) -> () -> Boolean.TRUE));
或者在将应用程序托管在IIS之后,您可以按照以下步骤操作。
第1步: 单击配置编辑器,如下图所示
第2步:
现在选择 system.webserver / asp.netcore ,然后在其他下拉列表中选择下图所示的 applicationHost.config 。
第3步:
现在选择 enviromentVariable 并输入值。
希望对您有帮助。
答案 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
。
使用不同的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>
使用诸如Dev
和Release
之类的特定名称创建项目配置文件,则可以使用现有的配置文件名称创建web。{profile} .config。
发布后,它将特定内容从web.{profile}.config
复制到web.config
当前,它将在已发布文件夹中存在web.config
,web.Dev.config
和web.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>