.NET কোর এ অপারেটিং সিস্টেম নির্ধারণ করুন


118

আমার .NET কোর অ্যাপটি কোন অপারেটিং সিস্টেমটি চলছে তা আমি কীভাবে নির্ধারণ করতে পারি? অতীতে আমি ব্যবহার করতে পারে Environment.OSVersion

আমার অ্যাপটি ম্যাক বা উইন্ডোজে চলছে কিনা তা নির্ধারণের বর্তমান উপায় কী?



আমি যে উত্তরটি খুঁজছিলাম তা আসলেই নয়, তবে এটি নিজেই পেয়েছি।
dknaack

উত্তর:


184

পদ্ধতি

System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()

সম্ভাব্য তর্ক

OSPlatform.Windows
OSPlatform.OSX
OSPlatform.Linux

উদাহরণ

bool isWindows = System.Runtime.InteropServices.RuntimeInformation
                                               .IsOSPlatform(OSPlatform.Windows);

হালনাগাদ

ওলেকসী ভিনিচেনকো-র মন্তব্যে ধন্যবাদ

আপনি স্ট্রিং হিসাবে অপারেটিং সিস্টেমের নাম এবং সংস্করণটি পেতে পারেন

var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription;

যেমন osNameAndVersionহবেMicrosoft Windows 10.0.10586


4
ওএসের আরও তথ্য পাওয়ার জন্য আপনি এটি যুক্ত করতে পারেন যে সেই প্যাকেজের মধ্যে আরও একটি সম্পত্তি রয়েছে: System.Runtime.InteropServices.RuntimeInformation.OSDescription- সংস্করণ ইত্যাদি সহ ওএসের বিবরণ প্রদান করে
ওলেক্সি ভিএনচেনকো

15
+1 যদিও আমি এই উত্তরটি পছন্দ করি না। কেন তারা কেবল System.Environment.OSVersion.Platformধারাবাহিকতার জন্য বাস্তবায়ন করতে পারে না ?
লেপি

2
নোট করুন যে ধ্রুবকগুলি সমর্থিত সমস্ত ওএসকে প্রতিনিধিত্ব করে না। IsOSPlatform(OSPlatform.Create("FreeBSD"))তারা এখন সমর্থিত কিনা বা ভবিষ্যতে যুক্ত হতে পারে কিনা তা ব্যবহার করে অন্যান্য ওএসের অনুসন্ধান করা সম্ভব । তবে, এটি খুব পরিষ্কার নয় যে কোন স্ট্রিংগুলি পাস করার জন্য একটি নিরাপদ দৃষ্টিভঙ্গি হবে (উদাহরণস্বরূপ, কেস বিষয়টি বিবেচনা করে, বা "bsd"উভয়টির সাথে মেলে "FreeBSD"এবং "NetBSD"?)। এখানে এই বৈশিষ্ট্য সম্পর্কে আলোচনা দেখুন ।
নাইটওয়েল 888

37

System.Environment.OSVersion.Platform সম্পূর্ণ। নেট ফ্রেমওয়ার্ক এবং মনোতে ব্যবহৃত হতে পারে তবে:

  • ম্যাক ওএস এক্স শনাক্তকরণ মনো-এর অধীনে আমার পক্ষে প্রায়শই কাজ করে না
  • .NET কোর এ প্রয়োগ করা হয় না

System.Runtime.InteropServices.RuntimeInformation .NET কোর ব্যবহার করা যেতে পারে তবে:

  • এটি পুরো .NET ফ্রেমওয়ার্ক এবং মনোতে প্রয়োগ করা হয়নি
  • এটি রানটাইমে প্ল্যাটফর্ম সনাক্তকরণ সম্পাদন করে না তবে পরিবর্তে হার্ডকোডযুক্ত তথ্য ব্যবহার করে
    ( অধিক বিবরণের জন্য কোরফেক্স ইস্যু # 3032 দেখুন)

আপনি প্ল্যাটফর্ম নির্দিষ্ট পরিচালনা করতে পারবেন না যেমন uname():

  • এটি অজানা প্ল্যাটফর্মগুলিতে বিভাজন ত্রুটির কারণ হতে পারে
  • কিছু প্রকল্পে অনুমোদিত নয়

সুতরাং আমার প্রস্তাবিত সমাধান (কোড বেলো দেখুন) প্রথমে সিল দেখতে পাবে তবে:

  • এটি 100% পরিচালিত কোড ব্যবহার করে
  • এটি নেট, মনো এবং। নেট কোরে কাজ করে
  • এটি এখন পর্যন্ত পিকেসিএস 11 আন্তঃবিদ্যালয়ের লাইব্রেরিতে একটি কবিতার মতো কাজ করে
string windir = Environment.GetEnvironmentVariable("windir");
if (!string.IsNullOrEmpty(windir) && windir.Contains(@"\") && Directory.Exists(windir))
{
    _isWindows = true;
}
else if (File.Exists(@"/proc/sys/kernel/ostype"))
{
    string osType = File.ReadAllText(@"/proc/sys/kernel/ostype");
    if (osType.StartsWith("Linux", StringComparison.OrdinalIgnoreCase))
    {
        // Note: Android gets here too
        _isLinux = true;
    }
    else
    {
        throw new UnsupportedPlatformException(osType);
    }
}
else if (File.Exists(@"/System/Library/CoreServices/SystemVersion.plist"))
{
    // Note: iOS gets here too
    _isMacOsX = true;
}
else
{
    throw new UnsupportedPlatformException();
}

1
আপনার প্রচেষ্টার জন্য প্রশংসা করুন। আশা করি ভবিষ্যতে কিছু ধারাবাহিকতা থাকতে পারে।
লেপি

6
সিস্টেম.আরুনটাইম.ইনটারপ সার্ভিসস.আরুনটাইম ইনফর্মেশনটি পুরো পুরো নেট এখনই (নভেম্বরের পর থেকে) কাজ করা উচিত, যাতে এটি এখন "গ্রহণযোগ্য" উপায় হিসাবে মনে হয়। মনো সম্পর্কে নিশ্চিত নয়, তবে যেহেতু তারা। নেট থেকে সরাসরি কিছু কোড নিচ্ছে এখন এটি ওপেন সোর্স, এটি ইতিমধ্যে কাজ না করে এটি সেখানে কাজ করার আগে সময়ের বিষয় মাত্র।
গ্র্যান্ডঅপনার

1
Path.DirectorySeparatorChar এটি উইন্ডো বা * নিক্স মেশিন কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে।
কিরণ

ইন্টারপ সার্ভিসগুলি খুব অদ্ভুত। ভিস্টুডিও এবং রাইডারের মধ্যে আমি মাঝে মাঝে "এই প্রসঙ্গে অজানা" পাই বা এটি সংকলন করি। এই ব্যর্থতার কারণ সম্পর্কে কোনও ধারণা নেই ...
স্লেসা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.