私はプログラミングに関しては初心者ですが、プログラムがMain()で始まるという共通のルールの1つだと確信していました。WPFプロジェクトを作成するときに表示されません。Main()はWPFで単に別の名前を付けていますか?
私はプログラミングに関しては初心者ですが、プログラムがMain()で始まるという共通のルールの1つだと確信していました。WPFプロジェクトを作成するときに表示されません。Main()はWPFで単に別の名前を付けていますか?
回答:
ビルド時に生成されますが、独自に提供することもできます(必要に応じて、プロジェクトプロパティで明確化します)。obj / debugでアプリファイルを探します。私は( "C#2010 Express"の厚意により)以下を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();
}
}
}
App.g.csも存在します。しかし、私は追加しようとしましたMain()が、プロジェクトを再構築するたびに、ここにあるものに戻ります。別のクラスで独自のクラスを作成しようとしましたが、プロジェクトプロパティはMyProject.Appのみを検出し、他のクラスは検出しないため、リダイレクトできません。
App.xaml.csビジュアルスタジオで開きます。ナビゲーションバーを使用> [メソッド]ドロップダウンリスト>選択Main(グレー表示)。これはあなたを連れて行きますApp.g.i.cs。
Main()メソッドは自動的に作成されます。独自に提供する必要がある場合は、VS2013およびVS2017でテスト済みです。
次に、Main()メソッドをApp.xaml.csに追加します。次のようになります。
[STAThread]
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
Main() CLRとWPFによって自動的に提供されます。
C#コンパイラは、/mの実装を含む型を指定するコマンドラインスイッチを使用しますMain()。規約により、スタートアップオブジェクトが明示的に指定されていない場合、CLRは静的Main()メソッドを持つクラスを検索し、それを呼び出します。(@Marc Gravelがコメントで指摘したように)
WPFの場合、はビルドMain()時に自動的に生成App.xamlされ、C#コンパイラがそのクラスをエントリポイントとして使用するように/ mスイッチが指定されます。ただし、プロジェクトのプロパティを見ると、スタートアップオブジェクトを選択するための設定があります。したがって、必要に応じて、を実装する独自のクラスを提供できますMain()。
これにより、Applicationインスタンスを作成し、そのRun()メソッドを呼び出して、WPFインフラストラクチャが適切に開始されていることを確認する必要があります。
/mそれがなければタイプが何と呼ばれるかは気にしません。明示的でない場合は、適切なMainメソッドを見つけようとし、0か1つ以上見つかった場合は文句を言います。例として、言語仕様(§1.1)の「Hello World」サンプルHelloはタイプ名として使用します。
main()、CLR(ランタイム)によって提供されると言っても正確ではなく、実際にそれを生成するのはコンパイラーです。
MyApp.App app = new MyApp.App();)に追加して呼び出す必要がある聴衆を思い出させるために、私の+1を追加しました。よかった。また、以前に追加する必要がありますが、幸いなことに、元のメソッドはまだそこにあります(App.g.csに表示されているため、追加する必要はありません!)。.Run()Main()app.InitializeComponent();app.Run()InitializeComponent()
デフォルトの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>