2016-11-22 13 views
10

Tôi có ứng dụng web ASP.NET lõi. Tôi đã định cấu hình ứng dụng web trên máy chủ web của chúng tôi và đặt biến số ASPNETCORE_ENVIRONMENT thành Development. Tôi đặt biến này ở mức máy như được hiển thị trong hình bên dưới. Bây giờ trên cùng một máy tôi muốn cấu hình một ví dụ khác của ứng dụng web giống như môi trường Staging.Làm thế nào để cấu hình mutilple ASPNETCORE_ENVIRONMENT trên cùng một máy?

Tùy chọn của tôi ở đây để đặt ASPNETCORE_ENVIRONMENT ở cấp ứng dụng thay vì cấp máy là gì? vì vậy tôi có thể lưu trữ nhiều phiên bản của cùng một ứng dụng trên cùng một máy?

enter image description here

enter image description here

+0

Dự án của bạn được xây dựng và triển khai như thế nào? Có lẽ bạn có thể xem xét để truyền một tiền tố môi trường hệ thống cho hệ thống của bạn trong quá trình xây dựng hoặc triển khai dự án. Vì vậy, họ có thể sử dụng tiền tố biến môi trường khác nhau để có được giá trị môi trường. – Ricky

Trả lời

8

Bạn có một vài lựa chọn.

  1. Chạy từng ứng dụng với tư cách người dùng khác và đặt biến môi trường trong hồ sơ người dùng đó. Điều này mang lại cho bạn một tiền thưởng bảo mật bổ sung tốt đẹp. Bạn sẽ phải đặt nhóm ứng dụng để tải hồ sơ người dùng.

  2. Sử dụng IIS cấu hình

    1. Bắt đầu IIS manager
    2. Chọn soạn thảo cấu hình Kéo xuống combobox phần và chọn system.webServer/aspNetCore
    3. Kéo xuống từ combobox và chọn Applicationhost.config
    4. Nhấp vào thành phần environmentVariables và nhấp vào nút ... ẩn trong đồng thứ hai lumn, ở bên phải.
    5. Đặt biến môi trường của bạn.
    6. Thoát khỏi màn hình biến môi trường và sau đó nhấp vào Áp dụng.
    7. Khởi động lại ứng dụng/hồ bơi.
+1

Để bổ sung cho giải pháp # 1: 1.1 Tạo người dùng mới, 1.2 Đăng nhập và chuyển đến Tài khoản người dùng - 1.3 Nhấp vào "Đặt biến env", 1.4 Đăng nhập lại người dùng chính của bạn và đi tới IIS, 1.5 Chọn hồ bơi của trang web bạn muốn thay đổi, 1.6 Đặt người dùng, 1.7 trong tùy chọn nâng cao, đặt "tải hồ sơ người dùng" = true – Jean

+2

Tôi đã sử dụng giải pháp 2 – LP13

1

Bạn có thể thay đổi các phân tích cú pháp cấu hình mã chạy trên máy chủ web? Đó là những gì tôi muốn giới thiệu. Điều đó sẽ cho phép bạn cấu hình môi trường tự nhiên hơn trong cài đặt Windows.

Trong khi cách truyền thống để định cấu hình biến số IHostingEnvironment.EnvironmentName là qua biến môi trường ASPNETCORE_ENVIRONMENT như bạn đã làm, bạn có thể thay đổi cách ASP.NET Core phân tích cấu hình của nó sao cho bạn có thể đặt biến thông qua đối số dòng lệnh.

Để nhận được vào chi tiết cụ thể ...

Theo mặc định, các tập tin Program.cs phát ra bởi lệnh dotnet new -t web trông giống như sau:

public static void Main(string[] args) { 
    var host = new WebHostBuilder() 
     .UseKestrel() 
     .UseUrls("http://0.0.0.0:5000") 
     .UseContentRoot(Directory.GetCurrentDirectory()) 
     .UseIISIntegration() 
     .UseStartup<Startup>() 
     .Build(); 

    host.Run(); 
} 

Điều này làm cho ASP.NET Lõi sử dụng the default configuration processing (environment variables with a ASPNETCORE_ prefix) để xác định giá trị của IHostingEnvironment.EnvironmentName, mà bạn đang sử dụng để định cấu hình cách ứng dụng của bạn chạy.

May mắn thay, bạn có thể thay đổi cách ASP.Cấu hình phân tích cú pháp lõi bằng cách sử dụng UseConfiguration() extension method on WebHostBuilder. Dưới đây là một ví dụ của việc sử dụng cấu hình tùy chỉnh với việc thực hiện mặc định:

public static void Main(string[] args) { 
     var configuration = 
      new ConfigurationBuilder() 
       .AddEnvironmentVariables("ASPNETCORE_") 
       .Build(); 

     var host = 
      new WebHostBuilder() 
       .UseConfiguration(configuration) 
       .UseKestrel() 
       .UseUrls("http://0.0.0.0:5000") 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

     host.Run(); 
    } 

Từ đây, tôi sẽ thay đổi nó để nó có thể sử dụng dòng lệnh ngoài các ASPNETCORE_ biến môi trường tiền tố. Điều này sẽ cho phép bạn dễ dàng chạy ứng dụng của bạn với bất cứ tên môi trường bạn muốn, như vậy:

public static void Main(string[] args) { 
     var configuration = 
      new ConfigurationBuilder() 
       .AddEnvironmentVariables("ASPNETCORE_") 
       .AddCommandLine(args) 
       .Build(); 

     var host = 
      new WebHostBuilder() 
       .UseConfiguration(configuration) 
       .UseKestrel() 
       .UseUrls("http://0.0.0.0:5000") 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

     host.Run(); 
    } 

Sau đó, khi bạn bắt đầu ứng dụng cốt lõi DotNet bạn với dotnet run, bạn có thể thiết lập các môi trường trên dòng lệnh, như thế này :

dotnet run environment=development 
dotnet run environment=staging 

Biến môi trường vẫn sẽ được tôn trọng nhưng bạn có thể ghi đè lên qua dòng lệnh khi bạn đang phát triển địa phương. Lưu ý, bạn sẽ cần phải bao gồm gói gói Microsoft.Extensions.Configuration.CommandLine vào tệp project.json nếu bạn chưa làm như vậy để có phương thức mở rộng AddCommandLine().

+0

Tôi thực sự không muốn chạy ứng dụng của mình bằng cách sử dụng lệnh như trong quá trình sản xuất. Ứng dụng đang chạy dưới IIS. Tôi đã sử dụng giải pháp @blowdart thứ hai – LP13

+0

dotnet chạy không nhất thiết là những gì mọi người đang sử dụng để chạy ứng dụng. Vì vậy, cách tiếp cận này bị hỏng khi, ví dụ, lưu trữ trên IIS, hoặc trực tiếp tạo ra quá trình chỉ sau kestrel. – joey

Các vấn đề liên quan