পরিবেশ পরিবর্তনশীল সেট করে আইআইএস-এ প্রকাশ করুন


134

এই দুটি প্রশ্ন / উত্তরগুলি পড়তে আমি আইআইএস 8.5 সার্ভারে একটি এসপিএন 5 অ্যাপ চালাতে সক্ষম হয়েছি।

Asp.net vNext প্রারম্ভিক বিটা উইন্ডোজ সার্ভারে আইআইএস-এ প্রকাশিত

আইআইএস-এ কাজ করার জন্য কীভাবে একটি এমভিসি 6 অ্যাপ্লিকেশন কনফিগার করবেন?

সমস্যাটি হ'ল আইআইএস চালানোর সময়ও ওয়েব অ্যাপ্লিকেশনটি env.EnvironmentNameমান সহ ব্যবহার করছে Development

এছাড়াও, আমি একই সার্ভারে একই ওয়েবের দুটি সংস্করণ (মঞ্চায়ন, উত্পাদন) চালাতে চাই, সুতরাং প্রতিটি ওয়েবের জন্য পৃথকভাবে ভেরিয়েবল সেট করার জন্য আমার একটি পদ্ধতি প্রয়োজন need

কিভাবে এই কাজ করতে?


4
একটিতে সাধারণত তিনটি নেটওয়ার্ক পরিবেশ বিকাশ, মঞ্চায়ন এবং উত্পাদন থাকে। ওয়েব সার্ভার এক পরিবেশে। সুতরাং সার্ভারের জন্য সিস্টেম এনভায়রনমেন্ট ভেরিয়েবল সেট করা সাধারণত কোনও বাস্তব বাধা নয়। একটি এখনও ভিজ্যুয়াল স্টুডিওতে ডিবাগিংয়ের জন্য অন্য পরিবেশের অনুকরণ করতে ব্যবহার Properties\launchSettings.jsonকরতে পারে ।
ওলেগ

উত্তর:


286

এই উত্তরটি মূলত এএসপি.নেট কোর আরসি 1 এর জন্য লেখা হয়েছিল। আরসি 2 এএসপি.নেট কোর জেনেরিক httpPlafrom হ্যান্ডলার থেকে নির্দিষ্ট এপনেটরে সরানো হয়েছে। নোট করুন যে পদক্ষেপ 3 আপনি ব্যবহার করছেন এএসপি.নেট কোর এর সংস্করণটির উপর নির্ভর করে।

ASP.NET কোর প্রকল্পগুলির জন্য পরিবেশের ভেরিয়েবলগুলি পরিণত হয় ব্যবহারকারীর জন্য পরিবেশের ভেরিয়েবল সেট না করে বা একাধিক কমান্ড এন্ট্রি তৈরি না করেই সেট করা যেতে পারে।

  1. আইআইএসে আপনার অ্যাপ্লিকেশনটিতে যান এবং চয়ন করুন Configuration Editor
  2. নির্বাচন করা Configuration Editor
  3. চয়ন করুন system.webServer/aspNetCore(RC2 এবং RTM) অথবা system.webServer/httpPlatformমধ্যে (RC1) Sectionকম্বো
  4. চয়ন করুন Applicationhost.config ...মধ্যে Fromকম্বো।
  5. enviromentVariablesউপাদানটিতে রাইট ক্লিক করুন 'environmentVariables' element, তারপরে নির্বাচন করুন Edit Itemsএখানে চিত্র বর্ণনা লিখুন
  6. আপনার পরিবেশের ভেরিয়েবল সেট করুন।
  7. উইন্ডোটি বন্ধ করে প্রয়োগ করুন ক্লিক করুন।
  8. সম্পন্ন

এইভাবে আপনাকে আপনার পুলের জন্য বিশেষ ব্যবহারকারী তৈরি করতে হবে না বা অতিরিক্ত কমান্ড এন্ট্রি প্রবেশ করতে হবে না project.json। এছাড়াও, প্রতিটি পরিবেশ বিরতির জন্য বিশেষ কমান্ড যুক্ত করে "একবার তৈরি করুন, বহুবার স্থাপন করুন" হিসাবে আপনাকে dnu publishপ্রতিটি পরিবেশের জন্য পৃথকভাবে কল করতে হবে , একবার প্রকাশের পরিবর্তে এবং ফলস্বরূপ নিদর্শনটি বহুবার স্থাপন করা উচিত।

আরসি 2 এবং আরটিএম এর জন্য আপডেট হয়েছে, মার্ক জি এবং ট্রেডারকে ধন্যবাদ।


12
৩ য় ধাপের system.webServer/aspNetCoreপরিবর্তে আমি এর পরিবর্তে ব্যবহার করেছি ।
জি

1
সিস্টেম এনভায়রনমেন্ট ভেরিয়েবলগুলি শুরুতে প্রক্রিয়াগুলির দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়। সুতরাং আপনি যদি আপনার অ্যাপ্লিকেশন চলাকালীন কিছু env পরিবর্তনশীল পরিবর্তন করেন তবে আপনি এই পরিবর্তনগুলি ডিফল্টরূপে দেখতে পারবেন না। সিস্টেম এনভির বিভিন্ন পরিবর্তনগুলি কার্যকর হওয়ার জন্য আপনার আইআইএস প্রক্রিয়াগুলি কীভাবে তৈরি করে তার উপর নির্ভর করে আপনাকে কমপক্ষে সাইটটি পুনরায় আরম্ভ করতে হবে, সম্ভবত পুল, এমনকি আইআইএস পরিষেবাও। এটি পরীক্ষা করা দরকার।
নিকআব

7
কনফিগারেশন সম্পাদকের মাধ্যমে যুক্ত সেটিংসগুলি কি পরবর্তী স্থাপনায় মুছে যাবে না?
ব্র্যাড গার্ডনার

11
@ ব্র্যাড-গার্ডনার যদি ওয়েবকনফিগের পরিবর্তে অ্যাপ্লিকেশনহোস্ট.কনফিগে পরিবর্তন করা হয় তবে মোতায়েনের মধ্যে পরিবর্তনগুলি বহাল থাকবে।
নিকআব

15
Asp.Net Core 2.0 এর জন্য কাজ করে
ফ্রাঙ্ক ক্যানন

34

আপডেট web.config একটি সঙ্গে <environmentVariables> অধীনে অধ্যায় <aspNetCore>

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

অথবা ওয়েবকনফিগটি ওভাররাইট করার সময় এই সেটিংটি হারাতে এড়াতে, অ্যাপ্লিকেশন হোস্টকনফাইগের অনুরূপ পরিবর্তনগুলি করুন যেমন সাইটের অবস্থান @ নিকাবের পরামর্শ অনুসারে উল্লেখ করে।

<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
এটি আপনার ওয়েলকনফিগ প্রকল্পের একটি অংশ এবং ভিসিএস-এ সংস্করণিত হয়েছে এমনভাবে এটি আলাদা। আপনার যদি প্রোড, স্টেজিং, ডেভের মতো একাধিক পরিবেশ থাকে তবে আপনার প্রত্যেকটির জন্য ওয়েবকনফিগকে রূপান্তর করার জন্য কিছু উপায়ের প্রয়োজন হবে। আইআইএস-এ অ্যাপ্লিকেশনহোস্টকনফিগ পরিবর্তন করা কেবল এই আইআইএসকেই প্রভাবিত করে। যাতে আপনি আপনার ভিসিএস এবং আইআইএস-এর নির্দিষ্ট পরিবেশ এনভায়রনমেন্ট ভেরিয়েবলগুলিতে ওয়েবকনফিগ ভেরিয়েবলগুলিকে ওভাররাইড করে এমন একক ওয়েবকনফিগ রাখতে পারেন। অ্যাপ্লিকেশনহস্ট.কনফিগটি পাওয়ারশেল iis.net/learn/manage/powershell/…
নিকআব

ধন্যবাদ @ নিকআব, যা প্রতিটি মোতায়েন করা ওয়েবকনফিগ আপডেট করতে এড়িয়ে চলে। আমি আমার উত্তর আপডেট করেছি।
ট্রেভর ড্যানিয়েলস

পাওয়ারশেল থেকে এটি করতে আমার সমস্যা হচ্ছে আমি Target configuration object '/system.webServer/aspNetCore/environmentVariables/environmentVariable is not found ... সাধারণত কিছু পরিবর্তনশীল সেট করতে থাকি আমি এই জাতীয় কিছু লিখব: Set-WebConfigurationProperty -PSPath IIS:\ -location example.com -filter /system.webServer/aspNetCore/environmentVariables/environmentVariable -name ASPNETCORE_ENVIRONMENT -value Staging আমি কী মিস করছি?
খ্রিস্টান

আমি যা জানতাম তার appcmdপরিবর্তে ফিরে গিয়েছিলাম এবং পরিবর্তে ব্যবহার করেছি ।
খ্রিস্টান

@ ক্রিশ্চিয়ান, এই উত্তরটি দেখুন: স্ট্যাকওভারফ্লো.com/ a / 50869935 / 33533 পরিবেশের পরিবর্তনশীল নাম এবং মান একটি হ্যাশ টেবিলের মধ্যে রয়েছে, সুতরাং আপনার উদাহরণ থেকে এটি হবেSet-WebConfigurationProperty -PSPath IIS:\ -Location example.com -Filter /system.webServer/aspNetCore/environmentVariables -Name . -Value @{ Name = 'ASPNETCORE_ENVIRONMENT'; Value = 'Staging' }
কার্টিস বুয়েস

21

সম্পাদনা করুন: আরসি 2 এবং আরটিএম রিলিজ হিসাবে, এই পরামর্শটি পুরানো। মুক্তির ক্ষেত্রে এটি সফল করার জন্য আমি যেভাবে খুঁজে পেয়েছি তা হ'ল প্রতিটি পরিবেশের জন্য আইআইএস-এ নিম্নলিখিত ওয়েবকনফিগ বিভাগগুলি সম্পাদনা করা:

system.webServer/aspNetCore:

পরিবেশ পরিবর্তনযোগ্য এন্ট্রি সম্পাদনা করুন এবং পরিবেশ পরিবর্তনশীল সেটিং যুক্ত করুন:

ASPNETCORE_ENVIRONMENT : < Your environment name >


ড্রপডিআরপি-র পদ্ধতির বিকল্প হিসাবে আপনি নিম্নলিখিতগুলি করতে পারেন:

  • আপনার প্রজেক্ট.জসনে, ক্যাসরেলকে সরাসরি ASPNET_ENV ভেরিয়েবল পাস করার আদেশগুলি যুক্ত করুন:

    "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"
    }
    
  • প্রকাশের সময়, --iis-commandপরিবেশ নির্দিষ্ট করার জন্য বিকল্পটি ব্যবহার করুন :

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

আমি অতিরিক্ত আইআইএস ব্যবহারকারী তৈরি করার চেয়ে এই পদ্ধতিকে কম অনুপ্রবেশকারী বলে মনে করেছি।


11
আপনি যদি ভিজ্যুয়াল স্টুডিওর এমএসডিপ্লয়ের মাধ্যমে প্রকাশ করছেন। তারপরে আপনি আপনার .pubxML ফাইলে <আইআইএসকম্যান্ড> স্টেজিং </ iISCommand> রাখতে পারেন এবং এটি নির্দিষ্ট আইআইএস কমান্ড ব্যবহার করে স্থাপন করা হবে যদিও আপনি প্রকাশনা ইউআইতে এটি নির্দিষ্ট করতে পারবেন না।
ডিন উত্তর

@ ডিয়াননর্থ - এটি সোনার !! চ্যাম্পের মতো কাজ করে! ভাগ করে নেওয়ার জন্য ধন্যবাদ!
এস রাসমুসেন

17

আইআইএস ওয়েব সার্ভারে আমার ওয়েব অ্যাপ্লিকেশনগুলি (উত্পাদন, স্ট্যাগিং, পরীক্ষা) হোস্ট করা আছে। সুতরাং ASPNETCORE_ENVIRONMENT অপারেটিভ সিস্টেম সিস্টেম এনভায়ারমেন্ট ভেরিয়েবলের উপর নির্ভর করা সম্ভব ছিল না, কারণ এটি একটি নির্দিষ্ট মান হিসাবে সেট করা (উদাহরণস্বরূপ STAGING) অন্য অ্যাপ্লিকেশনগুলিতে প্রভাব ফেলে।

কাজের আশেপাশে, আমি আমার ভিজ্যুজিস্টুডিও সমাধানের মধ্যে একটি কাস্টম ফাইল (এনভ্যাসেটেটিং.জসন) সংজ্ঞায়িত করেছি:

এখানে চিত্র বর্ণনা লিখুন

নিম্নলিখিত বিষয়বস্তু সহ:

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

তারপরে, আমার অ্যাপ্লিকেশন ধরণের (উত্পাদন, স্টেজিং বা টেস্ট) ভিত্তিতে আমি এই ফাইলটি যথাযথভাবে সেট করেছিলাম: মনে করুন যে আমি টেস্ট অ্যাপ্লিকেশন নিযুক্ত করছি, আমার কাছে থাকবে:

"ASPNETCORE_ENVIRONMENT": "Test"

তারপরে, প্রোগ্রাম.স ফাইলগুলিতে এই মানটি পুনরুদ্ধার করুন এবং তারপরে ওয়েব হোস্টবিল্ডারের পরিবেশ নির্ধারণ করুন:

    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();
        }
    }

মনে রাখবেন envsettings.json প্রকাশের বিভাগগুলিতে অন্তর্ভুক্ত (প্রকল্প.জসন):

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

এই সমাধানটি আমাকে এএসপি.নেট কোর অ্যাপ্লিকেশনটি একই আইআইএস-এ হোস্ট করাতে মুক্ত করে তোলে, উদ্ভাসিত ভেরিয়েবল মান থেকে স্বাধীন।


খুব সুন্দর, আমি পরিবর্তনের জন্য প্রস্তাবিত একমাত্র পরিবর্তন হ'ল অদলবদল বর্তমান ডায়রেক্টরিপথ = ডিরেক্টরি ..গেটকর্ন্টডাইরেক্টরি (); current for current currentDory current current current current current currentformS current current; current current current current current current current current currentirect currentirect current currentirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirectirect Pla Pla Pla Pla Pla Pla Pla;;; Pla;;;;;;;;;;;;;;;;;;;;;;;;;;; ;D ;DDDDDDDDDD;;;;;;;;;;;;;;; ;AppAppAppAppAppAppAppAppAppAppAppAppAppAppAppAppaseaseaseaseaseaseaseaseপ্যাসপ্যাথ; বর্তমান দির পেতে এটি অনেক বেশি নিরাপদ উপায়।
পিটার কোটাস

7
বক্সের অভিজ্ঞতা থেকে কী দুর্দান্ত, যখন কোনও ফ্রেমওয়ার্কের কনফিগারেশন পরিচালনা করতে আপনাকে যখন অন্য একটি স্তর তৈরি করতে হয়
কুগেল

16

ব্যাপক গুগল করার পরে আমি একটি কার্যনির্বাহী সমাধান পেয়েছি, যার দুটি ধাপ রয়েছে।

প্রথম পদক্ষেপটি হ'ল সিস্টেম ওয়াইড এনভায়রনমেন্ট ভেরিয়েবল এএসপিএনইএনইএনভি উত্পাদন এবং উইন্ডোজ সার্ভার পুনরায় চালু করতে সেট করা । এর পরে, সমস্ত ওয়েব অ্যাপ্লিকেশনগুলি পরিবেশনাম হিসাবে 'উত্পাদন' মান পাচ্ছে।

দ্বিতীয় পদক্ষেপ (ওয়েব স্টেজিংয়ের জন্য 'স্টেজিং' মান সক্ষম করার জন্য) সঠিকভাবে কাজ করা আরও কঠিন ছিল, তবে এখানে এটি রয়েছে:

  1. নতুন উইন্ডোজ ব্যবহারকারী তৈরি করুন, উদাহরণস্বরূপ সার্ভারে স্টেজিংপুল
  2. এই ব্যবহারকারীর জন্য, 'স্টেজিং' মান সহ নতুন ব্যবহারকারী পরিবর্তনশীল ASPNETCORE_ENVIRONMENT তৈরি করুন (আপনি এই ব্যবহারকারী হিসাবে লগ ইন করে বা রেজিডিটের মাধ্যমে এটি করতে পারেন)
  3. আইআইএস ম্যানেজারের অ্যাডমিন হিসাবে ফিরে আসুন, অ্যাপ্লিকেশন পুলটি আবিষ্কার করুন যার অধীনে স্টেজিং ওয়েব চলছে এবং অ্যাডভান্সড সেটিংসে ব্যবহারকারী স্টেজিংপুলের পরিচয় সেট করে ।
  4. সেট লোড ব্যবহারকারী প্রোফাইল থেকে সত্য , তাই পরিবেশের লোড করা হয়। <- খুব গুরুত্বপূর্ণ!
  5. নিশ্চিত করুন যে স্টেজিংপুলের ওয়েব ফোল্ডারে অ্যাক্সেসের অধিকার রয়েছে এবং অ্যাপ্লিকেশন পুলটি বন্ধ করুন এবং শুরু করুন।

এখন স্টেজিং ওয়েবে এনভায়রনমেন্ট নেমটি 'স্টেজিং' এ সেট করা উচিত।

আপডেট: উইন্ডোজ 7+ এ একটি কমান্ড রয়েছে যা একটি নির্দিষ্ট ব্যবহারকারীর জন্য সিএমডি প্রম্পট থেকে পরিবেশের ভেরিয়েবল সেট করতে পারে। এই আউটপুট সাহায্যে আরও নমুনা:

>setx /?

1
এটি উপস্থিত হয় যে ASP.NET 5 আরসি 1 তে, পরিবেশের পরিবর্তনশীলটি হোস্টিং: পরিবেশে পরিবর্তন করা হয়েছিল।
গ্রেডি ওয়ার্নার

যখন আমরা এটি অ্যাজুরে ওয়েব অ্যাপে স্থাপন করি তখন আমরা কীভাবে "লোড ব্যবহারকারী প্রোফাইল" সেট করব?
পুনেতে ঘনশানী

@ পানিতগনশানী যেমনটি আমি বুঝতে পেরেছি, ওয়েব অ্যাপের জন্য আজুর
us

@ গ্রেডি ওয়ার্নার আরসি 2 এর জন্য তারা এটিকে (এখন অবধি) এএসপিএনইএনএসইএনওইআরএনএমএন ;-) -তে পরিবর্তন করছে
বি.পিএল

1
@ বি.পেল এটি উপস্থিত হওয়ায় এটি এখন এএসপিএনটিকোরি_ইএনইভিওরএনএনটি :)
মার্ক জি

11

আপনি বিকল্প ASPNETCORE_ENVIRONMENTহিসাবে আর্গুমেন্ট হিসাবে ডটনেট প্রকাশ কমান্ডে কাঙ্ক্ষিতভাবে পাস করতে পারেন :

/p:EnvironmentName=Staging

উদাহরণ:

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

এটি আপনার প্রকল্পের জন্য নির্দিষ্ট পরিবেশের সাথে ওয়েবকনফিগ তৈরি করবে:

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

9

উপরে উল্লিখিত বিকল্পগুলি ব্যতীত অন্যান্য কয়েকটি সমাধান রয়েছে যা স্বয়ংক্রিয় মোতায়েনের সাথে ভাল কাজ করে বা কম কনফিগারেশন পরিবর্তন প্রয়োজন।

1. প্রকল্পের ফাইল (.সিএসপ্রোজ) ফাইলটি পরিবর্তন করা

এমএসবাইল্ড সেই EnvironmentNameসম্পত্তিটিকে সমর্থন করে যা আপনার পরিবেশ মোতায়েন করতে চান সেই পরিবেশ অনুযায়ী সঠিক পরিবেশের পরিবর্তনশীল সেট করতে সহায়তা করতে পারে। পরিবেশের নামটি প্রকাশের পর্যায়ে ওয়েবকনফাইগে যুক্ত করা হবে।

কেবল প্রজেক্ট ফাইলটি (* .csProj) খুলুন এবং নিম্নলিখিত XML যুক্ত করুন।

<!-- 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>

উপরের কোডে Developmentডিবাগ কনফিগারেশন বা কনফিগারেশন নির্দিষ্ট না থাকলে পরিবেশের নাম যুক্ত করা হবে । অন্য কোনও কনফিগারেশনের জন্য পরিবেশের নামটি Productionজেনারেট হওয়া ওয়েব কোডফাইগ ফাইলে থাকবে। আরও বিশদ এখানে

২.প্রকাশিত প্রোফাইলগুলিতে পরিবেশের নাম সম্পত্তি যুক্ত করা ame

আমরা <EnvironmentName>পাশাপাশি প্রকাশের প্রোফাইলে সম্পত্তি যুক্ত করতে পারি । Properties/PublishProfiles/{profilename.pubxml}এটিতে অবস্থিত প্রকাশিত প্রোফাইল ফাইলটি খুলুন এটি প্রকল্পটি প্রকাশিত হওয়ার পরে এটি পরিবেশের নামটি ওয়েবকনফাইগে সেট করবে। আরও বিশদ এখানে

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

৩. ডটনেট প্রকাশ ব্যবহার করে কমান্ড লাইন বিকল্পগুলি

যোগে, আমরা EnvironmentNameকমান্ডের কমান্ড লাইন বিকল্প হিসাবে সম্পত্তিটি পাস করতে পারি dotnet publish। নিম্নলিখিত কমান্ডটি ওয়েব Developmentকনফাইগ ফাইলের মতো পরিবেশের পরিবর্তনশীলকে অন্তর্ভুক্ত করবে ।

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


7

@ ট্রেডার এর উত্তর প্রসারিত করতে আপনি পরিবেশের পরিবর্তনগুলি ব্যবহার করে পরিবর্তন করতে পারবেন appcmd

উপস্থাপনকারী

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

উত্পাদনের

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


আইআইএস ইনস্টল না করে কোনও বিল্ড সার্ভারে পাওয়ারশেলের সাহায্যে কীভাবে একই জিনিসটি সম্পন্ন করা যায় তা এখানে। gist.github.com/markarnott/c4aec1fc544fe89e2bd21f3f00d78933
মার্ক

"Staging.example.com" বা "উদাহরণ.com" নির্দিষ্ট করা কেবলমাত্র সেই নির্দিষ্ট ওয়েবসাইটগুলিতে ভেরিয়েবল প্রয়োগ করবে। ছাড় দেওয়া যা সার্ভারে সমস্ত ওয়েবসাইটের জন্য একটি বৈশ্বিক পরিবর্তনশীল তৈরি করবে।
18:48

6

আপনার এক জায়গায় যা জানা দরকার:

  • এনভায়রনমেন্ট ভেরিয়েবলগুলি যে কোনও কনফিগার সেটিংস ওভাররাইড করার জন্য সেগুলি অবশ্যই প্রিফিক্স করা উচিত ASPNETCORE_
  • আপনি যদি আপনার জেএসওএন কনফিগারেশনে চাইল্ড নোডগুলি মেলাতে চান তবে :একটি বিভাজক হিসাবে ব্যবহার করুন । প্ল্যাটফর্ম যদি পরিবেশের পরিবর্তনশীল কীগুলিতে কলোনকে অনুমতি না দেয় তবে __পরিবর্তে ব্যবহার করুন।
  • আপনি চান যে আপনার সেটিংস শেষ হয় ApplicationHost.config। আইআইএস কনফিগারেশন এডিটর ব্যবহারের ফলে আপনার ইনপুটগুলি অ্যাপ্লিকেশনটিতে লিখিত হতে পারে Web.config- এবং পরবর্তী স্থাপনার সাথে ওভাররাইট করা হবে!
  • সংশোধন করার জন্য, আপনার পরিবর্তনগুলি সুসংগত কিনা তা নিশ্চিত করতে ApplicationHost.configআপনি ব্যবহার করতে চান appcmd.exe। উদাহরণ:%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

  • ইউআরএল-নিরাপদ নয় এমন অক্ষরগুলি %u007bবাম কোঁকড়া বন্ধনীর মতো ইউনিকোড হিসাবে পালাতে পারে ।

  • আপনার বর্তমান সেটিংস তালিকাভুক্ত করতে (Web.config এর মানগুলির সাথে মিলিত): %systemroot%\system32\inetsrv\appcmd.exe list config "Default Web Site/MyVirtualDir" -section:system.webServer/aspNetCore
  • আপনি যদি একই কীটির জন্য একাধিকবার কনফিগারেশন কী সেট করতে কমান্ডটি চালনা করেন তবে এটি একাধিকবার যুক্ত হবে! একটি বিদ্যমান মান অপসারণ করতে, এর মতো কিছু ব্যবহার করুন %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
নোট করুন যে /commit:siteপরিবর্তনগুলি ওয়েবকনফাইগ-এ লিখিত আছে, সেগুলি সংরক্ষণের জন্য তাদের ApplicationHost.configব্যবহার করা উচিত/commit:apphost
অ্যাঞ্জেল ইওর্ডানভ

-section:system.webServer/aspNetCore /-"environmentVariables.(পরিবেশ পরিবর্তনশীল অপসারণ করতে বিয়োগ সহ) আজুর রিলিজ পাইপলাইন চলাকালীন কার্যকর হতে ব্যর্থ। ত্রুটিটি হ'ল hresult:80070032, message:Command execution failed। তবে clear config "Default Web Site/$(webSiteName)" -section:system.webServer/aspNetCore /commit:siteঠিক আছে। এটি ওয়েব সাইটের জন্য পুরো এসপনেটকোর বিভাগটি সাফ করে তবে এটি কোনও সমস্যা নয় যেহেতু এটি মুক্তির সময় প্যারামেট্রাইজড।
ওলেকস

6

অন্যান্য উত্তরের মতো, আমি নিশ্চিত করতে চেয়েছিলাম যে আমার এএসপি.নেট কোর ২.১ পরিবেশের স্থাপনা মোতায়েন জুড়েই রয়েছে, তবে কেবলমাত্র নির্দিষ্ট সাইটের ক্ষেত্রেও প্রয়োগ হয়েছে।

মাইক্রোসফ্টের ডকুমেন্টেশন অনুসারে, আইআইএস 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

দুর্ভাগ্যক্রমে এখনও IIS 8.5 ব্যবহার করতে হবে এবং ভেবেছিলাম আমি ভাগ্য থেকে দূরে আছি। যাইহোক, 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

সম্পাদনা অ্যাপ্লিকেশন সহ @ ট্রেডার সলিউশন হস্টকনফাইগ হ'ল যদি আপনার আইআইএসের ভার্চুয়াল ডিরেক্টরিগুলির মধ্যে বিভিন্ন আলাদা অ্যাপ্লিকেশন থাকে works

আমার মামলাটি হ'ল:

  • আমার কাছে একই ডোমেনের অধীনে, বিভিন্ন ভার্চুয়াল ডিরেক্টরিতে এপিআই প্রকল্প এবং অ্যাপ্লিকেশন প্রকল্প রয়েছে
  • রুট পৃষ্ঠা XXX এর শিশুদের ভার্চুয়াল ডিরেক্টরিতে ASPNETCORE_ENVIRONMENT পরিবর্তনশীল প্রচার করে বলে মনে হচ্ছে না ...
  • ... আমি @ নিকআব বর্ণিত হিসাবে ভার্চুয়াল ডিরেক্টরিতে ভেরিয়েবলগুলি সেট করতে পারছি না (ত্রুটিটি পেয়েছে অনুরোধটি সমর্থিত নয় (( কনফিগারেশন এডিটরের পরিবর্তনগুলি সংরক্ষণের সময় এইচইআরসিলেট: 0x80070032) ):
  • অ্যাপ্লিকেশন হোস্টকনফিগে গিয়ে ম্যানুয়ালি নোড তৈরি করে:

    <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>

এবং আইআইএস পুনরায় চালু করার কাজটি করেছে।


0

ত্রুটি সম্পর্কে বিশদ পেতে আমাকে সংশ্লিষ্ট অ্যাপ্লিকেশন পুলের জন্য পরিবেশের পরিবর্তনশীল যুক্তASPNETCORE_ENVIRONMENTsystem.applicationHost/applicationPools করতে হয়েছিল ।

দ্রষ্টব্য: আমার ক্ষেত্রে ASP.NET Core 2ওয়েব অ্যাপ্লিকেশনটি ওয়েব অ্যাপ্লিকেশনটিতে হোস্ট করা ছিল IIS 10। এটা করা সম্ভব মাধ্যমে Configuration EditorIIS Manager(দেখুন কনফিগারেশন এডিটরের সাহায্যে সম্পাদনা সংগ্রহগুলি যেখানে এই সম্পাদকের এটি জিনিসটা IIS Manager)।


0

আমি ওয়েবকনফাইগের পরিবেশ কনফিগারেশন সহ আইআইএস প্রকাশের জন্য একটি সংগ্রহস্থল তৈরি করেছি।

https://github.com/expressiveco/AspnetCoreWebConfigForEnvironment

  • সেটআপ
    • আপনার প্রকল্পের ফাইলগুলিতে .csproj এবং .user.csproj ফাইলগুলি থেকে বিভাগগুলি পান।
    • MyAspNetEn वातावरण.prop, web.de વિકાસment.config এবং ওয়েব.প্রডাকশন.কনফিগ ফাইলগুলি পান Get
  • কনফিগারেশন
    • প্রযোজ্যভাবে ব্যবহারকারী.এসপিজেজে ASPNETCORE_ENVIRONMENT সম্পত্তির মান পরিবর্তন করুন।

এটি প্রশ্নের কোনও মানের উত্তর সরবরাহ করে বলে মনে হচ্ছে না । দয়া করে হয় এই সমাধানটির সামগ্রিক বিবরণ যুক্ত করে আপনার উত্তর সম্পাদনা করুন, বা কেবল এটি সরিয়ে প্রশ্নটিতে মন্তব্য হিসাবে পোস্ট করুন। ধন্যবাদ!
সুনুন ןɐ কিউপি

0

@ ক্রিশ্চিয়ান ডেল বিয়ানকো দেওয়া উত্তরটি আমি পরিবর্তন করেছি । আমি .net কোর 2 এবং প্রজেক্ট.জসন ফাইল হিসাবে এখন উপরের হিসাবে উপরের জন্য প্রক্রিয়া পরিবর্তন করেছি।

  1. প্রথমে রুট ডিরেক্টরিতে appsettings.json ফাইল তৈরি করুন। বিষয়বস্তু সহ

      {
         // Possible string values reported below. When empty it use ENV 
            variable value or Visual Studio setting.
         // - Production
         // - Staging
         // - Test
        // - Development
       "ASPNETCORE_ENVIRONMENT": "Development"
     }
    
  2. তারপরে প্রয়োজনীয় কনফিগারেশনের সাথে আরও দুটি সেটিং ফাইল অ্যাপসেটিংস তৈরি করুন e ডেভেলপমেন্ট.জসন এবং অ্যাপসেটিংস.প্রডাকশন.জসন

  3. 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. যোগ envsettings.json আপনার টু .csproj প্রকাশিত নির্দেশিকাতে কপি ফাইল।

       <ItemGroup>
            <None Include="envsettings.json" CopyToPublishDirectory="Always" />
        </ItemGroup>
    
  5. আপনি envsettings.json ফাইল এবং প্রকাশিত হিসাবে যেমন চান এখনই ASPNETCORE_ENVIRONMENT পরিবর্তন করুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.