#If DEBUG সি # তে কি যেমন # রিলিজ কাজ করবে?


277

সংস্থার দিকনির্দেশের # আইটি দেখেছি এমন সমস্ত উদাহরণে তারা "DEBUG" ব্যবহার করে। আমি কি ডিবেগ মোডে সংকলন করার সময় যে কোডটি চালাতে চাই না তা বাদ দিতে একইভাবে "রিলিজি" ব্যবহার করতে পারি? এই ব্লকের সাথে আমি যে কোডটি ঘিরতে চাইছি তা ইমেলগুলির একগুচ্ছ প্রেরণ করে এবং পরীক্ষার সময় আমি ঘটনাক্রমে সেগুলি প্রেরণ করতে চাই না।


3
#if !DEBUGযেমন কাজ #if RELEASEকরবে তেমন কাজ করে । অন্যথা, #if DEBUGতারপর #elseতারপর #endifযদি সেখানে মোড চালানোর জন্য বিভিন্ন কোড আছে।
নাট

উত্তর:


275

না, আপনি কিছু কাজ না করলে তা হবে না।

এখানে গুরুত্বপূর্ণ অংশটি হ'ল DEBUG আসলে কী, এবং এটি এক ধরণের ধ্রুবক সংজ্ঞায়িত যা সংকলকটি পরীক্ষা করতে পারে।

আপনি যদি বিল্ড ট্যাবের নীচে প্রকল্পের বৈশিষ্ট্যগুলি পরীক্ষা করেন তবে আপনি তিনটি জিনিস খুঁজে পাবেন:

  • "শর্তাধীন সংকলন প্রতীক" লেবেলযুক্ত একটি পাঠ্য বাক্স
  • "DEBUG ধ্রুবক সংজ্ঞায়িত করুন" লেবেলযুক্ত একটি চেক বাক্স
  • "ট্র্যাক ধ্রুবক সংজ্ঞায়িত করুন" লেবেলযুক্ত একটি চেক বাক্স

এর মতো কোনও চেকবাক্স নেই, বা ধ্রুবক / প্রতীক প্রাক-সংজ্ঞায়িত যার নাম রিলেস আছে।

তবে আপনি শর্তসাপেক্ষ সংকলন চিহ্ন লেবেলযুক্ত টেক্সট বাক্সে সহজেই সেই নামটি যুক্ত করতে পারেন তবে এই সেটিংসটি কনফিগারেশন অনুযায়ী এই সেটিংসটি তৈরি করার আগে আপনি প্রকল্প কনফিগারেশনটি রিলিজ-মোডে সেট করেছেন তা নিশ্চিত করুন make

সুতরাং মূলত, আপনি যদি না পাঠ্য বাক্সে যোগ না করেন তবে #if RELEASEকোনও কনফিগারেশনের অধীনে কোনও কোড তৈরি করা হবে না।


393

RELEASE সংজ্ঞায়িত করা হয় না, তবে আপনি ব্যবহার করতে পারেন

#if (!DEBUG)
  ...
#endif

2
এটি নয়, তবে অবশ্যই আপনি নট অপারেটরটি ব্যবহার করতে পারেন। আমি আমার উত্তরটি লিখতে গিয়ে তা ভেবে দেখিনি।
লাসে ভি কার্লসেন

4
এটি করে, তবে আপনার সমাধানটি আরও পরিষ্কার এবং "আরও সঠিক", আইএমএইচও।
ড্যানিয়েল শেফার

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

উপরের মন্তব্যগুলি দ্বারা বিভ্রান্ত অন্য কারও জন্য, সংক্ষিপ্ত উত্তরটি RELEASEসংজ্ঞায়িত করা হয়েছে কিনা তা নিয়ে অবাক হয়েছিল।
ড্যান

41

নাঃ।

ডিবাগ কনফিগারেশনের সময় একটি DEBUGসংজ্ঞায়িত ধ্রুবক থাকে (স্বয়ংক্রিয়ভাবে ভিজ্যুয়াল স্টুডিও দ্বারা সংজ্ঞায়িত) যখন রিলিজ মোডের জন্য এমন ধ্রুবক সংজ্ঞায়িত হয় না। বিল্ডের অধীনে আপনার প্রকল্পের সেটিংস পরীক্ষা করুন।

প্রকল্পের অধীনে [DEBUG ধ্রুবক সংজ্ঞায়িত] নির্বাচন করা -> বিল্ড প্রতিটি ফাইলের শুরুতে # ডিফাইন DEBUG অন্তর্ভুক্ত করার মতো।

আপনি যদি রিলিজ কনফিগারেশনের জন্য একটি রিলেস ধ্রুবক সংজ্ঞায়িত করতে চান তবে এখানে যান:

  • প্রকল্পের সম্পত্তি -> তৈরি করুন
  • রিলিজ মোড নির্বাচন করুন
  • মধ্যে শর্তসাপেক্ষ সংকলন প্রতীক পাঠ্যবাক্স লিখুন: রিলিজ

1
এটি এখন খুব দরকারী হিসাবে খুঁজে পেয়েছি কারণ আমি এখন আমার রিলিজ কনফিগারেশনের জন্য একটি রিলেস ধ্রুবক এবং আমার পরীক্ষার কনফিগারেশনের জন্য একটি টেস্টিং ধ্রুবককে সংজ্ঞায়িত করেছি। শুধুমাত্র মুক্তির জন্য https প্রয়োজন সংজ্ঞায়নের জন্য খুব দরকারী#if (RELEASE) [RequireHttps] #endif
tekiegirl

26

আমার ভিএস ইনস্টল (ভিএস 2008) #if RELEASEকাজ করে না। তবে আপনি কেবল ব্যবহার করতে পারেন#if !DEBUG

উদাহরণ:

#if !DEBUG
SendTediousEmail()
#endif

10

আমি এর আগে কখনও দেখিনি ... তবে আমি দেখেছি:

#if (DEBUG == FALSE)

এবং

#if (!DEBUG)

তোমার জন্য এই কাজ?


প্রিপ্রসেসর প্রতীকগুলির সি # তে মান নেই; এগুলি কেবল "সংজ্ঞায়িত" বা "সংজ্ঞায়িত নয়"। সুতরাং শুধুমাত্র !অপারেটর কাজ করবে, যেমন আপনার দ্বিতীয় উদাহরণ হিসাবে।
জোনাথন রাইনহার্ট

1
এমএসডিএন অনুসারে, আপনি সত্য বা মিথ্যা পরীক্ষার জন্য অপারেটরগুলি == এর মতো ব্যবহার করতে পারেন। msdn.microsoft.com/en-us/library/4y6tbswk.aspx
জেসন_রুজ


4

"পপ ক্যাটালিন" এটি সঠিকভাবে পেয়েছে। বিল্ডের ধরণের ভিত্তিতে সংজ্ঞাটি নিয়ন্ত্রণ করা একটি নমনীয়তা দেয় of উদাহরণস্বরূপ, আপনার কাছে একই সমাধানে একটি "DEBUG", "ডেমো", এবং "রিলিজ" কনফিগারেশন থাকতে পারে। এটি দুটি ভিন্ন সমাধান সহ নকল প্রোগ্রামিংয়ের প্রয়োজনীয়তা রোধ করে।

সুতরাং হ্যাঁ #if RELEASEবা রিলেস শর্তসাপেক্ষ সংকলন চিহ্নটি সংজ্ঞায়িত #if (RELEASE)হওয়ার মতোই কাজ করে #if DEBUG

নিম্নলিখিতটি "পপ ক্যাটালিন" পোস্ট থেকে নেওয়া হয়েছে: আপনি যদি রিলিজ কনফিগারেশনের জন্য একটি রিলেস ধ্রুবকটি সংজ্ঞায়িত করতে চান তবে যান: * প্রকল্পের বৈশিষ্ট্য -> বিল্ড করুন * শর্তসাপেক্ষ সংকলনের চিহ্নগুলিতে রিলিজ মোড নির্বাচন করুন পাঠ্যবক্স প্রবেশ করুন: রিলিজ


2

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে এটি উল্লেখ করার মতো হতে পারে যে আপনি DEBUG এবং রিলেসের বাইরে যেমন টেস্ট বা ইউএটি থেকে নিজের কনফিগারেশন তৈরি করতে পারেন।

তারপরে যদি প্রকল্পের বৈশিষ্ট্য পৃষ্ঠার বিল্ড ট্যাবে আপনি "শর্তসাপেক্ষ সংকলন চিহ্নগুলি" টিইএসটি-তে সেট করেন (উদাহরণস্বরূপ) আপনি তারপরে কোনও নির্মাণ ব্যবহার করতে পারেন

#if (DEBUG || TEST )
    //Code that will not be executed in RELEASE or UAT
#endif

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


0

আপনি নিজের শর্তযুক্ত সংকলন-সময় চিহ্নগুলি (আপনার পছন্দ মতো কোনও নাম) তৈরি করতে পারেন। প্রকল্পের বৈশিষ্ট্য বাক্সে অবস্থিত "প্রকল্প বিল্ড ডায়লগ" এ যান, মেনু বিকল্প: প্রকল্প -> [প্রকল্পের নাম] বৈশিষ্ট্য ...

আপনি এগুলি "সি # কোড ফাইলের শীর্ষে" সংজ্ঞায়িত করতে পারেন। ভালো লেগেছে:

#define RELEASE
// or
#undef RELEASE

আপনি # একটি বিবৃতিতে প্রতীকটি ব্যবহার করতে পারেন:

#if RELEASE
// code ...
#elif 
// code ...
#endif

// or

#if !RELEASE
// code ...
#endif

-8

কেন শুধু না

#if RELEASE
#undef DEBUG
#endif

3
রিলিজ মোডের অধীনে ভিজ্যুয়াল স্টুডিওর দ্বারা নির্ধারিত কোনও রিলিজ নাম নেই।
পপ ক্যাটালিন

1
/d:RELEASEকাজ করবে। আপনি এটি রিলিজ কনফিগারেশনের অধীনে শর্তাধীন সংকলন চিহ্নগুলিতে যুক্ত করতে পারেন (প্রকল্পের বৈশিষ্ট্যগুলি বিল্ড ট্যাব)।
স্লিভারনিঞ্জা - এমএসএফটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.