কীভাবে একটি এসপিএনটোর অ্যাপ্লিকেশন প্রকাশের জন্য বিবেচিত হওয়ার জন্য ASPNETCORE_ENVIRONMENT সেট করবেন?


119

আমি যখন আমার স্থানীয় ফাইল সিস্টেমে আমার এসপিএন কোর ওয়েব অ্যাপ্লিকেশনটি প্রকাশ করি তখন এটি সর্বদা প্রোডাকশন-কনফিগারেশন এবং ASPNETCORE_ENVIRONMENT ভেরিয়েবলটি = "উত্পাদন" এর সাথে নেয়।

কীভাবে এবং কোথায় আমাকে এএসপিএনটিকোআরইএনইভিআরএনএমএনটি ভেরিয়েবলের মান সেট করতে হবে যাতে এটি কেবল ডিবাগিংয়ের জন্যই নয়, প্রকাশের জন্যও বিবেচিত হবে ? আমি ইতিমধ্যে সফলতা ছাড়াই নিম্নলিখিত বিকল্পগুলি চেষ্টা করেছি:

  • উইন্ডোজ সেটিংসে
  • .pubxML ফাইলে
  • আরম্ভ করুন
  • in প্রকল্প.json

4
আপনি কি অফিশিয়াল ডক্স ডকস.মাইক্রোসফটকম / en-us / aspnet / core / fundamentals / en वातावरण বা এই টিউটোরিয়ালটি অ্যান্ড্রুলক . net / ? পড়েন ?
জে ডো


4
stackoverflow.com/questions/43493259/… এটিতে সত্যিকারের ত্রুটিটি পরীক্ষা করার জন্য 2 টি বিকল্প রয়েছে।
Kurkula

উত্তর:


97

উপরে উল্লিখিত বিকল্পগুলি ব্যতীত অন্যান্য কয়েকটি সমাধান রয়েছে।

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জেনারেট হওয়া ওয়েব কোডফাইগ ফাইলে থাকবে। আরও বিশদ এখানে

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

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

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

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

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

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


8
আমি যতদূর বলতে পারি এটি সেরা উত্তর বলে মনে হচ্ছে। প্রকাশিত প্রোফাইল প্রতি এটি সেট করার ক্ষমতা আমাকে সত্যই অনেক সাহায্য করেছিল।
জোনাথন কুইনথ

4
তৃতীয় বিকল্পটি আমার পক্ষে কাজ করে। আপনি কি জানেন / p: পরিবেশনাম বিকল্পটি ডটনেট ডকুমেন্টেশনের যে কোনও জায়গায় উল্লেখ করেছে?
rasyadi

9
dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Developmentঠিক আমি যা খুঁজছিলাম ধন্যবাদ!
ম্যাট এম

আপনি দয়া করে বলতে পারেন যে 'ইউএটি, কিউএ বা প্রোডাকশনে কেউ প্রকাশ করতে চাইলে সম্পূর্ণ' ডটনেট প্রকাশ কী .... 'হতে পারে?
ক্রেজিটেক

আপনি প্রকাশের সময় আপনার পরিবেশ যদি পুনরায় লোড না করে তবে প্রকল্পটি পুনরায় লোড করুন।
সিপিপিডিজাইন

77

বিকল্প 1:

উইন্ডোতে ASPNETCORE_ENVIRONMENT এনভায়রনমেন্ট ভেরিয়েবল সেট করতে,

কমান্ড লাইন - setx ASPNETCORE_ENVIRONMENT "Development"

শক্তির উৎস - $Env:ASPNETCORE_ENVIRONMENT = "Development"

অন্যান্য ওএসের জন্য এটি উল্লেখ করুন - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/en वातावरण

বিকল্প 2:

আপনি ASPNETCORE_ENVIRONMENT ব্যবহার করে নির্ধারণ করতে চান তাহলে web.configতারপর যোগ aspNetCorethis- মত

<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\MyApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

45
এই দুটিই ভয়ানক বিকল্প are 1) এটি পুরো ওএসের জন্য সেট করে, আমি এটি আইআইএস এর প্রতি সাইটের পছন্দ করি। 2) অ্যাসপনেট কোর ওয়েবকনফিগ রূপান্তরগুলিকে সমর্থন করে না। আপনি কীভাবে ওয়েবকনফাইগকে মোতায়েনের জন্য সংশোধন করার পরামর্শ দিচ্ছেন?
কুগেল

অফিসিয়াল ডকুমেন্টেশন এখানে উল্লেখ করুন - ডকস.মাইক্রোসফট
সংকেত

5
একবার আপনি আরও ভাল বিকল্পটি পেলেন ... দয়া করে এখানে ভাগ করুন :)
সংকেত

5
এই ধরনের কনফিগারেশন ডিজাইনটি খুব অগোছালো মনে হচ্ছে।
koo9

4
আপনি একাধিক পরিবেশের জন্য প্রকাশিত প্রোফাইলগুলিতে এটি ওভাররাইড করতে পারেন।
সিডারলফ

33

ভিজ্যুয়াল স্টুডিও আইডিইতে সেট করার সহজ উপায়।

প্রকল্প> বৈশিষ্ট্য> ডিবাগ> পরিবেশ পরিবর্তনশীল

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


4
তবে তারপরে আপনাকে এই পরিবর্তনের কথা মনে রাখতে হবে যখনই আপনাকে অন্য পরিবেশে প্রকাশ করতে হবে।
অ্যালিসন

16
এটি সঠিক নয়। এটি কেবল আইডিই চালানোর সময় কাজ করে। এটিকে লঞ্চसेटিংস.জসন ফাইলে সংরক্ষণ করুন যা একটি ভিজ্যুয়াল স্টুডিও জিনিস। মোতায়েনের জন্য কাজ করবে না।
ওয়ানফুটসুইলে 11'18

21

আপনার ব্যবহার করে ডকুমেন্টেশনে প্রদত্ত নির্দেশাবলী অনুসরণ করা উচিত web.config

<aspNetCore processPath="dotnet"
        arguments=".\MyApp.dll"
        stdoutLogEnabled="false"
        stdoutLogFile="\\?\%home%\LogFiles\aspnetcore-stdout">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

নোট করুন যে আপনি অন্যান্য পরিবেশের ভেরিয়েবলগুলিও সেট করতে পারেন।

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


আমি কীভাবে এটি একটি নেট নেট কনসোল অ্যাপে সেট করব?
ব্যবহারকারী 441365

উইন্ডোজের পরিবেশ পরিবর্তনশীল ডায়ালগের মাধ্যমে সেগুলি সেট আপ করুন।
ডেভিড পাইন

4
তবে ওএসের পরিবর্তে প্রকল্পে সেট করার কোনও উপায় আছে কি?
ব্যবহারকারী 441365

.NET কোর এ কনসোল অ্যাপ্লিকেশনের জন্য নয় যা আমি সচেতন ... না - সম্ভবত এটি - stackoverflow.com/a/46445432/2410379 ?
ডেভিড পাইন

16

এভাবে আমরা রান-টাইমে সেট করতে পারি:

public class Program
{
    public static void Main(string[] args)
    {
        Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");

        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

কেন এটিকে নিচে ভোট দেওয়া হয়েছে তা নিশ্চিত নন, কারণ এটিই আমার পক্ষে কাজ করেছে।
pcalkins

4
কোডের হার্ড-কোডড মানগুলির কারণে এটি সম্ভবত ডাউন-ভোট হয়েছিল।
কেভিন সি

দ্রুত পরীক্ষা করা, তবে আমি চেক-ইন কোড, দীর্ঘমেয়াদী হিসাবে দেখতে চাই এমন কিছুতে আমি সম্মত নই।
ব্রেট রিগবি

যদিও এটি হার্ডকোডযুক্ত, আমি এটি এটি করার সবচেয়ে সহজ উপায় হিসাবে দেখছি।
চলছে

4
আমার পছন্দসই পদ্ধতিটি, আমি এটি সঠিক মান নির্ধারণ করতে DEBUG এর সাথে একত্রে ব্যবহার করি।
ডেভ ডি জং

8
  1. আপনার অ্যাপসেটেটিংগুলি তৈরি করুন * * (উদাহরণস্বরূপ: অ্যাপসেটিংস.ডভেলপমেন্ট.জসন, অ্যাপসেটিংস.সেজিং.জসন, অ্যাপসেটিংস.প্রডাকশন.জসন)

  2. এই ফাইলগুলিতে আপনার ভেরিয়েবল যুক্ত করুন।

  3. প্রতিটি পরিবেশের জন্য আলাদাভাবে প্রকাশিত প্রোফাইল তৈরি করুন, আপনার মতো সাধারণভাবে।

  4. ওপেন প্রকাশিত প্রোফাইল / ডেভেলপমেন্ট.পুব এক্সএমএল (নামকরণ আপনি প্রকাশিত প্রোফাইলটির নাম অনুসারে তৈরি করবেন)।

  5. সেট করার জন্য কেবলমাত্র প্রকাশের প্রোফাইলে একটি ট্যাগ যুক্ত করুনএনভায়রনমেন্ট ভেরিয়েবল, * * জেসন ফাইলের নামকরণ কনভেনশন বাকিটি করে।

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

তথ্যসূত্র: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-3.1

"পরিবেশ সেট করুন" বিভাগটি দেখুন।


6

ডটনেট ক্লাইপের সর্বশেষতম সংস্করণ (২.১.৪০০ বা তার বেশি) এর সাথে, আপনি কেবল এই এমএসবিল্ড সম্পত্তিটি সেট করতে পারেন $(EnvironmentName)এবং প্রকাশের সরঞ্জামাদি পরিবেশের নামের সাথে ওয়েবপোঞ্জফাইজে এএসপিএনটেক্রেআর_ইনভাইরনমেন্ট যুক্ত করার যত্ন নেবে।

এছাড়াও, এক্সডিটি সমর্থনটি ২.২.১০০-পূর্বরূপ ১ শুরু করে উপলব্ধ।

নমুনা: https://github.com/vijayrkn/webconfigtransform/blob/master/README.md


7
আপনি বিস্তারিত you can just set this msbuild property $(EnvironmentName) and publishবা একটি রেফারেন্স প্রদান করতে পারেন?
ড্যানিলিওট

4
আমি কীভাবে এটি একটি নেট নেট কনসোল অ্যাপে সেট করব?
ব্যবহারকারী 441365

4

এই ভেরিয়েবলটি জসন-এ সংরক্ষণ করা যায়। উদাহরণস্বরূপ নীচের মতো বিষয়বস্তু সহ envsettings.json

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

   "ASPNETCORE_ENVIRONMENT": "Development"
  }

পরে নীচে হিসাবে আপনার প্রোগ্রাম। সি

  public class Program
  {
    public static IConfiguration Configuration { get; set; }
    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 environmentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();

        var builder = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json");

        Configuration = builder.Build();
          var webHostBuilder = new WebHostBuilder()
            .UseKestrel()
            .CaptureStartupErrors(true)
            .UseContentRoot(currentDirectoryPath)
            .UseIISIntegration()
            .UseStartup<Startup>();

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

        var host = webHostBuilder.Build();

        host.Run();
     }
 }

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


1

আমি জানি এটি একটি পুরানো পোস্ট তবে ভেবেছিল আমি আমার সহজ সমাধানটি মিশ্রণে ফেলে দেব কারণ কেউই এটির পরামর্শ দেয়নি।

আমি বর্তমান ডিরেক্টরিটি বর্তমান পরিবেশ নির্ধারণ করতে ব্যবহার করি তারপরে সংযোগের স্ট্রিং এবং পরিবেশের ভেরিয়েবলটি ফ্লিপ করুন। আপনার সাইট ফোল্ডার যেমন টেস্ট / বিটা / স্যান্ডবক্সের জন্য নামকরণের কনভেনশন থাকা পর্যন্ত এটি এতক্ষণ দুর্দান্ত কাজ করে।

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var dir = Environment.CurrentDirectory;
        string connectionString;

        if (dir.Contains("test", StringComparison.OrdinalIgnoreCase))
        {
            connectionString = new ConnectionStringBuilder(server: "xxx", database: "xxx").ConnectionString;
            Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");
        }
        else
        {
            connectionString = new ConnectionStringBuilder(server: "xxx", database: "xxx").ConnectionString;
            Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Production");
        }

        optionsBuilder.UseSqlServer(connectionString);
        optionsBuilder.UseLazyLoadingProxies();
        optionsBuilder.EnableSensitiveDataLogging();
    }

0

আমি সরাসরি এটি অ্যাজুরে প্লোরমেটে এই ভেরিয়েবলটি সেট করে আমার জন্য কাজ করে দেখলাম (যদি আপনি এটি ব্যবহার করেন)। কেবলমাত্র আপনার ওয়েব অ্যাপ্লিকেশন -> কনফিগারেশন -> অ্যাপ্লিকেশন সেটিংস নির্বাচন করুন এবং ভেরিয়েবল এবং এর মান যুক্ত করুন, তারপরে সংরক্ষণ বোতামটি টিপুন।


0

প্রতি প্রকল্পগুলিতে পরিবেশ নির্ধারণের জন্য আমরা আমাদের প্রকল্পগুলিতে যে অপশনটি ব্যবহার করি তা হ'ল প্রকল্পের সাথে একটি প্যারামিটার.এক্সএমএল ফাইল যুক্ত করা যা নিম্নলিখিত বিষয়বস্তু সহ:

<parameters>
      <parameter name="IIS Web Application Name" defaultValue="MyApp" tags="IisApp" />    
      <parameter name="Environment" description="Environment" tags="">
        <parameterEntry kind="XmlFile" scope="Web.config"  match="/configuration/location/system.webServer/aspNetCore/environmentVariables/environmentVariable[@name='ASPNETCORE_ENVIRONMENT']/@value" />
      </parameter>    
</parameters>

এই ফাইলটির জন্য বিল্ড অ্যাকশনটি হ'ল সামগ্রী এবং অনুলিপি অ্যাকশনটি যদি নতুন হয় তবে এটি মোতায়েনের জন্য প্যাকেজের অংশ হবে।

তারপরে, প্যাকেজটি স্থাপন এবং পরিবেশ নির্ধারণের জন্য, "উইনআরএম - আইআইএস ওয়েব অ্যাপ্লিকেশন ডিপ্লোয়মেন্ট" টাস্কের অধীনে ("আইআইএস ওয়েব অ্যাপ্লিকেশন স্থাপনা" টাস্কটি ব্যবহার করার সময় এটি ঠিক তেমনি কাজ করে), আমরা এমএসডিপ্লাইয়ের জন্য অতিরিক্ত যুক্তি সেট করি :

-setParam:kind=ProviderPath,scope=contentPath,value="MySite" -setParam:name="Environment",value="Stage"

এইভাবে আমরা একাধিক প্রকাশ পেতে পারি, একই জিনিসগুলি ব্যবহার করে, তবে বিভিন্ন পরিবেশ হিসাবে স্থাপন করা।

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