私はプログラミングの初心者ですが、プログラムはMain()で始まるという普遍的なルールの1つであると確信していました。WPFプロジェクトを作成しても表示されません。Main()は、WPFで単に別の名前が付けられていますか?
7 に答える
Main()メソッドは自動的に作成されます。独自のものを提供する場合は、次のことを行う必要があります(VS2013、VS2017、およびVS2019でテスト済み)。
- ソリューションエクスプローラーでApp.xamlを右クリックし、[プロパティ]を選択します
- 「ビルドアクション」を「ページ」に変更します(初期値は「ApplicationDefinition」です)
次に、Main()メソッドをApp.xaml.csに追加するだけです。これは次のようになります。
[STAThread]
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
ビルド中に生成されますが、独自に提供することもできます(必要に応じてproject-propertiesで曖昧さを解消します)。obj/debugでアプリファイルを探します。私は(「C#2010Express」の礼儀)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();
}
}
}
Main()
CLRとWPFによって自動的に提供されます。
C#コンパイラは/m
、の実装を含むタイプを指定するコマンドラインスイッチを使用しますMain()
。慣例により、スタートアップオブジェクトが明示的に指定されていない場合、CLRは静的Main()
メソッドを持つクラスを検索し、それを呼び出します。(@Marc Gravelが彼のコメントで指摘したように)
WPFの場合、はビルドMain()
時に自動的に生成App.xaml
され、C#コンパイラがそのクラスをエントリポイントとして使用するように/mスイッチが指定されます。ただし、プロジェクトのプロパティを見ると、起動オブジェクトを選択するための設定があることがわかります。したがって、必要に応じて、を実装する独自のクラスを提供できますMain()
。
Application
これにより、インスタンスを作成し、そのメソッドを呼び出しRun()
て、WPFインフラストラクチャが適切に開始されるようにする責任が発生することに注意してください。
Main()
コンパイル中に生成されます。App.g.cs
あなたはそれを(obj/{Debug,Release}
フォルダ内に)見つけることができます。
main()
はアプリケーションの標準のエントリポイントですが、すべてのアプリケーションはそのように構成されています。XAMLプロジェクトでは、App.XAMLファイルはそれが言うエントリポイントを指定しますStartupUri="MainWindow.xaml"
。
他の人が述べているように、実際のmain関数は、プロジェクト内のXAMLファイルの内容に基づいて生成されます。
メインウィンドウがない別のプロジェクトにロードされないファイルを新しいプロジェクトにコピーしたところ、このエラーが発生しました。
私にとっては、AndreasKahlerとは逆のアプローチで修正する必要がありました。
ウィンドウファイルを作成し、起動URIをこのファイルに設定した後、PageをApp.xamlのApplicationDefinition'BuildAction'プロパティに切り替えました。
デフォルトの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>