Skip to content

Commit

Permalink
Feature: Update to netcore 3.1 (#101)
Browse files Browse the repository at this point in the history
Fixes #87
  • Loading branch information
Kieranties authored Feb 25, 2020
1 parent fc7bac0 commit 78a6947
Show file tree
Hide file tree
Showing 96 changed files with 1,932 additions and 1,005 deletions.
170 changes: 93 additions & 77 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,82 +1,98 @@
# Suppress: EC112
root = true

[*]
end_of_line = crlf
indent_style = space
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8
end_of_line = crlf
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.cs]
indent_size = 4
dotnet_sort_system_directives_first = false
dotnet_style_coalesce_expression = true : warning
dotnet_style_collection_initializer = true : warning
dotnet_style_explicit_tuple_names = true : warning
dotnet_style_null_propagation = true : warning
dotnet_style_object_initializer = true : warning
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity : warning
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity : warning
dotnet_style_parentheses_in_other_operators = always_for_clarity : warning
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity : warning
dotnet_style_predefined_type_for_locals_parameters_members = true : error
dotnet_style_predefined_type_for_member_access = true : error
dotnet_style_prefer_auto_properties = true : error
dotnet_style_prefer_conditional_expression_over_assignment = true
dotnet_style_prefer_conditional_expression_over_return = true
dotnet_style_prefer_inferred_anonymous_type_member_names = true : warning
dotnet_style_prefer_is_null_check_over_reference_equality_method = true : warning
dotnet_style_qualification_for_event = false : none
dotnet_style_qualification_for_field = false : none
dotnet_style_qualification_for_method = false : none
dotnet_style_qualification_for_property = false : none
dotnet_style_readonly_field = true : warning
dotnet_style_require_accessibility_modifiers = always : warning
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_rule.private_fields.severity = error
dotnet_naming_rule.private_fields.symbols = private_fields
dotnet_naming_rule.private_fields.style = underscore_prefix
dotnet_naming_style.underscore_prefix.capitalization = camel_case
dotnet_naming_style.underscore_prefix.required_prefix = _
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_switch_labels = true
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true
csharp_prefer_braces = true : silent
csharp_prefer_simple_default_expression = true : warning
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_around_binary_operators = before_and_after
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_style_conditional_delegate_call = true : warning
csharp_style_deconstructed_variable_declaration = true : warning
csharp_style_expression_bodied_accessors = when_on_single_line : suggestion
csharp_style_expression_bodied_constructors = false : none
csharp_style_expression_bodied_indexers = when_on_single_line : suggestion
csharp_style_expression_bodied_methods = false : none
csharp_style_expression_bodied_operators = when_on_single_line : suggestion
csharp_style_expression_bodied_properties = when_on_single_line : suggestion
csharp_style_inlined_variable_declaration = true : warning
csharp_style_pattern_local_over_anonymous_function = true : warning
csharp_style_pattern_matching_over_as_with_null_check = true : warning
csharp_style_pattern_matching_over_is_with_cast_check = true : warning
csharp_style_throw_expression = true : warning
csharp_style_var_elsewhere = true : warning
csharp_style_var_for_built_in_types = true : warning
csharp_style_var_when_type_is_apparent = true : warning
indent_size = 4
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = flush_left
csharp_indent_switch_labels = true
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true
csharp_prefer_braces = true : silent
csharp_prefer_simple_default_expression = true : warning
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_around_binary_operators = before_and_after
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_style_conditional_delegate_call = true : warning
csharp_style_deconstructed_variable_declaration = true : warning
csharp_style_expression_bodied_accessors = when_on_single_line : suggestion
csharp_style_expression_bodied_constructors = false : none
csharp_style_expression_bodied_indexers = when_on_single_line : suggestion
csharp_style_expression_bodied_methods = false : none
csharp_style_expression_bodied_operators = when_on_single_line : suggestion
csharp_style_expression_bodied_properties = when_on_single_line : suggestion
csharp_style_inlined_variable_declaration = true : warning
csharp_style_pattern_local_over_anonymous_function = true : warning
csharp_style_pattern_matching_over_as_with_null_check = true : warning
csharp_style_pattern_matching_over_is_with_cast_check = true : warning
csharp_style_throw_expression = true : warning
csharp_style_var_elsewhere = true : warning
csharp_style_var_for_built_in_types = true : warning
csharp_style_var_when_type_is_apparent = true : warning
dotnet_code_quality.null_check_validation_methods = ArgumentNotNull|NotNull
# SA1101: Prefix local calls with this
dotnet_diagnostic.SA1101.severity = none
# SA1128: Put constructor initializers on their own line
dotnet_diagnostic.SA1128.severity = none
# SA1200: Using directives should be placed correctly
dotnet_diagnostic.SA1200.severity = none
# SA1309: Field names should not begin with underscore
dotnet_diagnostic.SA1309.severity = none
# SA1413: Use trailing comma in multi-line initializers
dotnet_diagnostic.SA1413.severity = none
dotnet_naming_rule.private_fields.severity = error
dotnet_naming_rule.private_fields.style = underscore_prefix
dotnet_naming_rule.private_fields.symbols = private_fields
dotnet_naming_style.underscore_prefix.capitalization = camel_case
dotnet_naming_style.underscore_prefix.required_prefix = _
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = false
dotnet_style_coalesce_expression = true : warning
dotnet_style_collection_initializer = true : warning
dotnet_style_explicit_tuple_names = true : warning
dotnet_style_null_propagation = true : warning
dotnet_style_object_initializer = true : warning
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity : warning
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity : warning
dotnet_style_parentheses_in_other_operators = always_for_clarity : warning
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity : warning
dotnet_style_predefined_type_for_locals_parameters_members = true : error
dotnet_style_predefined_type_for_member_access = true : error
dotnet_style_prefer_auto_properties = true : error
dotnet_style_prefer_conditional_expression_over_assignment = true
dotnet_style_prefer_conditional_expression_over_return = true
dotnet_style_prefer_inferred_anonymous_type_member_names = true : warning
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true : warning
dotnet_style_qualification_for_event = false : none
dotnet_style_qualification_for_field = false : none
dotnet_style_qualification_for_method = false : none
dotnet_style_qualification_for_property = false : none
dotnet_style_readonly_field = true : warning
dotnet_style_require_accessibility_modifiers = always : warning
File renamed without changes.
File renamed without changes.
33 changes: 32 additions & 1 deletion .github/CONTRIBUTING → .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,37 @@ Then add the `PackageReference` to the `*.csproj` where the package will be used

> Note: Do not include the `Version` attribute in the `*.csproj`
### String Resources

This project utilises a custom process to generate classes to manage string localisation.
To localise strings within a library:

1. Create a resx file with _no culture extension_ (e.g. `Resources.rex` **not** `Resources.en.resx`)
2. In the relevant csproj _remove_ the auto added designer class
3. In the relevant csproj _replace_ the metadata for the rex file with `<UseResourceGen>true</UseResourceGen>`
4. Run `build.ps1 -Resources` from the root of the repo.

> Additional metadata tokens may be set (the defaults should be sufficient) See `Directory.Build.targets` for details
When ever you make a change to your resource file, re-run `build.ps1 -Resources`.

#### Providing Parameter Values

The resource generator will create properties for resource strings by default.
If the string contains token replacements (e.g. `My {0} {1} string`) provide a csv comment for the entry
with the names of the expected members (e.g. `first,second`)

#### Adding Additional Cultures

Additional cultures can be added by providing culture specific resource files (e.g. `Resources.en.resx`, `Resources.en-gb.resx`)
These files need no special treatment and only need to be added to the project.

#### Validation

When the class files are generated they hold a reference to the hash of the source resource file.
When the project is built the hashes are compared. If a difference is found errors are thrown.

The issues can be resolved by regenerating the resource.

Workflow with Git
-----------------

Expand Down Expand Up @@ -121,4 +152,4 @@ approver will clean things up.
Contact
-------

If you have any queries, just ping @Kieranties
If you have any queries, just ping @Kieranties
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ bin
obj
integration/temp
log.txt
/build
/docs/api/*.yml
/docs/api/.manifest
coverage.json
Expand Down
2 changes: 1 addition & 1 deletion .simpleversion.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "0.2.0",
"version": "0.3.0",
"label": [ "alpha1" ],
"branches": {
"release": [
Expand Down
15 changes: 9 additions & 6 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>

<PropertyGroup Label="All package targets">
<TargetFramework>net461</TargetFramework>
<LangVersion>latest</LangVersion>
</PropertyGroup>

<!-- Meta properties: https://docs.microsoft.com/en-us/dotnet/core/tools/csproj -->
Expand All @@ -33,10 +33,10 @@
<None Include="logo.png" Condition="Exists('logo.png')" Pack="true" PackagePath="\" />
<None Include="$(MSBuildThisFileDirectory)shared\logo.png" Condition="!Exists('logo.png')" Pack="true" PackagePath="\" />
</ItemGroup>

<PropertyGroup Label="Build Attributes">
<MSBuildTreatWarningsAsErrors>true</MSBuildTreatWarningsAsErrors>
<TreatWarningsAsErrors Condition="'$(BuildingInsideVisualStudio)' != 'true'">true</TreatWarningsAsErrors>
<TreatWarningsAsErrors Condition="$(Configuration) == 'Release'">true</TreatWarningsAsErrors>
<MSBuildTreatWarningsAsErrors Condition="$(Configuration) == 'Release'">true</MSBuildTreatWarningsAsErrors>
<!-- NU5105 - Usage of semver 2 versioning -->
<NoWarn>$(NoWarn);NU5105</NoWarn>
</PropertyGroup>
Expand All @@ -45,7 +45,10 @@
<AdditionalFiles Include="$(MSBuildThisFileDirectory)shared/stylecop.json" Link="stylecop.json" />
</ItemGroup>

<PropertyGroup Label="Shared properties">
<CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)shared/SimpleVersion.ruleset</CodeAnalysisRuleSet>
<PropertyGroup>
<SkipDefaultEditorConfigAsAdditionalFile>true</SkipDefaultEditorConfigAsAdditionalFile>
</PropertyGroup>
<ItemGroup>
<AdditionalFiles Include="$(MSBuildThisFileDirectory).editorconfig" />
</ItemGroup>
</Project>
48 changes: 48 additions & 0 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<Project>

<ItemDefinitionGroup>
<NeedsGeneration>
<GeneratedFileName>%(Filename).Generated.cs</GeneratedFileName>
<Namespace>$(RootNamespace)</Namespace>
<ClassName>%(Filename)</ClassName>
<AccessModifier>internal</AccessModifier>
</NeedsGeneration>
</ItemDefinitionGroup>

<Target Name="ResourceGen">

<ItemGroup>
<NeedsGeneration Include="@(EmbeddedResource)" Condition="'%(EmbeddedResource.UseResourceGen)' == 'true'" />
</ItemGroup>

<Exec Condition="'@(NeedsGeneration)' != ''"
ContinueOnError="false"
ConsoleToMsBuild="true"
Command="powershell.exe -NoProfile -ExecutionPolicy Unrestricted ^
-File $(MSBuildThisFileDirectory)build//scripts/GenerateResource.ps1 ^
$([System.IO.Path]::GetFullPath(%(NeedsGeneration.Identity))) ^
%(NeedsGeneration.GeneratedFileName) ^
%(NeedsGeneration.Namespace) ^
%(NeedsGeneration.ClassName) ^
%(NeedsGeneration.AccessModifier)">
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
</Exec>
</Target>

<Target Name="ValidateResourceGen" BeforeTargets="Build">

<ItemGroup>
<NeedsGeneration Include="@(EmbeddedResource)" Condition="'%(EmbeddedResource.UseResourceGen)' == 'true'" />
</ItemGroup>

<Exec Condition="'@(NeedsGeneration)' != ''"
ContinueOnError="false"
ConsoleToMsBuild="true"
Command="powershell.exe -NoProfile -ExecutionPolicy Unrestricted ^
-File $(MSBuildThisFileDirectory)build/scripts/ValidateResource.ps1 ^
$([System.IO.Path]::GetFullPath(%(NeedsGeneration.Identity))) ^
%(NeedsGeneration.GeneratedFileName)">
</Exec>
</Target>

</Project>
Loading

0 comments on commit 78a6947

Please sign in to comment.