Xuất bản lên IIS, thiết lập Biến môi trường


134

Đọc hai câu hỏi / câu trả lời này tôi đã có thể chạy ứng dụng Asp.net 5 trên máy chủ IIS 8.5.

Asp.net vNext beta sớm xuất bản lên IIS trong máy chủ windows

Làm cách nào để định cấu hình ứng dụng MVC6 để hoạt động trên IIS?

Vấn đề là ứng dụng web vẫn đang sử dụng env.EnvironmentNamevới giá trị Developmentngay cả khi chạy trên IIS.

Ngoài ra, tôi muốn chạy hai phiên bản của cùng một Web (Phân đoạn, Sản xuất) trên cùng một máy chủ, vì vậy tôi cần một phương pháp để đặt biến riêng cho từng Web.

làm như thế nào?


4
Một người thường có ba môi trường mạng Phát triển, Dàn dựng và Sản xuất. Các máy chủ web là trong một môi trường. Do đó, việc thiết lập biến môi trường hệ thống cho máy chủ không phải là một hạn chế thực sự thông thường. Người ta vẫn có thể sử dụng Properties\launchSettings.jsonđể mô phỏng một môi trường khác để gỡ lỗi trong Visual Studio.
Oleg

Câu trả lời:


286

Câu trả lời này ban đầu được viết cho ASP.NET Core RC1. Trong RC2 ASP.NET Core đã chuyển từ trình xử lý httpPlafrom chung sang aspnetCore cụ thể. Lưu ý rằng bước 3 phụ thuộc vào phiên bản ASP.NET Core bạn đang sử dụng.

Hóa ra các biến môi trường cho các dự án ASP.NET Core có thể được đặt mà không phải đặt biến môi trường cho người dùng hoặc phải tạo nhiều mục nhập lệnh.

  1. Đi đến ứng dụng của bạn trong IIS và chọn Configuration Editor.
  2. Lựa chọn Configuration Editor
  3. Chọn system.webServer/aspNetCore(RC2 và RTM) hoặc system.webServer/httpPlatform(RC1) trong Sectionhộp tổ hợp
  4. Chọn Applicationhost.config ...trong Fromcombobox.
  5. Nhấp chuột phải vào enviromentVariablesyếu tố, chọn 'environmentVariables' element, sau đó Edit Items. nhập mô tả hình ảnh ở đây
  6. Đặt các biến môi trường của bạn.
  7. Đóng cửa sổ và nhấp vào Áp dụng.
  8. Làm xong

Bằng cách này, bạn không phải tạo người dùng đặc biệt cho nhóm của mình hoặc tạo thêm các mục nhập lệnh project.json. Ngoài ra, việc thêm các lệnh đặc biệt cho mỗi môi trường sẽ phá vỡ "xây dựng một lần, triển khai nhiều lần" vì bạn sẽ phải gọi dnu publishriêng cho từng môi trường, thay vì xuất bản một lần và triển khai kết quả tạo tác nhiều lần.

Cập nhật cho RC2 và RTM, nhờ Mark G và tredder.


12
Đối với bước 3 tôi đã sử dụng system.webServer/aspNetCorethay thế.
Đánh dấu G

1
Các biến môi trường hệ thống được kế thừa bởi các quá trình khi bắt đầu. Vì vậy, nếu bạn thay đổi một số biến env trong khi chạy ứng dụng, bạn sẽ không thể thấy thay đổi này theo mặc định. Để thay đổi hệ thống env var có hiệu lực, bạn sẽ cần ít nhất để khởi động lại trang web, có thể nhóm hoặc thậm chí dịch vụ IIS, tùy thuộc vào cách IIS tạo quy trình. Điều này cần phải được kiểm tra.
NickAb

7
Các cài đặt được thêm qua Trình chỉnh sửa cấu hình có bị xóa trong lần triển khai tiếp theo không?
Brad Gardner

11
@ brad-gardenner nếu các thay đổi được thực hiện cho Applicationhost.config thay vì web.config, thì các thay đổi sẽ được duy trì giữa các lần triển khai.
NickAb

15
Hoạt động cho Asp.Net Core 2.0
Frank Cannon

34

Cập nhật web.config với phần <môi trường Biến> trong <aspNetCore>

<configuration>
  <system.webServer>
    <aspNetCore .....>
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

Hoặc để tránh mất cài đặt này khi ghi đè lên web.config, hãy thực hiện các thay đổi tương tự với applicationhost.config chỉ định vị trí trang web như @NickAb gợi ý.

<location path="staging.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>
<location path="production.site.com">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>

2
Điều này khác với cách web.config của bạn là một phần của dự án và được phiên bản trong VCS. Nếu bạn có nhiều môi trường, như prod, staging, dev, thì bạn sẽ cần một số cách để chuyển đổi web.config cho từng môi trường. Thay đổi Applicationhost.config trong IIS chỉ ảnh hưởng đến IIS này. Vì vậy, bạn có thể có một web.config duy nhất trong VCS và các biến môi trường cụ thể cho IIS ghi đè các biến web.config. Applicationhost.config có thể được chỉnh sửa theo chương trình bằng PowerShell iis.net/learn/manage/powershell/ mẹo
NickAb

Cảm ơn @NickAb, tránh việc phải cập nhật web.config mỗi lần triển khai. Tôi đã cập nhật câu trả lời của mình.
Trevor Daniels

Tôi gặp rắc rối với việc thực hiện điều này từ powershell Tôi cứ nhận được Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ... Thông thường để đặt một số biến tôi sẽ viết một cái gì đó như thế này: Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging tôi đang thiếu gì?
Christian

Tôi đã trở lại với những gì tôi biết và sử dụng appcmdthay thế.
Christian

@Christian, hãy xem câu trả lời này: stackoverflow.com/a/50869935/33533 Tên và giá trị của biến môi trường đi trong một bảng băm, do đó, từ ví dụ của bạn sẽ làSet-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
Curtis Mua

21

Chỉnh sửa: kể từ phiên bản RC2 và RTM, lời khuyên này đã hết hạn. Cách tốt nhất mà tôi đã tìm thấy để thực hiện điều này trong bản phát hành là chỉnh sửa các phần web.config sau trong IIS cho từng môi trường:

system.webServer/aspNetCore:

Chỉnh sửa mục nhập Biến môi trường và thêm cài đặt biến môi trường:

ASPNETCORE_ENVIRONMENT : < Your environment name >


Thay thế cho phương pháp của drpdrp, bạn có thể làm như sau:

  • Trong project.json của bạn, hãy thêm các lệnh truyền trực tiếp biến ASPNET_ENV vào Kestrel:

    "commands": {
        "Development": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Development",
        "Staging": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Staging",
        "Production": "Microsoft.AspNet.Server.Kestrel --ASPNET_ENV Production"
    }
    
  • Khi xuất bản, sử dụng --iis-commandtùy chọn để chỉ định một môi trường:

    dnu publish --configuration Debug --iis-command Staging --out "outputdir" --runtime dnx-clr-win-x86-1.0.0-rc1-update1
    

Tôi thấy cách tiếp cận này ít xâm phạm hơn so với việc tạo thêm người dùng IIS.


11
Nếu bạn đang xuất bản thông qua msdeploy của studio. Sau đó, bạn có thể đặt <IISCommand> Staging </ IISCommand> trong tệp .pubxml của mình và nó sẽ triển khai bằng lệnh IIS được chỉ định ngay cả khi bạn không thể chỉ định nó trong UI xuất bản.
Trưởng khoa Bắc

@DeanNorth - Đây là vàng !! Hoạt động như một nhà vô địch! Cám ơn vì đã chia sẻ!
S. Rasmussen

17

Tôi có các ứng dụng web của mình (SẢN XUẤT, STAGING, TEST) được lưu trữ trên máy chủ web IIS. Vì vậy, không thể dựa vào biến môi trường hệ thống của ASPNETCORE_ENVIRONMENT, bởi vì đặt nó thành một giá trị cụ thể (ví dụ STAGING) có hiệu lực đối với các ứng dụng khác.

Khi giải quyết, tôi đã xác định một tệp tùy chỉnh (envsinstall.json) trong giải pháp visualstudio của mình:

nhập mô tả hình ảnh ở đây

với nội dung sau:

{
  // Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
  // - Production
  // - Staging
  // - Test
  // - Development
  "ASPNETCORE_ENVIRONMENT": ""
}

Sau đó, dựa trên loại ứng dụng của tôi (Sản xuất, Dàn dựng hoặc Thử nghiệm) Tôi đặt tệp này một cách chính xác: giả sử tôi đang triển khai ứng dụng TEST, tôi sẽ có:

"ASPNETCORE_ENVIRONMENT": "Test"

Sau đó, trong tệp Program.cs chỉ cần truy xuất giá trị này và sau đó đặt môi trường của webhostBuilder's:

    public class Program
    {
        public static void Main(string[] args)
        {
            var currentDirectoryPath = Directory.GetCurrentDirectory();
            var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
            var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
            var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();

            var webHostBuilder = new WebHostBuilder()
                .UseKestrel()
                .CaptureStartupErrors(true)
                .UseSetting("detailedErrors", "true")
                .UseContentRoot(currentDirectoryPath)
                .UseIISIntegration()
                .UseStartup<Startup>();

            // If none is set it use Operative System hosting enviroment
            if (!string.IsNullOrWhiteSpace(enviromentValue)) 
            { 
                webHostBuilder.UseEnvironment(enviromentValue);
            }

            var host = webHostBuilder.Build();

            host.Run();
        }
    }

Hãy nhớ bao gồm envsinstall.json trong PublishOptions (project.json):

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

Giải pháp này giúp tôi tự do lưu trữ ứng dụng ASP.NET CORE trên cùng IIS, độc lập với giá trị biến envoroment.


Rất hay, thay đổi duy nhất tôi đề xuất là hoán đổi var currentDirectoryPath = Directory.GetCienDirectory (); cho var currentDirectoryPath = PlatformService.Default.Application.ApplicationBasePath; Đây là cách an toàn hơn nhiều để có được thư mục hiện tại.
Peter Kottas

7
Thật là một trải nghiệm tuyệt vời khi bạn phải tạo một lớp cấu hình khác để quản lý các cấu hình của khung
Kugel

16

Sau khi googling mở rộng, tôi tìm thấy một giải pháp làm việc, bao gồm hai bước.

Bước đầu tiên là đặt biến môi trường toàn hệ thống ASPNET_ENV thành Sản xuất và Khởi động lại Windows Server . Sau này, tất cả các ứng dụng web sẽ nhận được giá trị 'Sản xuất' dưới dạng Môi trường.

Bước thứ hai (để kích hoạt giá trị 'Dàn dựng' cho web dàn) khá khó khăn hơn để hoạt động chính xác, nhưng đây là:

  1. Tạo người dùng windows mới, ví dụ StagingPool trên máy chủ.
  2. Đối với người dùng này, hãy tạo biến người dùng mới ASPNETCORE_ENVIRONMENT với giá trị 'Phân đoạn' (bạn có thể thực hiện bằng cách đăng nhập với tư cách người dùng này hoặc thông qua regedit)
  3. Quay lại với tư cách quản trị viên trong trình quản lý IIS, tìm Nhóm ứng dụng trong đó web Staging đang chạy và trong Cài đặt nâng cao, đặt Danh tính cho người dùng StagingPool .
  4. Ngoài ra bộ tải tài hồ sơ để thực , vì vậy các biến môi trường được nạp. <- rất quan trọng!
  5. Đảm bảo StagingPool có quyền truy cập vào thư mục web và Dừng và Bắt đầu Nhóm ứng dụng.

Bây giờ, trang web Staging nên đặt Tên môi trường thành 'Phân đoạn'.

Cập nhật: Trong Windows 7+, có một lệnh có thể đặt các biến môi trường từ dấu nhắc CMD cũng cho một người dùng được chỉ định. Kết quả này giúp cộng với các mẫu:

>setx /?

1
Dường như trong ASP.NET 5 RC1, biến môi trường đã được đổi thành Hosting: Môi trường.
Grady Werner

Làm cách nào để chúng tôi đặt "Tải hồ sơ người dùng" thành đúng khi chúng tôi triển khai ứng dụng này lên Azure Web App?
Puneet Ghanshani

@PunitGanshani Theo tôi hiểu, có một phần "cài đặt ứng dụng" trong cổng thông tin azure cho ứng dụng web nơi bạn có thể đặt các cặp khóa / giá trị môi trường: azure.microsoft.com/en-us/documentation/articles/ tựa
drpdrp

@GradyWerner Đối với RC2, họ đang thay đổi nó (tính đến thời điểm hiện tại) thành ASPNET_ENVIRONMENT ;-)
b.pell

1
@ b.pell Có vẻ như bây giờ là ASPNETCORE_ENVIRONMENT :)
Đánh dấu G

11

Bạn có thể chuyển một cách mong muốn ASPNETCORE_ENVIRONMENTvào lệnh xuất bản dotnet dưới dạng đối số bằng cách sử dụng:

/p:EnvironmentName=Staging

ví dụ:

dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

Điều này sẽ tạo ra web.config với môi trường chính xác được chỉ định cho dự án của bạn:

<environmentVariables>
  <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
</environmentVariables>

9

Ngoài các tùy chọn được đề cập ở trên, có một vài Giải pháp khác hoạt động tốt với việc triển khai tự động hoặc yêu cầu ít thay đổi cấu hình hơn.

1. Sửa đổi tệp dự án (.CsProj)

MSBuild hỗ trợ EnvironmentNameThuộc tính có thể giúp đặt biến môi trường phù hợp theo Môi trường bạn muốn Triển khai. Tên môi trường sẽ được thêm vào web.config trong giai đoạn Xuất bản.

Chỉ cần mở tệp dự án (* .csProj) và thêm XML sau.

<!-- Custom Property Group added to add the Environment name during publish
  The EnvironmentName property is used during the publish for the Environment variable in web.config
  -->
  <PropertyGroup Condition=" '$(Configuration)' == '' Or '$(Configuration)' == 'Debug'">
    <EnvironmentName>Development</EnvironmentName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' != '' AND '$(Configuration)' != 'Debug' ">
    <EnvironmentName>Production</EnvironmentName>
  </PropertyGroup>

Mã ở trên sẽ thêm tên môi trường như Developmentcho cấu hình Gỡ lỗi hoặc nếu không có cấu hình nào được chỉ định. Đối với bất kỳ Cấu hình nào khác, tên Môi trường sẽ nằm Productiontrong tệp web.config được tạo. Thêm chi tiết tại đây

2. Thêm thuộc tính môi trường tên trong hồ sơ xuất bản.

Chúng tôi có thể thêm <EnvironmentName>tài sản trong hồ sơ xuất bản là tốt. Mở tệp hồ sơ xuất bản được đặt tại Properties/PublishProfiles/{profilename.pubxml}Điều này sẽ đặt tên Môi trường trong web.config khi dự án được xuất bản. Thêm chi tiết tại đây

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

3. Tùy chọn dòng lệnh sử dụng xuất bản dotnet

Ngoài ra, chúng ta có thể chuyển thuộc tính EnvironmentNamedưới dạng tùy chọn dòng lệnh cho dotnet publishlệnh. Lệnh sau sẽ bao gồm biến môi trường như Developmenttrong tệp web.config.

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development


7

Để mở rộng câu trả lời của @ tredder, bạn có thể thay đổi môi trường Biến bằng cách sử dụng appcmd

Dàn dựng

%windir%\system32\inetsrv\appcmd set config "staging.example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging'] /commit:APPHOST

Sản xuất

%windir%\system32\inetsrv\appcmd set config "example.com" /section:system.webServer/aspNetCore /+environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production'] /commit:APPHOST


Đây là cách thực hiện điều tương tự với Powershell trên máy chủ xây dựng mà không cần cài đặt IIS. gist.github.com/markarnott/c4aec1fc544fe89e2bd21f3f00d78933
Mark Arnott

Chỉ định "staging.example.com" hoặc "example.com" sẽ chỉ áp dụng biến cho các trang web cụ thể đó. Bỏ qua điều đó sẽ tạo ra một biến toàn cục cho tất cả các trang web trên máy chủ.
deadlydog

6

Những gì bạn cần biết ở một nơi:

  • Đối với các biến môi trường để ghi đè bất kỳ cài đặt cấu hình nào, chúng phải được thêm tiền tố ASPNETCORE_.
  • Nếu bạn muốn khớp các nút con trong cấu hình JSON của mình, hãy sử dụng :làm dấu phân cách. Nếu nền tảng không cho phép dấu hai chấm trong các khóa biến môi trường, __thay vào đó hãy sử dụng .
  • Bạn muốn cài đặt của bạn kết thúc ApplicationHost.config. Sử dụng Trình chỉnh sửa cấu hình IIS sẽ khiến các đầu vào của bạn được ghi vào ứng dụng Web.config- và sẽ bị ghi đè với lần triển khai tiếp theo!
  • Để sửa đổi ApplicationHost.config, bạn muốn sử dụng appcmd.exeđể đảm bảo các sửa đổi của bạn nhất quán. Thí dụ:%systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_AWS:Region',value='eu-central-1']" /commit:site

  • Các ký tự không an toàn URL có thể được thoát dưới dạng Unicode, như %u007bđối với dấu ngoặc trái.

  • Để liệt kê các cài đặt hiện tại của bạn (kết hợp với các giá trị từ Web.config): %systemroot%\system32\inetsrv\appcmd.exe list config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore
  • Nếu bạn chạy lệnh để đặt khóa cấu hình nhiều lần cho cùng một khóa, nó sẽ được thêm nhiều lần! Để loại bỏ một giá trị hiện có, sử dụng một cái gì đó như %systemroot%\system32\inetsrv\appcmd.exe set config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore /-"environmentVariables.[name='ASPNETCORE_MyKey',value='value-to-be-removed']" /commit:site.

1
lưu ý rằng với /commit:sitecác thay đổi được ghi trong web.config, để lưu chúng trong ApplicationHost.configmột thay đổi nên sử dụng/commit:apphost
Angel Yordanov

-section:system.webServer/aspNetCore /-"environmentVariables.(trừ đi để loại bỏ biến môi trường) không được thực thi trong quá trình phát hành Azure. Lỗi là hresult:80070032, message:Command execution failed. Tuy nhiên clear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:sitehoạt động tốt. Nó xóa toàn bộ phần aspNetCore cho trang web nhưng nó không phải là vấn đề vì nó được tham số hóa trong quá trình phát hành.
oleksa

6

Tương tự như các câu trả lời khác, tôi muốn đảm bảo cài đặt môi trường ASP.NET Core 2.1 của tôi vẫn tồn tại trong suốt quá trình triển khai, nhưng cũng chỉ áp dụng cho trang web cụ thể.

Theo tài liệu của Microsoft, có thể đặt biến môi trường trên nhóm ứng dụng bằng lệnh PowerShell sau trong IIS 10:

$appPoolName = "AppPool"
$envName = "Development"
cd "$env:SystemRoot\system32\inetsrv"
.\appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='$appPoolName'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='$envName']" /commit:apphost

Thật không may, tôi vẫn phải sử dụng IIS 8.5 và nghĩ rằng mình đã hết may mắn. Tuy nhiên, vẫn có thể chạy tập lệnh PowerShell đơn giản để đặt giá trị biến môi trường dành riêng cho trang web cho ASPNETCORE_ENVIRONMENT:

Import-Module -Name WebAdministration
$siteName = "Site"
$envName = "Development"
Set-WebConfigurationProperty -PSPath IIS:\ -Location $siteName -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = $envName }

5

Giải pháp @tredder với chỉnh sửa applicationhost.config là giải pháp hoạt động nếu bạn có một số ứng dụng khác nhau nằm trong các thư mục ảo trên IIS.

Trường hợp của tôi là:

  • Tôi có dự án API và dự án APP , trong cùng một tên miền, được đặt trong các thư mục ảo khác nhau
  • Trang gốc XXX dường như không truyền bá biến ASPNETCORE_ENVIRONMENT cho con của nó trong các thư mục ảo và ...
  • ... Tôi không thể đặt các biến trong thư mục ảo như @NickAb đã mô tả (có lỗi Yêu cầu không được hỗ trợ. (Ngoại lệ từ HRESULT: 0x80070032) trong khi lưu các thay đổi trong Trình chỉnh sửa cấu hình):
  • Đi sâu vào applicationHost.config và tự tạo ra các nút như thế này:

    <location path="XXX/app"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location> <location path="XXX/api"> <system.webServer> <aspNetCore> <environmentVariables> <clear /> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore> </system.webServer> </location>

và khởi động lại IIS đã thực hiện công việc.


0

Để có được thông tin chi tiết về lỗi, tôi đã phải thêm ASPNETCORE_ENVIRONMENTbiến môi trường cho Nhóm ứng dụng tương ứng system.applicationHost/applicationPools .

Lưu ý: ứng dụng web trong trường hợp của tôi là ASP.NET Core 2ứng dụng web được lưu trữ trên IIS 10. Nó có thể được thực hiện thông qua Configuration Editortrong IIS Manager(xem Editing Collections với Configuration Editor để tìm ra nơi để tìm trình soạn thảo này trong IIS Manager).


0

Tôi đã tạo một kho lưu trữ để xuất bản IIS với cấu hình môi trường trong Web.config.

https://github.com/expressiveco/AspnetCoreWebConfigForEn Môi trường

  • Thiết lập
    • Lấy các phần từ các tệp .csproj và .user.csproj vào các tệp dự án của bạn.
    • Nhận các tệp MyAspNetEn môi.props, web.development.config và web.production.config.
  • Cấu hình
    • Thay đổi giá trị của thuộc tính ASPNETCORE_ENVIRONMENT trong user.csproj một cách phù hợp.

Điều này dường như không cung cấp một câu trả lời chất lượng cho câu hỏi. Vui lòng chỉnh sửa câu trả lời của bạn thêm chi tiết tổng thể của giải pháp này, hoặc chỉ cần xóa nó và đăng nó dưới dạng nhận xét cho câu hỏi. Cảm ơn!
sɐunıɔ qɐp

0

Tôi đã sửa đổi câu trả lời mà @Christian Del Bianco được đưa ra. Bây giờ tôi đã thay đổi quy trình cho .net core 2 trở lên dưới dạng tệp project.json.

  1. Đầu tiên, tạo tập tin appsinstall.json trong thư mục gốc. với nội dung

      {
         // Possible string values reported below. When empty it use ENV 
            variable value or Visual Studio setting.
         // - Production
         // - Staging
         // - Test
        // - Development
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
    
  2. Sau đó, tạo một tập tin hai thiết lập appsettings.Development.jsonappsettings.Production.json với cấu hình cần thiết.

  3. Thêm mã cần thiết để thiết lập môi trường vào tệp Program.cs .

    public class Program
    {
    public static void Main(string[] args)
    {
        var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    
      ***var currentDirectoryPath = Directory.GetCurrentDirectory();
        var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
        var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
        var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();***
    
        try
        {
            ***CreateWebHostBuilder(args, enviromentValue).Build().Run();***
        }
        catch (Exception ex)
        {
            //NLog: catch setup errors
            logger.Error(ex, "Stopped program because of setup related exception");
            throw;
        }
        finally
        {
            NLog.LogManager.Shutdown();
        }
    }
    
    public static IWebHostBuilder CreateWebHostBuilder(string[] args, string enviromentValue) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            })
            .UseNLog()
            ***.UseEnvironment(enviromentValue);***
    

    }

  4. Thêm envsettings.json để bạn csproj tập tin cho copy vào thư mục xuất bản.

       <ItemGroup>
            <None Include="envsettings.json" CopyToPublishDirectory="Always" />
        </ItemGroup>
    
  5. Bây giờ chỉ cần thay đổi ASPNETCORE_ENVIRONMENT như bạn muốn trong tệp envsinstall.json và được xuất bản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.