web-dev-qa-db-ja.com

WPFにMain()はありませんか?

私はプログラミングに関しては初心者ですが、普遍的なルールの1つはプログラムがMain()で始まることであると確信していました。 WPFプロジェクトを作成しても表示されません。 Main()は単にWPFで別の名前が付けられていますか?

114
Juice

ビルド中に生成されますが、独自に提供することもできます(必要に応じてプロジェクトプロパティで明確にします)。 obj/debugでアプリファイルを探します。私が持っている(「C#2010 Express」の提供)App.g.i.cs with:

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

Main()メソッドは自動的に作成されます。独自のものを提供する場合は、VS2013およびVS2017でテスト済みである必要があります。

  • ソリューションエクスプローラーでApp.xamlを右クリックし、[プロパティ]を選択します
  • 「ビルドアクション」を「ページ」に変更します(初期値は「ApplicationDefinition」です)

次に、App.xaml.csにMain()メソッドを追加します。次のようになります。

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

Main()は、CLRおよびWPFによって自動的に提供されます。

C#コンパイラは、Main()の実装を含む型を指定するコマンドラインスイッチ_/m_を取ります。慣例により、スタートアップオブジェクトが明示的に指定されていない場合、CLRは静的なMain()メソッドを持つクラスを検索し、呼び出します。 (@Marc Gravelがコメントで指摘したように)

WPFの場合、Main()は_App.xaml_がビルドされ、C#コンパイラがそのクラスをエントリポイントとして使用するように/ mスイッチが指定されると自動的に生成されます。ただし、プロジェクトのプロパティを見ると、スタートアップオブジェクトを選択するための設定があることがわかります。したがって、必要に応じて、Main()を実装する独自のクラスを提供できます。

これにより、Applicationインスタンスを作成し、そのRun()メソッドを呼び出して、WPFインフラストラクチャが適切に開始されるようにする責任があります。

13
Franci Penov

Main()はコンパイル中に生成されます。 App.g.csobj/{Debug,Release}フォルダー)にあります。

6
Vlad

main()はアプリケーションの標準エントリポイントですが、すべてのアプリケーションはそのように構成されています。 XAMLプロジェクトでは、App.XAMLファイルは、StartupUri="MainWindow.xaml"

他の人が述べているように、実際のメイン関数はプロジェクトのXAMLファイルの内容に基づいて生成されます。

6
Annath

メインウィンドウのない別のプロジェクトに読み込まれないファイルを新しいものにコピーし、このエラーが発生しました。

私にとっては、アンドレアス・カーラーとは逆のアプローチで修正する必要がありました。

ウィンドウファイルを作成し、スタートアップURIをこのファイルに設定した後、PageをApp.xamlの「ビルドアクション」プロパティのApplicationDefinitionに切り替えました。

0
Declan Taylor

デフォルトの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>
0
user10372515