-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New Template Project for WindowsAppSdk.
- Loading branch information
1 parent
3ed034f
commit 8ae4895
Showing
90 changed files
with
3,196 additions
and
392 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
# Rules in this file were initially inferred by Visual Studio IntelliCode from the Template Studio codebase. | ||
# You can modify the rules from these initially generated values to suit your own policies. | ||
# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference. | ||
|
||
[*.cs] | ||
|
||
#Core editorconfig formatting - indentation | ||
|
||
#use soft tabs (spaces) for indentation | ||
indent_style = space | ||
|
||
#Formatting - new line options | ||
|
||
#place else statements on a new line | ||
csharp_new_line_before_else = true | ||
#require braces to be on a new line for lambdas, methods, control_blocks, types, properties, and accessors (also known as "Allman" style) | ||
csharp_new_line_before_open_brace = all | ||
|
||
#Formatting - organize using options | ||
|
||
#sort System.* using directives alphabetically, and place them before other usings | ||
dotnet_sort_system_directives_first = true | ||
|
||
#Formatting - spacing options | ||
|
||
#require NO space between a cast and the value | ||
csharp_space_after_cast = false | ||
#require a space before the colon for bases or interfaces in a type declaration | ||
csharp_space_after_colon_in_inheritance_clause = true | ||
#require a space after a keyword in a control flow statement such as a for loop | ||
csharp_space_after_keywords_in_control_flow_statements = true | ||
#require a space before the colon for bases or interfaces in a type declaration | ||
csharp_space_before_colon_in_inheritance_clause = true | ||
#remove space within empty argument list parentheses | ||
csharp_space_between_method_call_empty_parameter_list_parentheses = false | ||
#remove space between method call name and opening parenthesis | ||
csharp_space_between_method_call_name_and_opening_parenthesis = false | ||
#do not place space characters after the opening parenthesis and before the closing parenthesis of a method call | ||
csharp_space_between_method_call_parameter_list_parentheses = false | ||
#remove space within empty parameter list parentheses for a method declaration | ||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false | ||
#place a space character after the opening parenthesis and before the closing parenthesis of a method declaration parameter list. | ||
csharp_space_between_method_declaration_parameter_list_parentheses = false | ||
|
||
#Formatting - wrapping options | ||
|
||
#leave code block on separate lines | ||
csharp_preserve_single_line_blocks = false | ||
|
||
#Style - Code block preferences | ||
|
||
#prefer curly braces even for one line of code | ||
csharp_prefer_braces = true:suggestion | ||
|
||
#Style - expression bodied member options | ||
|
||
#prefer expression bodies for accessors | ||
csharp_style_expression_bodied_accessors = true:warning | ||
#prefer block bodies for constructors | ||
csharp_style_expression_bodied_constructors = false:suggestion | ||
#prefer expression bodies for methods | ||
csharp_style_expression_bodied_methods = when_on_single_line:silent | ||
#prefer expression-bodied members for properties | ||
csharp_style_expression_bodied_properties = true:warning | ||
|
||
#Style - expression level options | ||
|
||
#prefer out variables to be declared before the method call | ||
csharp_style_inlined_variable_declaration = false:suggestion | ||
#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them | ||
dotnet_style_predefined_type_for_member_access = true:suggestion | ||
|
||
#Style - Expression-level preferences | ||
|
||
#prefer default over default(T) | ||
csharp_prefer_simple_default_expression = true:suggestion | ||
#prefer objects to be initialized using object initializers when possible | ||
dotnet_style_object_initializer = true:suggestion | ||
|
||
#Style - implicit and explicit types | ||
|
||
#prefer var over explicit type in all cases, unless overridden by another code style rule | ||
csharp_style_var_elsewhere = true:suggestion | ||
#prefer var is used to declare variables with built-in system types such as int | ||
csharp_style_var_for_built_in_types = true:suggestion | ||
#prefer var when the type is already mentioned on the right-hand side of a declaration expression | ||
csharp_style_var_when_type_is_apparent = true:suggestion | ||
|
||
#Style - language keyword and framework type options | ||
|
||
#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them | ||
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion | ||
|
||
#Style - Language rules | ||
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning | ||
csharp_style_var_for_built_in_types = true:warning | ||
|
||
#Style - modifier options | ||
|
||
#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods. | ||
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion | ||
|
||
#Style - Modifier preferences | ||
|
||
#when this rule is set to a list of modifiers, prefer the specified ordering. | ||
csharp_preferred_modifier_order = public,private,protected,internal,static,async,readonly,override,sealed,abstract,virtual:warning | ||
dotnet_style_readonly_field = true:warning | ||
|
||
#Style - Pattern matching | ||
|
||
#prefer pattern matching instead of is expression with type casts | ||
csharp_style_pattern_matching_over_as_with_null_check = true:warning | ||
|
||
#Style - qualification options | ||
|
||
#prefer events not to be prefaced with this. or Me. in Visual Basic | ||
dotnet_style_qualification_for_event = false:suggestion | ||
#prefer fields not to be prefaced with this. or Me. in Visual Basic | ||
dotnet_style_qualification_for_field = false:suggestion | ||
#prefer methods not to be prefaced with this. or Me. in Visual Basic | ||
dotnet_style_qualification_for_method = false:suggestion | ||
#prefer properties not to be prefaced with this. or Me. in Visual Basic | ||
dotnet_style_qualification_for_property = false:suggestion | ||
csharp_indent_labels = one_less_than_current | ||
csharp_using_directive_placement = outside_namespace:silent | ||
csharp_prefer_simple_using_statement = true:warning | ||
csharp_style_namespace_declarations = file_scoped:warning | ||
csharp_style_expression_bodied_operators = false:silent | ||
csharp_style_expression_bodied_indexers = true:silent | ||
csharp_style_expression_bodied_lambdas = true:silent | ||
csharp_style_expression_bodied_local_functions = false:silent | ||
|
||
[*.{cs,vb}] | ||
dotnet_style_operator_placement_when_wrapping = beginning_of_line | ||
tab_width = 4 | ||
indent_size = 4 | ||
end_of_line = crlf | ||
dotnet_style_coalesce_expression = true:suggestion | ||
dotnet_style_null_propagation = true:suggestion | ||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion | ||
dotnet_style_prefer_auto_properties = true:silent | ||
dotnet_style_object_initializer = true:suggestion | ||
dotnet_style_collection_initializer = true:suggestion | ||
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion | ||
dotnet_style_prefer_conditional_expression_over_assignment = true:silent | ||
dotnet_style_prefer_conditional_expression_over_return = true:silent | ||
[*.{cs,vb}] | ||
|
||
#Style - Unnecessary code rules | ||
csharp_style_unused_value_assignment_preference = discard_variable:warning | ||
|
||
#### Naming styles #### | ||
|
||
# Naming rules | ||
|
||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion | ||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface | ||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i | ||
|
||
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types | ||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case | ||
|
||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members | ||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case | ||
|
||
# Symbol specifications | ||
|
||
dotnet_naming_symbols.interface.applicable_kinds = interface | ||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.interface.required_modifiers = | ||
|
||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum | ||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.types.required_modifiers = | ||
|
||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method | ||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected | ||
dotnet_naming_symbols.non_field_members.required_modifiers = | ||
|
||
# Naming styles | ||
|
||
dotnet_naming_style.begins_with_i.required_prefix = I | ||
dotnet_naming_style.begins_with_i.required_suffix = | ||
dotnet_naming_style.begins_with_i.word_separator = | ||
dotnet_naming_style.begins_with_i.capitalization = pascal_case | ||
|
||
dotnet_naming_style.pascal_case.required_prefix = | ||
dotnet_naming_style.pascal_case.required_suffix = | ||
dotnet_naming_style.pascal_case.word_separator = | ||
dotnet_naming_style.pascal_case.capitalization = pascal_case | ||
|
||
dotnet_naming_style.pascal_case.required_prefix = | ||
dotnet_naming_style.pascal_case.required_suffix = | ||
dotnet_naming_style.pascal_case.word_separator = | ||
dotnet_naming_style.pascal_case.capitalization = pascal_case | ||
dotnet_style_explicit_tuple_names = true:suggestion | ||
dotnet_style_prefer_inferred_tuple_names = true:suggestion | ||
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion | ||
dotnet_style_prefer_compound_assignment = true:warning | ||
dotnet_style_prefer_simplified_interpolation = true:suggestion |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
"version": "1.0", | ||
"components": [ | ||
"Microsoft.Component.MSBuild", | ||
"Microsoft.NetCore.Component.Runtime.6.0", | ||
"Microsoft.NetCore.Component.SDK", | ||
"Microsoft.VisualStudio.Component.ManagedDesktop.Core", | ||
"Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites", | ||
"Microsoft.VisualStudio.Component.NuGet", | ||
"Microsoft.VisualStudio.Component.Windows10SDK.19041", | ||
"Microsoft.VisualStudio.Component.Windows10SDK", | ||
"Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging", | ||
"Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs", | ||
"Microsoft.VisualStudio.Workload.ManagedDesktop" | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# Windows App SDK Host | ||
|
||
Allows hosting a Windows App SDK Application in an `IHost` that manages the lifecycle of the hosted Application. | ||
|
||
[![Packages](https://github.com/sharpninja/WindowsAppSdkHost/actions/workflows/packages.yml/badge.svg)](https://github.com/sharpninja/WindowsAppSdkHost/actions/workflows/packages.yml) | ||
|
||
## Usage | ||
|
||
__(Convert existing project or the default template's output)__ | ||
|
||
1. Add `<DefineConstants>DISABLE_XAML_GENERATED_MAIN</DefineConstants>` in the main `PropertyGroup` of your applications project file. | ||
2. Add reference to `CommunityToolkit.Extensions.Hosting.WindowsAppSdk` | ||
3. Add `Program.cs` to the root of your application project. | ||
4. Add this code to the `Program.cs`: | ||
|
||
```csharp | ||
public static class Program | ||
{ | ||
[STAThread] | ||
public static void Main(string[] args) | ||
{ | ||
var builder = new WindowsAppSdkHostBuilder<App>(); | ||
|
||
builder.ConfigureServices( | ||
(_, collection) => | ||
{ | ||
// If your main Window is named differently, change it here. | ||
collection.AddSingleton<MainWindow>(); | ||
} | ||
); | ||
|
||
var app = builder.Build(); | ||
|
||
app.StartAsync().GetAwaiter().GetResult(); | ||
} | ||
} | ||
``` | ||
|
||
5. Set your `Program.cs` as the startup object by adding `<StartupObject>HostedWindowsAppSdk.Program</StartupObject>` to your project file. | ||
6. Use the `CancelableApplication` as the base class of your application by modifying your `App.xaml`: | ||
|
||
```xml | ||
<host:CancelableApplication | ||
x:Class="HostedWindowsAppSdk.App" | ||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||
xmlns:host="using:CommunityToolkit.Extensions.Hosting" | ||
xmlns:local="using:HostedWindowsAppSdk"> | ||
<Application.Resources> | ||
</Application.Resources> | ||
</host:CancelableApplication> | ||
``` | ||
|
||
7. Update your App.xaml.cs to use dependency injection. | ||
|
||
```csharp | ||
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) | ||
{ | ||
// Get window from Dependency Injection. | ||
_mWindow = Services.GetRequiredService<MainWindow>(); | ||
|
||
|
||
_mWindow.Activate(); | ||
} | ||
``` | ||
|
||
## Notes | ||
|
||
The `WindowsAppSdkHost` uses several features of the Microsoft.Extensions ecosystem: | ||
|
||
1. Includes all configuration resources defined for the `DefaultHostBuilder`. | ||
2. Registers the required `CancellableApplication` with dependency injection. | ||
3. Manages the lifecycle of the Application in the `StartAsync` method of the `WindowsAppSdkHost`. | ||
4. Write unhandled errors to default `ILogger`. The `Ilogger` can be obtained from the static `Services` property of the `CancellableApplication` after building the app. | ||
|
||
If there are other patterns you feel should be available or required then start a discussion. |
Oops, something went wrong.