ডাব্লুপিএফ-তে কোনও মেইন () নেই?


128

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


13
আপনি App.xaml.cs এ অন স্টার্টআপকে ওভাররাইড করে সমতুল্য কার্যকারিতাটি পেতে পারেন। স্টার্টআপএভেন্টআর্গস.আরগসে কমান্ডলাইন আর্গুমেন্ট রয়েছে।
ব্রেইল

1
@ ফুললে, না, আপনি পারবেন না, এই প্রশ্নটি দেখুন।
সিনাটর

উত্তর:


73

এটি নির্মাণের সময় উত্পন্ন হয়, তবে আপনি নিজের নিজস্ব সরবরাহ করতে পারেন (এটি প্রয়োজনীয় হিসাবে প্রকল্প-সম্পত্তিগুলিতে ছড়িয়ে দেওয়া)। কোনও অ্যাপ্লিকেশন ফাইলের জন্য আপত্তি / ডিবাগের দিকে তাকান; আমার সাথে ("সি # 2010 এক্সপ্রেস" এর সৌজন্যে) App.g.i.csরয়েছে:

namespace WpfApplication1 {


    /// <summary>
    /// App
    /// </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
    public partial class App : System.Windows.Application {

        /// <summary>
        /// InitializeComponent
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public void InitializeComponent() {

            #line 4 "..\..\..\App.xaml"
            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

            #line default
            #line hidden
        }

        /// <summary>
        /// Application Entry Point.
        /// </summary>
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public static void Main() {
            WpfApplication1.App app = new WpfApplication1.App();
            app.InitializeComponent();
            app.Run();
        }
    }
}

1
একই জিনিস বিদ্যমান App.g.cs, পাশাপাশি। তবে আমি যুক্ত করার চেষ্টা করেছি Main()এবং যতবারই আমি আমার প্রকল্পটি পুনর্নির্মাণ করব, এটি আপনার যা আছে তা এখানে ফিরিয়ে দেবে। অন্য একটি ক্লাসে আমার নিজের তৈরি করার চেষ্টা করা হয়েছিল, তবে প্রকল্পের বৈশিষ্ট্যগুলি কেবলমাত্র অন্য শ্রেণীর নয়, মাইপ্রজেক্ট.অ্যাপটিকে সন্ধান করে so
vapcguy

1
বিকল্পভাবে, App.xaml.csভিজ্যুয়াল স্টুডিওতে খুলুন । নেভিগেশন বার ব্যবহার করুন> পদ্ধতি ড্রপ ডাউন তালিকা> নির্বাচন করুন Main(গ্রেড আউট)। এই প্রদর্শন করা হয় App.g.i.cs
পি.ব্রায়ান.ম্যাকি

136

মেইন () পদ্ধতিটি স্বয়ংক্রিয়ভাবে তৈরি হয়। আপনি যদি নিজের নিজস্ব সরবরাহ করতে চান তবে আপনাকে (ভিএস ২০১৩ এবং ভিএস ২০১7 এ পরীক্ষা করা) করতে হবে:

  • সমাধান এক্সপ্লোরারটিতে App.xaml রাইট ক্লিক করুন, বৈশিষ্ট্য নির্বাচন করুন
  • 'বিল্ড অ্যাকশন' কে 'পৃষ্ঠায়' পরিবর্তন করুন (প্রাথমিক মান হ'ল 'অ্যাপ্লিকেশন ডেফিনিশন')

তারপরে App.xaml.cs এ কেবল একটি মেইন () পদ্ধতি যুক্ত করুন। এটি এর মতো হতে পারে:

[STAThread]
public static void Main()
{
    var application = new App();
    application.InitializeComponent();
    application.Run();
}

2
[স্ট্যাথ্রেড] আপনার আবেদনের জন্য সিওএম থ্রেডিং মডেল সেট করে। সাধারণত আপনি এটি এসটিএতে সেট করেছেন এবং এটি ঠিক কী করে তা চিন্তা করার দরকার নেই। কেস আপনি যদি আগ্রহী হন সালে খুঁজে বার করো msdn.microsoft.com/de-de/library/...
আন্দ্রিয়াস Kahler

এটা করবেন না! এটি পুরো প্রকল্পের জন্য ডিজাইনারের স্টাইলগুলিতে App.xaml এ সংজ্ঞায়িত স্ট্যাটিক রিসোর্সগুলি স্থায়ীভাবে ভেঙে দেবে।
হিম্বির

13

Main() সিএলআর এবং ডাব্লুপিএফ দ্বারা স্বয়ংক্রিয়ভাবে সরবরাহ করা হয়।

সি # সংকলক একটি কমান্ড-লাইন স্যুইচ নেয় /mযা প্রকারভেদ রয়েছে এমন ধরণের নির্দিষ্ট করে Main()। কনভেনশন অনুসারে, কোনও স্টার্টআপ অবজেক্ট যদি স্পষ্টভাবে নির্দিষ্ট না করা হয়, তবে সিএলআর স্ট্যাটিক পদ্ধতিযুক্ত যে কোনও শ্রেণীর সন্ধান Main()করবে এবং এটিকে ডাকবে। (@ মার্ক কঙ্কর তার মন্তব্যে উল্লেখ করেছেন)

ডাব্লুপিএফ-এর ক্ষেত্রে, Main()তৈরি হওয়ার পরে স্বয়ংক্রিয়ভাবে উত্পন্ন App.xamlহয় এবং সি # সংকলকটি শ্রেণিটি প্রবেশের পয়েন্ট হিসাবে ব্যবহার করার জন্য / এম সুইচ নির্দিষ্ট করা হয়। তবে আপনি যদি প্রকল্পের বৈশিষ্ট্যগুলি লক্ষ্য করেন তবে আপনি স্টার্টআপ অবজেক্টটি বেছে নেওয়ার জন্য একটি সেটিংস পাবেন। আপনি যদি চান তবে আপনার নিজের ক্লাস সরবরাহ করতে পারেন যা প্রয়োগ করে Main()

মনে রাখবেন যে ডাব্লুপিএফ অবকাঠামো সঠিকভাবে শুরু হয়েছে কিনা তা নিশ্চিত করার জন্য এটি আপনার উপর দায় চাপিয়ে দেবে Applicationএবং তার Run()পদ্ধতিটি কল করবে।


আসলে, ছাড়া /mএটা না যত্ন কি ধরনের বলা হয়; আপনি যদি স্পষ্ট না হন তবে এটি কোনও উপযুক্ত Mainপদ্ধতি সন্ধান করার চেষ্টা করে এবং যদি এটি এক বা একাধিক পাওয়া যায় তবে অভিযোগ করে। উদাহরণ হিসাবে, ভাষা বিশেষে "হ্যালো ওয়ার্ল্ড" নমুনা (§1.1) Helloপ্রকারের নাম হিসাবে ব্যবহার করে।
মার্ক Gravell

2
পেডেন্টিক হতে: এটি main()সিএলআর (রানটাইম) সরবরাহ করে বলে সত্যই সঠিক নয় , এটি সত্যই সংকলক এটি তৈরি করে।
হ্যাঙ্ক

দর্শকদের মনে করিয়ে দেওয়ার জন্য আমার +1 যোগ করেছে তাদের নিজের অ্যাপ্লিকেশন উদাহরণ (ie MyApp.App app = new MyApp.App();) .Run()এ যুক্ত করতে Main()হবে এবং পূর্বের মতো এটিতে কল করতে হবে। ভাল কল. এছাড়াও, app.InitializeComponent();পূর্বে যুক্ত করতে হবে app.Run(), এবং সৌভাগ্যক্রমে আমাদের জন্য, মূল InitializeComponent()পদ্ধতিটি এখনও রয়েছে (App.g.cs এ দেখা গেছে, সুতরাং এটি আবার যুক্ত করার দরকার নেই!)।
vapcguy

7

Main()সংকলনের সময় উত্পন্ন হয়। আপনি এটি App.g.cs( obj/{Debug,Release}ফোল্ডারে) খুঁজে পেতে পারেন ।


6

main()কোনও অ্যাপ্লিকেশনের জন্য একটি স্ট্যান্ডার্ড এন্ট্রি পয়েন্ট, তবে সমস্ত অ্যাপ্লিকেশন সেভাবে কাঠামোগত হয়। একটি এক্সএএমএল প্রকল্পে, অ্যাপ.এএমএএমএল ফাইলটি যেখানে লেখা আছে সেখানে প্রবেশের পয়েন্টটি নির্দিষ্ট করে StartupUri="MainWindow.xaml"

যেমনটি অন্যদের দ্বারা বলা হয়েছে, প্রকৃত মূল ফাংশনটি প্রকল্পের এক্সএএমএল ফাইলের সামগ্রীর উপর ভিত্তি করে তৈরি করা হয়।


1

আমি এমন ফাইলগুলি অনুলিপি করেছি যা অন্য কোনও প্রকল্পে লোড হবে না যা মাইনওয়াইন্ডোহীন ছিল একটি নতুন প্রকল্পে এবং এই ত্রুটিটি পেয়েছে।

আমার জন্য এটি ঠিক করতে Andreas Kahler এর বিপরীত পদ্ধতির কাজটি গ্রহণ করেছে:

একটি উইন্ডো ফাইল তৈরি করার পরে এবং এই ফাইলটিতে স্টার্টআপ ইউরি সেট করার পরে আমি অ্যাপ্লিকেশনএক্সএএমএল 'বিল্ড অ্যাকশন' বৈশিষ্ট্যটির পৃষ্ঠাটি অ্যাপ্লিকেশন ডেফিনিশনটিতে স্যুইচ করেছি।


0

আপনি যদি ডিফল্ট App.xaml এবং MinWindow.xaml সরিয়ে ফেলে থাকেন তবে .csproj সম্পাদনা করা ভাল ম্যানুয়ালি App.xaml যোগ করার পরে, আপনার .csproj হবে:

<Page Include ="App.xaml">
       <DependentUpon>MSBuild:Compile</DependentUpon>
       <SubType>Code</SubType>
</Page>

এটিতে এতে পরিবর্তন করুন:

<ApplicationDefinition Include="App.xaml">
    <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
</ApplicationDefinition>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.