Template
Compare commits
20
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
388c036ce6
|
||
|
|
3546994587
|
||
|
|
2f1e580e49
|
||
|
|
ad4aa99cfa
|
||
|
|
3074c580dc
|
||
|
|
8e3b5ebdfc
|
||
|
|
ec165d1425
|
||
|
|
4913ab7ecf
|
||
|
|
c5a4ba6103
|
||
|
|
4d25634091
|
||
|
|
9193f0b412
|
||
|
|
db57eed6c0
|
||
|
|
2be87a7da6
|
||
|
|
7d2ee5809b
|
||
|
|
7af0ee5bd6
|
||
|
|
fd614be89c
|
||
|
|
03c0c60fd7 | ||
|
|
3d39000ad0 | ||
|
|
26c6fd3517 | ||
|
|
def7541ca1 |
No files matched your search
+1
-164
@@ -13,168 +13,5 @@ end_of_line = lf
|
|||||||
[*.{xml,csproj,props,targets,nuspec}]
|
[*.{xml,csproj,props,targets,nuspec}]
|
||||||
max_line_length = 1000
|
max_line_length = 1000
|
||||||
|
|
||||||
[*.{cs,vb}]
|
[{*.Generated.*.cs,**/Migrations/*.cs}]
|
||||||
# Organize usings
|
|
||||||
dotnet_sort_system_directives_first = true
|
|
||||||
dotnet_separate_import_directive_groups = true
|
|
||||||
csharp_using_directive_placement = inside_namespace:suggestion
|
|
||||||
csharp_prefer_simple_using_statement = true:suggestion
|
|
||||||
csharp_style_namespace_declarations = file_scoped:warning
|
|
||||||
# this. preferences
|
|
||||||
dotnet_style_qualification_for_field = false:none
|
|
||||||
dotnet_style_qualification_for_property = false:none
|
|
||||||
dotnet_style_qualification_for_method = false:none
|
|
||||||
dotnet_style_qualification_for_event = false:none
|
|
||||||
# Language keywords vs BCL types preferences
|
|
||||||
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
|
|
||||||
dotnet_style_predefined_type_for_member_access = true:suggestion
|
|
||||||
# Parentheses preferences
|
|
||||||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
|
|
||||||
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
|
|
||||||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
|
|
||||||
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
|
|
||||||
# Modifier preferences
|
|
||||||
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
|
|
||||||
dotnet_style_readonly_field = true:suggestion
|
|
||||||
# Expression-level preferences
|
|
||||||
dotnet_style_object_initializer = true:suggestion
|
|
||||||
dotnet_style_collection_initializer = true:suggestion
|
|
||||||
dotnet_style_explicit_tuple_names = true:suggestion
|
|
||||||
dotnet_style_null_propagation = true:suggestion
|
|
||||||
dotnet_style_coalesce_expression = true:suggestion
|
|
||||||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
|
|
||||||
dotnet_style_prefer_inferred_tuple_names = true:suggestion
|
|
||||||
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
|
|
||||||
dotnet_style_prefer_auto_properties = true:silent
|
|
||||||
dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
|
|
||||||
dotnet_style_prefer_conditional_expression_over_return = true:suggestion
|
|
||||||
# var preferences
|
|
||||||
csharp_style_var_for_built_in_types = true:suggestion
|
|
||||||
csharp_style_var_when_type_is_apparent = true:suggestion
|
|
||||||
csharp_style_var_elsewhere = true:suggestion
|
|
||||||
# Expression-bodied members
|
|
||||||
csharp_style_expression_bodied_methods = when_on_single_line:suggestion
|
|
||||||
csharp_style_expression_bodied_constructors = when_on_single_line:suggestion
|
|
||||||
csharp_style_expression_bodied_operators = when_on_single_line:suggestion
|
|
||||||
csharp_style_expression_bodied_properties = when_on_single_line:suggestion
|
|
||||||
csharp_style_expression_bodied_indexers = when_on_single_line:suggestion
|
|
||||||
csharp_style_expression_bodied_accessors = when_on_single_line:suggestion
|
|
||||||
csharp_style_expression_bodied_lambdas = when_on_single_line:suggestion
|
|
||||||
csharp_style_expression_bodied_local_functions = when_on_single_line:suggestion
|
|
||||||
# Pattern matching preferences
|
|
||||||
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
|
||||||
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
|
||||||
# Null-checking preferences
|
|
||||||
csharp_style_throw_expression = true:suggestion
|
|
||||||
csharp_style_conditional_delegate_call = true:suggestion
|
|
||||||
# Modifier preferences
|
|
||||||
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
|
|
||||||
# Expression-level preferences
|
|
||||||
csharp_prefer_braces = true:none
|
|
||||||
csharp_style_deconstructed_variable_declaration = true:suggestion
|
|
||||||
csharp_prefer_simple_default_expression = true:suggestion
|
|
||||||
csharp_style_pattern_local_over_anonymous_function = true:suggestion
|
|
||||||
csharp_style_inlined_variable_declaration = true:suggestion
|
|
||||||
# Unused value preferences
|
|
||||||
csharp_style_unused_value_expression_statement_preference = discard_variable:none
|
|
||||||
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
|
|
||||||
# Index and Range preferences
|
|
||||||
csharp_style_prefer_index_operator = true:suggestion
|
|
||||||
csharp_style_prefer_range_operator = true:suggestion
|
|
||||||
csharp_prefer_static_local_function = true:suggestion
|
|
||||||
csharp_style_prefer_switch_expression = true:suggestion
|
|
||||||
# New line preferences
|
|
||||||
csharp_new_line_before_open_brace = all
|
|
||||||
csharp_new_line_before_else = true
|
|
||||||
csharp_new_line_before_catch = true
|
|
||||||
csharp_new_line_before_finally = true
|
|
||||||
csharp_new_line_before_members_in_object_initializers = true
|
|
||||||
csharp_new_line_before_members_in_anonymous_types = true
|
|
||||||
csharp_new_line_between_query_expression_clauses = true
|
|
||||||
# Indentation preferences
|
|
||||||
csharp_indent_case_contents = true
|
|
||||||
csharp_indent_switch_labels = true
|
|
||||||
csharp_indent_labels = flush_left
|
|
||||||
csharp_indent_block_contents = true
|
|
||||||
csharp_indent_braces = false
|
|
||||||
csharp_indent_case_contents_when_block = true
|
|
||||||
# Space preferences
|
|
||||||
csharp_space_after_cast = false
|
|
||||||
csharp_space_after_keywords_in_control_flow_statements = true
|
|
||||||
csharp_space_between_method_call_parameter_list_parentheses = false
|
|
||||||
csharp_space_between_method_declaration_parameter_list_parentheses = false
|
|
||||||
csharp_space_between_parentheses = false
|
|
||||||
csharp_space_before_colon_in_inheritance_clause = true
|
|
||||||
csharp_space_after_colon_in_inheritance_clause = true
|
|
||||||
csharp_space_around_binary_operators = before_and_after
|
|
||||||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
|
|
||||||
csharp_space_between_method_call_name_and_opening_parenthesis = false
|
|
||||||
csharp_space_between_method_call_empty_parameter_list_parentheses = false
|
|
||||||
csharp_space_between_method_declaration_name_and_open_parenthesis = false
|
|
||||||
csharp_space_after_comma = true
|
|
||||||
csharp_space_before_comma = false
|
|
||||||
csharp_space_after_dot = false
|
|
||||||
csharp_space_before_dot = false
|
|
||||||
csharp_space_after_semicolon_in_for_statement = true
|
|
||||||
csharp_space_before_semicolon_in_for_statement = false
|
|
||||||
csharp_space_around_declaration_statements = false
|
|
||||||
csharp_space_before_open_square_brackets = false
|
|
||||||
csharp_space_between_empty_square_brackets = false
|
|
||||||
csharp_space_between_square_brackets = false
|
|
||||||
# Wrapping preferences
|
|
||||||
csharp_preserve_single_line_statements = true
|
|
||||||
csharp_preserve_single_line_blocks = true
|
|
||||||
# ReSharper/Rider custom properties (only honoured in .editorconfig, not .globalconfig)
|
|
||||||
# Inspection severities
|
|
||||||
resharper_class_never_instantiated_global_highlighting = none
|
|
||||||
resharper_class_never_instantiated_local_highlighting = none
|
|
||||||
resharper_convert_to_primary_constructor_highlighting = none
|
|
||||||
resharper_cognitive_complexity_threshold = 20
|
|
||||||
# Blank lines
|
|
||||||
resharper_blank_lines_around_region = 0
|
|
||||||
resharper_blank_lines_before_single_line_comment = 1
|
|
||||||
# Line breaks
|
|
||||||
resharper_new_line_before_while = true
|
|
||||||
resharper_place_accessor_attribute_on_same_line = never
|
|
||||||
resharper_place_accessorholder_attribute_on_same_line = never
|
|
||||||
resharper_place_field_attribute_on_same_line = never
|
|
||||||
resharper_wrap_before_binary_opsign = true
|
|
||||||
resharper_wrap_chained_method_calls = chop_if_long
|
|
||||||
resharper_wrap_linq_expressions = chop_always
|
|
||||||
resharper_wrap_ternary_expr_style = chop_always
|
|
||||||
# Spaces, alignment and usings
|
|
||||||
resharper_space_within_single_line_array_initializer_braces = true
|
|
||||||
resharper_alignment_tab_fill_style = use_spaces
|
|
||||||
resharper_qualified_using_at_nested_scope = true
|
|
||||||
# Naming (consolidated here from DotSettings + .globalconfig so Roslyn and Rider both enforce).
|
|
||||||
# Order matters: const and static-readonly fields are PascalCase and must be listed before
|
|
||||||
# the private-field camelCase rule so they are matched first (mirrors ReSharper's groups).
|
|
||||||
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = warning
|
|
||||||
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
|
|
||||||
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
|
|
||||||
dotnet_naming_symbols.constant_fields.applicable_kinds = field
|
|
||||||
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
|
|
||||||
dotnet_naming_symbols.constant_fields.required_modifiers = const
|
|
||||||
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
|
|
||||||
dotnet_naming_rule.static_readonly_fields_should_be_pascal_case.severity = warning
|
|
||||||
dotnet_naming_rule.static_readonly_fields_should_be_pascal_case.symbols = static_readonly_fields
|
|
||||||
dotnet_naming_rule.static_readonly_fields_should_be_pascal_case.style = pascal_case_style
|
|
||||||
dotnet_naming_symbols.static_readonly_fields.applicable_kinds = field
|
|
||||||
dotnet_naming_symbols.static_readonly_fields.applicable_accessibilities = private
|
|
||||||
dotnet_naming_symbols.static_readonly_fields.required_modifiers = static,readonly
|
|
||||||
dotnet_naming_rule.private_fields_should_be_camel_case.severity = warning
|
|
||||||
dotnet_naming_rule.private_fields_should_be_camel_case.symbols = private_fields
|
|
||||||
dotnet_naming_rule.private_fields_should_be_camel_case.style = camel_case_style
|
|
||||||
dotnet_naming_symbols.private_fields.applicable_kinds = field
|
|
||||||
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
|
|
||||||
dotnet_naming_style.camel_case_style.capitalization = camel_case
|
|
||||||
|
|
||||||
[*.vb]
|
|
||||||
# Modifier preferences
|
|
||||||
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion
|
|
||||||
|
|
||||||
[{*.Generated.*.cs,**/Migrations/*.cs,**/*ModelSnapshot.cs}]
|
|
||||||
generated_code = true
|
generated_code = true
|
||||||
|
|
||||||
[{tests,samples}/**/*.cs]
|
|
||||||
dotnet_diagnostic.CS1591.severity = none
|
|
||||||
+2
-3
@@ -1,3 +1,2 @@
|
|||||||
* text=auto
|
Directory.Packages.props merge=union
|
||||||
*.png binary
|
Directory.Packages.template.props merge=upstream-wins
|
||||||
*.cs diff=csharp
|
|
||||||
@@ -9,11 +9,6 @@ You are a senior software engineer and solution architect. Prioritize correctnes
|
|||||||
- When ambiguous or multiple approaches exist, **ask clarifying questions with 2–4 predefined options** (include trade-offs). Only proceed silently when intent is obvious.
|
- When ambiguous or multiple approaches exist, **ask clarifying questions with 2–4 predefined options** (include trade-offs). Only proceed silently when intent is obvious.
|
||||||
- Briefly explain every suggestion: what it does, why, and how it fits the architecture.
|
- Briefly explain every suggestion: what it does, why, and how it fits the architecture.
|
||||||
- When goals conflict (e.g., performance vs readability), **favour performance** unless readability is significantly harmed.
|
- When goals conflict (e.g., performance vs readability), **favour performance** unless readability is significantly harmed.
|
||||||
- **Persist learnings** — when you discover a pattern, resolve a non-obvious issue, or make a decision worth remembering, save it to memory. Use repo memory for project-specific facts and user memory for general preferences. Keep memory up to date when instructions or project conventions change.
|
|
||||||
|
|
||||||
## Build & test
|
|
||||||
|
|
||||||
- Always build and test the entire solution (pass the solution slnx as a parameter to `dotnet build` and `dotnet test`).
|
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
|
|||||||
@@ -10,17 +10,11 @@ description: "Use when writing API endpoints, routing, middleware, request/respo
|
|||||||
|
|
||||||
## Endpoints
|
## Endpoints
|
||||||
|
|
||||||
- Prefer **Minimal APIs**; use Controllers only when the endpoint group requires action filters, model binding customisation, or exceeds 10 endpoints sharing significant cross-cutting logic.
|
- Prefer **Minimal APIs**; use Controllers only when the added structure is justified.
|
||||||
- Group related endpoints using `MapGroup()` with a shared prefix and tag.
|
- Group related endpoints using `MapGroup()` with a shared prefix and tag.
|
||||||
- Use **typed results** (`TypedResults.Ok()`, `TypedResults.NotFound()`) over untyped `Results` for OpenAPI metadata inference.
|
- Use **typed results** (`TypedResults.Ok()`, `TypedResults.NotFound()`) over untyped `Results` for OpenAPI metadata inference.
|
||||||
- Return **`ProblemDetails`** (RFC 9457) for all error responses — configure via `AddProblemDetails()`.
|
- Return **`ProblemDetails`** (RFC 9457) for all error responses — configure via `AddProblemDetails()`.
|
||||||
|
|
||||||
## Authorisation
|
|
||||||
|
|
||||||
- Apply `.RequireAuthorization()` at the group level for protected resources.
|
|
||||||
- Reference policy names through `const string` fields on a shared static class (e.g., `.RequireAuthorization(AuthorizationPolicies.RequireAdminRole)`) instead of inline string literals.
|
|
||||||
- Mark public endpoints explicitly with `.AllowAnonymous()`.
|
|
||||||
|
|
||||||
## Request Handling
|
## Request Handling
|
||||||
|
|
||||||
- Bind request data with **`[AsParameters]`** for complex parameter sets.
|
- Bind request data with **`[AsParameters]`** for complex parameter sets.
|
||||||
|
|||||||
@@ -8,22 +8,11 @@ Code style is enforced by `.editorconfig`, `.globalconfig`, and StyleCop analyze
|
|||||||
|
|
||||||
## Non-Obvious Defaults
|
## Non-Obvious Defaults
|
||||||
|
|
||||||
- XML doc comments required on all `public` and `protected` members in `src/` (suppressed in `tests/` and `samples/`).
|
- XML doc comments required on public API in `src/` (suppressed in `tests/` and `samples/`).
|
||||||
- Avoid `null!` (null-forgiving operator) — fix the nullability flow instead of suppressing the warning.
|
- Avoid `null!` (null-forgiving operator) — fix the nullability flow instead of suppressing the warning.
|
||||||
|
|
||||||
## Comments
|
|
||||||
|
|
||||||
Applies to `src/`. Tests keep the guidance in the testing instructions.
|
|
||||||
|
|
||||||
- **No comments inside member bodies.** Anything worth saying goes in an XML doc comment on the member that says it.
|
|
||||||
- Document `private` and `internal` members — the analyzers only *require* docs on exposed elements, they do not object to more. Put the "why" in `<remarks>`.
|
|
||||||
- If the explanation is about one statement rather than the whole member, extract that statement into a named private method and document that instead.
|
|
||||||
- For logic inside lambdas or local functions where an XML doc comment is not applicable, extract the logic into a named private method and document that method instead.
|
|
||||||
- Never state what the code already shows, and never narrate history — a past bug, a change, or an answer to a reviewer belongs in the commit message, where it cannot go stale.
|
|
||||||
- Sole exception: the justification required beside a narrow analyzer suppression, which has nowhere else to live.
|
|
||||||
|
|
||||||
## Patterns
|
## Patterns
|
||||||
|
|
||||||
- Prefer **records** for DTOs, value objects, and other immutable data carriers.
|
- Prefer **records** for DTOs, value objects, and other immutable data carriers.
|
||||||
- Use `LoggerMessage`-generated `partial` methods on a `partial class` — never log inline (e.g., `logger.LogInformation(…)`). Do not make existing types partial without explicit user sign-off. Do not fall back to inline logging.
|
- Use `LoggerMessage`-generated `partial` methods on a `partial class` — never log inline (e.g., `logger.LogInformation(…)`).
|
||||||
- If a type cannot be made partial (no user sign-off obtained), do not modify its logging calls — surface the conflict to the user and wait for instruction rather than silently falling back to inline logging. Present at least these options: (1) make the type `partial`; (2) move the `LoggerMessage` methods to a separate type — group reusable messages in one shared class, and keep the rest in a per-type class.
|
|
||||||
@@ -16,11 +16,11 @@ applyTo: "docker/**,compose*.yaml"
|
|||||||
|
|
||||||
## Build Args
|
## Build Args
|
||||||
|
|
||||||
- `RUNTIME_BASE`: `web` (ASP.NET), `app` (console), or `self-contained`. If a use case does not match `web`, `app`, or `self-contained`, do not invent a new `RUNTIME_BASE` value — flag this to the user and ask which existing value best fits their scenario.
|
- `RUNTIME_BASE`: `web` (ASP.NET), `app` (console), or `self-contained`
|
||||||
- `CONFIGURATION`: `Release` (default) or `Debug`
|
- `CONFIGURATION`: `Release` (default) or `Debug`
|
||||||
- `PUBLISHED_PROJECT`: Project name to publish (without path or extension)
|
- `PUBLISHED_PROJECT`: Project name to publish (without path or extension)
|
||||||
- `DATABASE_PROJECT`: EF Core project for migration bundles
|
- `DATABASE_PROJECT`: EF Core project for migration bundles
|
||||||
- `DBCONTEXT`: Optional DbContext name for migrations. If omitted, the migration bundle step must not pass `--context`; EF Core auto-discovers the single DbContext in `DATABASE_PROJECT`.
|
- `DBCONTEXT`: Optional DbContext name for migrations
|
||||||
|
|
||||||
## Image Selection
|
## Image Selection
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ applyTo: "**/*.{csproj,props,targets}"
|
|||||||
|
|
||||||
## Central Package Management
|
## Central Package Management
|
||||||
|
|
||||||
All package versions are declared in `Directory.Packages.props` at the repo root. In `Directory.Packages.props`, ensure the last child element of the root `<Project>` tag is `<Import Project="Directory.Packages.template.props" />`. `Directory.Packages.template.props` is **READ ONLY**, never edit it. The template provides default `<PackageVersion>` entries; any entry with the same `Include` declared earlier in `Directory.Packages.props` takes precedence over the template default, because MSBuild uses first-definition-wins semantics and the import appears last.
|
All package versions are declared in `Directory.Packages.props` at the repo root. In `.csproj` files:
|
||||||
|
|
||||||
In `.csproj` files:
|
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<!-- Correct -->
|
<!-- Correct -->
|
||||||
@@ -24,8 +22,6 @@ To add or update a version, edit `Directory.Packages.props`:
|
|||||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
```
|
```
|
||||||
|
|
||||||
If the package does not exist in the template, simply add a new `<PackageVersion>` entry in `Directory.Packages.props`. No override logic is needed; the entry will be the sole definition.
|
|
||||||
|
|
||||||
## Properties Set Centrally (Do Not Override)
|
## Properties Set Centrally (Do Not Override)
|
||||||
|
|
||||||
These are configured in the root `Directory.Build.props` — do **not** set them in individual projects:
|
These are configured in the root `Directory.Build.props` — do **not** set them in individual projects:
|
||||||
@@ -41,5 +37,3 @@ Handled automatically via `<InternalsVisibleToSuffix>` in the root props. Defaul
|
|||||||
<InternalsVisibleTo Include="MyProject.IntegrationTests" />
|
<InternalsVisibleTo Include="MyProject.IntegrationTests" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
```
|
```
|
||||||
|
|
||||||
This is in addition to the automatically generated entries; do not remove or duplicate the default suffix entries.
|
|
||||||
@@ -15,10 +15,9 @@ Build configuration is handled by `tests/Directory.Build.props` — do not resta
|
|||||||
|
|
||||||
- Test project: `<ProjectUnderTest>.Tests` (matches InternalsVisibleTo default).
|
- Test project: `<ProjectUnderTest>.Tests` (matches InternalsVisibleTo default).
|
||||||
- Test classes: `<ClassUnderTest>Tests`.
|
- Test classes: `<ClassUnderTest>Tests`.
|
||||||
- Test methods: must use `MethodName_Condition_ExpectedResult` format. Example: `Add_NegativeNumbers_ThrowsArgumentException`.
|
- Test methods: descriptive names — `MethodName_Condition_ExpectedResult` or similar.
|
||||||
|
|
||||||
## Structure
|
## Structure
|
||||||
|
|
||||||
- Follow **Arrange / Act / Assert**.
|
- Follow **Arrange / Act / Assert**.
|
||||||
- Always propose a set of basic tests for new or changed code. A basic test set must include at minimum: one happy-path test, one test per documented edge case or boundary condition, and one test for each expected exception.
|
- Always propose a set of basic tests for new or changed code.
|
||||||
- If no edge cases are explicitly documented, use judgment to identify and cover the most likely boundary conditions (e.g. null inputs, empty collections, zero/max values) and note the assumption in a comment.
|
|
||||||
@@ -10,74 +10,29 @@ Versioning is **GitVersion-driven** (`GitVersion.yml`). Do not hand-pick version
|
|||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
The root `GitVersion.yml` uses the `TrunkBased/preview1` workflow. Its `Mainline` strategy is what makes stable branches increment per commit rather than holding one version until the next tag.
|
|
||||||
|
|
||||||
| Branch | Label | Resulting version |
|
| Branch | Label | Resulting version |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `main`, `release/*` | — | `MAJOR.MINOR.PATCH` (stable; **patch increments on every commit**) |
|
| `main` | — | `MAJOR.MINOR.PATCH` (stable) |
|
||||||
| `feature/*` | branch name | `…-<branch>.N` (pre-release; merging bumps **minor**) |
|
| `develop` / `dev` / `development` | `beta` | `MAJOR.MINOR.PATCH-beta.N` |
|
||||||
| `hotfix/*` | branch name | `…-<branch>.N` (pre-release; merging bumps **patch**) |
|
| `release/*`, `hotfix/*`, `feature/*` | branch name | `…-<branch>.N` |
|
||||||
|
|
||||||
- Tags use the prefix `v` (regex `[vV]?` also accepts `V` or none).
|
- Tags use the prefix `v` (regex `[vV]?` also accepts `V` or none).
|
||||||
- Each `src/*` project is versioned **independently**: only changes under that project's own directory, `Directory.Packages.props`, or `GitVersion.yml` increment its version (see `GenerateProjectGitVersionConfig` in `src/Directory.Build.props`, which renders the root `GitVersion.yml` into a per-project copy). A change to one library does not bump a sibling's version.
|
- Only changes under `src/`, `Directory.Packages.props`, or `GitVersion.yml` increment the version.
|
||||||
- All five packages still share one tag namespace, so a tag rebases every project's `MAJOR.MINOR` at once. Only the patch/pre-release counters diverge per project.
|
- Increments are suppressed for already-merged branches and already-tagged commits.
|
||||||
- Increments are suppressed on already-tagged commits, so the tagged commit builds exactly the tagged version.
|
|
||||||
|
|
||||||
## Changelog
|
|
||||||
|
|
||||||
Release notes are generated at pack time and embedded as `PackageReleaseNotes`. The `GenerateChangelogFromGit` target writes `git log` subjects to `$(ChangeLogPath)`, and `CreateReleaseNotesFromFile` reads that file into the nuspec. Both run before `GenerateNuspec`, and generation is skipped when the repository root has no `.git` directory.
|
|
||||||
|
|
||||||
The commit range is resolved in this order, first match wins:
|
|
||||||
|
|
||||||
1. `$(ChangeLogFromRef)..HEAD` — when `ChangeLogFromRef` is set.
|
|
||||||
2. `<tag>..HEAD` — from `git describe --tags --abbrev=0`.
|
|
||||||
3. `<sha>..HEAD` — the last first-parent merge whose subject matches `$(ChangeLogUpstreamMergePattern)`.
|
|
||||||
4. `<sha>..HEAD` — the last first-parent merge.
|
|
||||||
5. No range; the log is capped at `$(ChangeLogCommitLimit)` commits.
|
|
||||||
|
|
||||||
Commits are filtered with `--no-merges` and scoped to the project's own directory, plus the directories of its `ProjectReference`s unless `ChangeLogIncludeReferences` is `false`. This mirrors the per-project versioning rule above: a sibling library's commits do not appear in this package's notes.
|
|
||||||
|
|
||||||
| Property | Default | Purpose |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `ChangeLogFromRef` | *(empty)* | Explicit range start; overrides the fallback chain |
|
|
||||||
| `ChangeLogPath` | `$(BaseIntermediateOutputPath)changes.log` | Where the log is written and read from |
|
|
||||||
| `ChangeLogCommitLimit` | `100` | Cap used only when no range resolves |
|
|
||||||
| `ChangeLogUpstreamMergePattern` | `from .*/` | Subject matcher for the upstream-merge fallback |
|
|
||||||
| `ChangeLogIncludeReferences` | `true` | Include `ProjectReference` directories in scoping |
|
|
||||||
| `GenerateChangelogFromGit` | *(unset)* | Set to `false` to skip generation entirely |
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Step 2 uses the **nearest reachable** tag, not the newest. Packing from a commit that already carries a release tag therefore yields only the commits added since it — often a single entry. Pass `ChangeLogFromRef` to widen the range:
|
|
||||||
>
|
|
||||||
> ```shell
|
|
||||||
> dotnet pack -c Release -p:ChangeLogFromRef=v4.0.0
|
|
||||||
> ```
|
|
||||||
|
|
||||||
To ship hand-written notes instead, disable generation and point `ChangeLogPath` at your own file. Generation must be disabled, otherwise the target overwrites it:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dotnet pack -c Release -p:GenerateChangelogFromGit=false -p:ChangeLogPath=notes.md
|
|
||||||
```
|
|
||||||
|
|
||||||
Confirm the resolved range in the build output before publishing:
|
|
||||||
|
|
||||||
```text
|
|
||||||
Generated changelog at <path> using range v4.0.0..HEAD.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Procedure
|
## Procedure
|
||||||
|
|
||||||
1. **Sync.** `git fetch --all --tags && git status` — confirm clean.
|
1. **Sync.** `git fetch --all --tags && git status` — confirm clean.
|
||||||
2. **Compute.** `dotnet build src\<Project>\<Project>.csproj -getProperty:Version` — verify the value matches expectations for that specific project (there is no single repo-wide version).
|
2. **Compute.** `dotnet build -getProperty:Version` — verify the value matches expectations.
|
||||||
3. **Pack.** `dotnet pack -c Release` (or use the [docker-build](../docker-build/SKILL.md) `pack` target). Artifacts land in `artifacts/nuget/`. Check the logged changelog range and pass `ChangeLogFromRef` if it is narrower than the release warrants.
|
3. **Pack.** `dotnet pack -c Release` (or use the [docker-build](../docker-build/SKILL.md) `pack` target). Artifacts land in `artifacts/nuget/`.
|
||||||
4. **Tag.** `git tag -a v<version> -m "Release v<version>" && git push origin v<version>`.
|
4. **Tag.** `git tag -a v<version> -m "Release v<version>" && git push origin v<version>`.
|
||||||
5. **Publish** packages to the configured feed.
|
5. **Publish** packages to the configured feed.
|
||||||
6. **Create the GitHub release** linked to the tag, using the generated changelog as notes.
|
6. **Create the GitHub release** linked to the tag, using the generated changelog as notes.
|
||||||
|
|
||||||
For hotfixes: branch from the latest stable tag (`git switch -c hotfix/<name> v<latest-stable>`), follow the procedure, then merge back into `main`. There is no `develop` branch to reconcile with — this repo is trunk-based.
|
For hotfixes: branch from the latest stable tag (`git switch -c hotfix/<name> v<latest-stable>`), follow the procedure, then back-merge into `main` and `develop`.
|
||||||
|
|
||||||
## Guardrails
|
## Guardrails
|
||||||
|
|
||||||
- **Tags are immutable** once pushed; never move or delete them.
|
- **Tags are immutable** once pushed; never move or delete them.
|
||||||
- **Never skip a `PATCH`** — ship a fix forward.
|
- **Never skip a `PATCH`** — ship a fix forward.
|
||||||
- **Do not edit `GitVersion.yml` or a generated `src/*/GitVersion.yml` to force a version.** Address the underlying cause (missing tag, branch base, path filter, commit messages). Generated per-project files are gitignored build artifacts, re-derived from the root `GitVersion.yml` on every build — never hand-edit them.
|
- **Do not edit `GitVersion.yml` to force a version.** Address the underlying cause (missing tag, branch base, path filter, commit messages).
|
||||||
@@ -1156,9 +1156,3 @@ artifacts/**
|
|||||||
|
|
||||||
## Machine-specific overrides
|
## Machine-specific overrides
|
||||||
compose.override.yaml
|
compose.override.yaml
|
||||||
|
|
||||||
## Generated per-project GitVersion config (rendered from the root GitVersion.yml)
|
|
||||||
src/*/GitVersion.yml
|
|
||||||
|
|
||||||
## Copilot agent scratch/research notes (ephemeral, not project documentation)
|
|
||||||
.copilot-tracking/
|
|
||||||
+152
@@ -20,3 +20,155 @@ dotnet_diagnostic.Serilog004.severity = none # Serilog context property accessor
|
|||||||
dotnet_diagnostic.SA1101.severity = none # Prefix local calls with this
|
dotnet_diagnostic.SA1101.severity = none # Prefix local calls with this
|
||||||
dotnet_diagnostic.SA1633.severity = none # File must have header
|
dotnet_diagnostic.SA1633.severity = none # File must have header
|
||||||
dotnet_diagnostic.SA1649.severity = none # File name must match first type name
|
dotnet_diagnostic.SA1649.severity = none # File name must match first type name
|
||||||
|
|
||||||
|
# Organize usings
|
||||||
|
dotnet_sort_system_directives_first = true
|
||||||
|
dotnet_separate_import_directive_groups = true
|
||||||
|
csharp_using_directive_placement = inside_namespace:suggestion
|
||||||
|
csharp_prefer_simple_using_statement = true:suggestion
|
||||||
|
csharp_style_namespace_declarations = file_scoped:warning
|
||||||
|
# this. preferences
|
||||||
|
dotnet_style_qualification_for_field = false:none
|
||||||
|
dotnet_style_qualification_for_property = false:none
|
||||||
|
dotnet_style_qualification_for_method = false:none
|
||||||
|
dotnet_style_qualification_for_event = false:none
|
||||||
|
# Language keywords vs BCL types preferences
|
||||||
|
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
|
||||||
|
dotnet_style_predefined_type_for_member_access = true:suggestion
|
||||||
|
# Parentheses preferences
|
||||||
|
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
|
||||||
|
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
|
||||||
|
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
|
||||||
|
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
|
||||||
|
# Modifier preferences
|
||||||
|
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
|
||||||
|
dotnet_style_readonly_field = true:suggestion
|
||||||
|
# Expression-level preferences
|
||||||
|
dotnet_style_object_initializer = true:suggestion
|
||||||
|
dotnet_style_collection_initializer = true:suggestion
|
||||||
|
dotnet_style_explicit_tuple_names = true:suggestion
|
||||||
|
dotnet_style_null_propagation = true:suggestion
|
||||||
|
dotnet_style_coalesce_expression = true:suggestion
|
||||||
|
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
|
||||||
|
dotnet_style_prefer_inferred_tuple_names = true:suggestion
|
||||||
|
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
|
||||||
|
dotnet_style_prefer_auto_properties = true:silent
|
||||||
|
dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
|
||||||
|
dotnet_style_prefer_conditional_expression_over_return = true:suggestion
|
||||||
|
###############################
|
||||||
|
# Naming Conventions #
|
||||||
|
###############################
|
||||||
|
# Style Definitions
|
||||||
|
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
|
||||||
|
dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style
|
||||||
|
dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style
|
||||||
|
# Use PascalCase for constant fields
|
||||||
|
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
|
||||||
|
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
|
||||||
|
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
|
||||||
|
dotnet_naming_symbols.constant_fields.applicable_kinds = field
|
||||||
|
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
|
||||||
|
dotnet_naming_symbols.constant_fields.required_modifiers = const
|
||||||
|
###############################
|
||||||
|
# C# Coding Conventions #
|
||||||
|
###############################
|
||||||
|
# var preferences
|
||||||
|
csharp_style_var_for_built_in_types = true:suggestion
|
||||||
|
csharp_style_var_when_type_is_apparent = true:suggestion
|
||||||
|
csharp_style_var_elsewhere = true:suggestion
|
||||||
|
# Expression-bodied members
|
||||||
|
csharp_style_expression_bodied_methods = when_on_single_line :suggestion
|
||||||
|
csharp_style_expression_bodied_constructors = when_on_single_line :suggestion
|
||||||
|
csharp_style_expression_bodied_operators = when_on_single_line :suggestion
|
||||||
|
csharp_style_expression_bodied_properties = when_on_single_line :suggestion
|
||||||
|
csharp_style_expression_bodied_indexers = when_on_single_line :suggestion
|
||||||
|
csharp_style_expression_bodied_accessors = when_on_single_line :suggestion
|
||||||
|
csharp_style_expression_bodied_lambdas = when_on_single_line :suggestion
|
||||||
|
csharp_style_expression_bodied_local_functions = when_on_single_line :suggestion
|
||||||
|
# Pattern matching preferences
|
||||||
|
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
||||||
|
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
||||||
|
# Null-checking preferences
|
||||||
|
csharp_style_throw_expression = true:suggestion
|
||||||
|
csharp_style_conditional_delegate_call = true:suggestion
|
||||||
|
# Modifier preferences
|
||||||
|
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
|
||||||
|
# Expression-level preferences
|
||||||
|
csharp_prefer_braces = true:none
|
||||||
|
csharp_style_deconstructed_variable_declaration = true:suggestion
|
||||||
|
csharp_prefer_simple_default_expression = true:suggestion
|
||||||
|
csharp_style_pattern_local_over_anonymous_function = true:suggestion
|
||||||
|
csharp_style_inlined_variable_declaration = true:suggestion
|
||||||
|
# Unused value preferences
|
||||||
|
csharp_style_unused_value_expression_statement_preference = discard_variable:none
|
||||||
|
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
|
||||||
|
## Index and Range preferences
|
||||||
|
csharp_style_prefer_index_operator = true:suggestion
|
||||||
|
csharp_style_prefer_range_operator = true:suggestion
|
||||||
|
csharp_prefer_static_local_function = true:suggestion
|
||||||
|
csharp_style_prefer_switch_expression = true:suggestion
|
||||||
|
###############################
|
||||||
|
# C# Formatting Rules #
|
||||||
|
###############################
|
||||||
|
# New line preferences
|
||||||
|
csharp_new_line_before_open_brace = all
|
||||||
|
csharp_new_line_before_else = true
|
||||||
|
csharp_new_line_before_catch = true
|
||||||
|
csharp_new_line_before_finally = true
|
||||||
|
csharp_new_line_before_members_in_object_initializers = true
|
||||||
|
csharp_new_line_before_members_in_anonymous_types = true
|
||||||
|
csharp_new_line_between_query_expression_clauses = true
|
||||||
|
# Indentation preferences
|
||||||
|
csharp_indent_case_contents = true
|
||||||
|
csharp_indent_switch_labels = true
|
||||||
|
csharp_indent_labels = flush_left
|
||||||
|
csharp_indent_block_contents = true
|
||||||
|
csharp_indent_braces = false
|
||||||
|
csharp_indent_case_contents_when_block = true
|
||||||
|
# Space preferences
|
||||||
|
csharp_space_after_cast = false
|
||||||
|
csharp_space_after_keywords_in_control_flow_statements = true
|
||||||
|
csharp_space_between_method_call_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_method_declaration_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_parentheses = false
|
||||||
|
csharp_space_before_colon_in_inheritance_clause = true
|
||||||
|
csharp_space_after_colon_in_inheritance_clause = true
|
||||||
|
csharp_space_around_binary_operators = before_and_after
|
||||||
|
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_method_call_name_and_opening_parenthesis = false
|
||||||
|
csharp_space_between_method_call_empty_parameter_list_parentheses = false
|
||||||
|
csharp_space_between_method_declaration_name_and_open_parenthesis = false
|
||||||
|
csharp_space_after_comma = true
|
||||||
|
csharp_space_before_comma = false
|
||||||
|
csharp_space_after_dot = false
|
||||||
|
csharp_space_before_dot = false
|
||||||
|
csharp_space_after_semicolon_in_for_statement = true
|
||||||
|
csharp_space_before_semicolon_in_for_statement = false
|
||||||
|
csharp_space_around_declaration_statements = false
|
||||||
|
csharp_space_before_open_square_brackets = false
|
||||||
|
csharp_space_between_empty_square_brackets = false
|
||||||
|
csharp_space_between_square_brackets = false
|
||||||
|
# Wrapping preferences
|
||||||
|
csharp_preserve_single_line_statements = true
|
||||||
|
csharp_preserve_single_line_blocks = true
|
||||||
|
###############################
|
||||||
|
# VB Coding Conventions #
|
||||||
|
###############################
|
||||||
|
# Modifier preferences
|
||||||
|
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion
|
||||||
|
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Extra Rules #
|
||||||
|
###############################
|
||||||
|
|
||||||
|
# dotnet_naming_rule.private_constants_rule.severity = warning
|
||||||
|
# dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style
|
||||||
|
# dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols
|
||||||
|
# dotnet_naming_rule.private_instance_fields_rule.severity = warning
|
||||||
|
dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style
|
||||||
|
# dotnet_naming_rule.private_instance_fields_rule.symbols = private_instance_fields_symbols
|
||||||
|
# dotnet_naming_rule.private_static_fields_rule.severity = warning
|
||||||
|
dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style
|
||||||
|
# dotnet_naming_rule.private_static_fields_rule.symbols = private_static_fields_symbols
|
||||||
|
# dotnet_naming_style.prefix_private_field_with_underscore.required_prefix = _
|
||||||
+25
-6
@@ -10,7 +10,6 @@
|
|||||||
<NoLogo>true</NoLogo>
|
<NoLogo>true</NoLogo>
|
||||||
<!-- Prepend organization name to default namespace -->
|
<!-- Prepend organization name to default namespace -->
|
||||||
<RootNamespace>Kritikos.$(MSBuildProjectName)</RootNamespace>
|
<RootNamespace>Kritikos.$(MSBuildProjectName)</RootNamespace>
|
||||||
<AssemblyName>Kritikos.$(MSBuildProjectName)</AssemblyName>
|
|
||||||
<!-- Enable global usings based on project type -->
|
<!-- Enable global usings based on project type -->
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<!-- Generate documentation file and ignore warnings for undocumented elements -->
|
<!-- Generate documentation file and ignore warnings for undocumented elements -->
|
||||||
@@ -80,12 +79,20 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Label="Project Assets">
|
<PropertyGroup Label="Project Assets">
|
||||||
<ProjectIcon Condition="Exists('$(MSBuildThisFileDirectory)icon.png')">$(MSBuildThisFileDirectory)icon.png</ProjectIcon>
|
<ProjectIcon Condition="Exists('$(MSBuildThisFileDirectory)\icon.png')">
|
||||||
<ProjectIcon Condition="Exists('$(MSBuildProjectDirectory)\icon.png')">$(MSBuildProjectDirectory)\icon.png</ProjectIcon>
|
$(MSBuildThisFileDirectory)icon.png
|
||||||
|
</ProjectIcon>
|
||||||
|
<ProjectIcon Condition="Exists('$(MSBuildProjectDirectory)\icon.png')">
|
||||||
|
$(MSBuildProjectDirectory)icon.png
|
||||||
|
</ProjectIcon>
|
||||||
<ProjectIconExists Condition="$(ProjectIcon) != ''">true</ProjectIconExists>
|
<ProjectIconExists Condition="$(ProjectIcon) != ''">true</ProjectIconExists>
|
||||||
|
|
||||||
<ProjectReadMe Condition="Exists('$(MSBuildThisFileDirectory)README.md')">$(MSBuildThisFileDirectory)README.md</ProjectReadMe>
|
<ProjectReadMe Condition="Exists('$(MSBuildThisFileDirectory)\README.md')">
|
||||||
<ProjectReadMe Condition="Exists('$(MSBuildProjectDirectory)\README.md')">$(MSBuildProjectDirectory)\README.md</ProjectReadMe>
|
$(MSBuildThisFileDirectory)README.md
|
||||||
|
</ProjectReadMe>
|
||||||
|
<ProjectReadMe Condition="Exists('$(MSBuildProjectDirectory)\README.md')">
|
||||||
|
$(MSBuildProjectDirectory)README.md
|
||||||
|
</ProjectReadMe>
|
||||||
<ProjectReadMeExists Condition="$(ProjectReadMe) != ''">true</ProjectReadMeExists>
|
<ProjectReadMeExists Condition="$(ProjectReadMe) != ''">true</ProjectReadMeExists>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
@@ -120,6 +127,11 @@
|
|||||||
<EFOptimizeContext>true</EFOptimizeContext>
|
<EFOptimizeContext>true</EFOptimizeContext>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- Mark assemblies as CLS compliant so the compiler warns on non compliant usage -->
|
||||||
|
<PropertyGroup Condition="$(IsPackable) == 'true'">
|
||||||
|
<ClsCompliant>true</ClsCompliant>
|
||||||
|
<GenerateSBOM>true</GenerateSBOM>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AssemblyAttribute Include="System.CLSCompliant">
|
<AssemblyAttribute Include="System.CLSCompliant">
|
||||||
<_Parameter1>$(ClsCompliant)</_Parameter1>
|
<_Parameter1>$(ClsCompliant)</_Parameter1>
|
||||||
@@ -147,6 +159,13 @@
|
|||||||
CopyToOutputDirectory="Never" Visible="false" />
|
CopyToOutputDirectory="Never" Visible="false" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!-- Project internals are exposed to projects named $(Project).Tests by default -->
|
||||||
|
<ItemGroup
|
||||||
|
Condition="@(InternalsVisibleToSuffix->Count()) == 0 AND @(InternalsVisibleTo->Count()) == 0">
|
||||||
|
<InternalsVisibleToSuffix Include=".Tests" />
|
||||||
|
<InternalsVisibleToSuffix Include="Tests" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup Label="Package">
|
<PropertyGroup Label="Package">
|
||||||
<PackageId>$(RootNamespace)</PackageId>
|
<PackageId>$(RootNamespace)</PackageId>
|
||||||
<Company>Kritikos IO</Company>
|
<Company>Kritikos IO</Company>
|
||||||
@@ -164,7 +183,7 @@
|
|||||||
<EnablePackageValidation>true</EnablePackageValidation>
|
<EnablePackageValidation>true</EnablePackageValidation>
|
||||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||||
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
||||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup Label="Versioning" Condition="'$(IsTestProject)' != 'true'">
|
<ItemGroup Label="Versioning" Condition="'$(IsTestProject)' != 'true'">
|
||||||
|
|||||||
+28
-55
@@ -9,12 +9,6 @@
|
|||||||
<None Update="packages.lock.json" Visible="false" />
|
<None Update="packages.lock.json" Visible="false" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<ClsCompliant Condition="'$(SkipClsCompliant)' != 'true' AND '$(IsPackable)' != 'false' AND '$(IsTestProject)' != 'true'">true</ClsCompliant>
|
|
||||||
<ClsCompliant Condition="'$(ClsCompliant)' == ''">false</ClsCompliant>
|
|
||||||
<GenerateSBOM Condition="'$(IsPackable)' != 'false' AND '$(IsTestProject)' != 'true'">true</GenerateSBOM>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup
|
<ItemGroup
|
||||||
Condition="'$(UsingMicrosoftNETSdkWeb)' == 'True' AND @(PackageReference->WithMetadataValue('Identity','Microsoft.AspNetCore.OpenApi')->Count()) > 0">
|
Condition="'$(UsingMicrosoftNETSdkWeb)' == 'True' AND @(PackageReference->WithMetadataValue('Identity','Microsoft.AspNetCore.OpenApi')->Count()) > 0">
|
||||||
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server">
|
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server">
|
||||||
@@ -35,69 +29,48 @@
|
|||||||
AfterTargets="GenerateOpenApiDocuments"
|
AfterTargets="GenerateOpenApiDocuments"
|
||||||
Condition="'$(OpenApiDocumentsDirectory)' != ''">
|
Condition="'$(OpenApiDocumentsDirectory)' != ''">
|
||||||
<Move SourceFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json"
|
<Move SourceFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json"
|
||||||
DestinationFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName)_v1.json"
|
DestinationFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName)-v1.json"
|
||||||
Condition="Exists('$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json')" />
|
Condition="Exists('$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json')" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<!--
|
<Target Name="SetHierarchicalPackageOutputPath"
|
||||||
OpenApiDocumentsDirectory tracks $(ArtifactsPath), which developers may override to a
|
BeforeTargets="_GetAbsoluteOutputPathsForPack"
|
||||||
machine-specific location. Client generators (e.g. a checked-in .refitter file) need a
|
Condition="'$(ArtifactsPath)' != '' AND '$(PackageVersion)' != ''">
|
||||||
stable, repo-relative path, so mirror the renamed document(s) into the repo's own
|
<PropertyGroup>
|
||||||
artifacts/OpenApi folder regardless of where ArtifactsPath actually points.
|
<PackageOutputPath>$(ArtifactsPath)/nuget/$(PackageId)/$(PackageVersion)</PackageOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
Uses a glob (not a single "_v1.json" name) because a project may define multiple named
|
|
||||||
OpenAPI documents (AddOpenApi("v1"), AddOpenApi("v2"), ...), each emitted as its own
|
|
||||||
"$(MSBuildProjectName)_{documentName}.json" file.
|
|
||||||
-->
|
|
||||||
<Target Name="CopyOpenApiDocumentsToRepoArtifacts"
|
|
||||||
AfterTargets="RenameOpenApiDocuments"
|
|
||||||
Condition="'$(OpenApiDocumentsDirectory)' != ''">
|
|
||||||
<ItemGroup>
|
|
||||||
<OpenApiDocumentToCopy Include="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName)*.json" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Copy SourceFiles="@(OpenApiDocumentToCopy)"
|
|
||||||
DestinationFolder="$(MSBuildThisFileDirectory)artifacts/OpenApi"
|
|
||||||
SkipUnchangedFiles="true"
|
|
||||||
Condition="@(OpenApiDocumentToCopy->Count()) > 0" />
|
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="AddInternalsVisibleTo" BeforeTargets="BeforeCompile">
|
<Target Name="AddInternalsVisibleTo" BeforeTargets="BeforeCompile">
|
||||||
<!--
|
<!--
|
||||||
Exposes assembly internals to friend assemblies.
|
Add an ItemGroup with tags in the following format:
|
||||||
|
<InternalsVisibleTo Include="CustomTest1" />
|
||||||
The .NET SDK already turns <InternalsVisibleTo Include="..." /> items into
|
|
||||||
[assembly: InternalsVisibleTo("...")] attributes in its GetAssemblyAttributes
|
|
||||||
target (including strong-name PublicKey handling via PublicKey/Key metadata).
|
|
||||||
This target must therefore NOT emit those attributes itself - doing so emits
|
|
||||||
every friend assembly twice.
|
|
||||||
|
|
||||||
Instead it only layers the project-local convention on top of the SDK:
|
|
||||||
* translate <InternalsVisibleToSuffix> entries into InternalsVisibleTo items
|
|
||||||
so the SDK can emit them, and
|
|
||||||
* apply a sensible default when a project declared no friend assemblies.
|
|
||||||
|
|
||||||
Examples on an assembly named "ClassLibrary1":
|
|
||||||
<InternalsVisibleTo Include="CustomTest1" /> (handled by the SDK)
|
|
||||||
-> [assembly: InternalsVisibleTo("CustomTest1")]
|
-> [assembly: InternalsVisibleTo("CustomTest1")]
|
||||||
<InternalsVisibleToSuffix Include=".Tests" /> (handled here)
|
<InternalsVisibleTo Include="CustomTest2, PublicKey=abc" />
|
||||||
-> [assembly: InternalsVisibleTo("ClassLibrary1.Tests")]
|
-> [assembly: InternalsVisibleTo("CustomTest2, PublicKey=abc")]
|
||||||
|
<InternalsVisibleTo Include="$(AssemblyName).Custom" />
|
||||||
|
-> [assembly: InternalsVisibleTo("ClassLibrary1.Custom")]
|
||||||
|
|
||||||
Running at build time (before GetAssemblyAttributes) means the counts below
|
on a project with assembly name ClasLibrary1:
|
||||||
see items declared in both imported props and the project body, so an
|
<InternalsVisibleToSuffix Include=".Tests" />
|
||||||
explicit InternalsVisibleTo correctly suppresses the default suffix.
|
-> [assembly: InternalsVisibleTo("ClassLibrary1.Tests")]
|
||||||
|
<InternalsVisibleToSuffix Include=".FunctionalTests" />
|
||||||
|
-> [assembly: InternalsVisibleTo("ClassLibrary1.FunctionalTests")]
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!-- Default: expose internals to "<AssemblyName>.Tests" when the project has
|
<!-- Handle InternalsVisibleTo -->
|
||||||
not declared any friend assemblies of its own. -->
|
<ItemGroup Condition="'@(InternalsVisibleTo->Count())' > 0">
|
||||||
<ItemGroup Condition="@(InternalsVisibleTo->Count()) == 0 AND @(InternalsVisibleToSuffix->Count()) == 0">
|
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
|
||||||
<InternalsVisibleToSuffix Include=".Tests" />
|
<_Parameter1>%(InternalsVisibleTo.Identity)</_Parameter1>
|
||||||
|
</AssemblyAttribute>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<!-- Translate the suffix convention into InternalsVisibleTo items for the SDK,
|
<!-- Handle InternalsVisibleToSuffix -->
|
||||||
skipping the current assembly (e.g. a "*.Tests" project itself). -->
|
|
||||||
<ItemGroup Condition="@(InternalsVisibleToSuffix->Count()) > 0">
|
<ItemGroup Condition="@(InternalsVisibleToSuffix->Count()) > 0">
|
||||||
<InternalsVisibleTo Include="$(AssemblyName)%(InternalsVisibleToSuffix.Identity)"
|
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo"
|
||||||
Condition="$(AssemblyName.EndsWith(%(InternalsVisibleToSuffix.Identity))) == 'false'" />
|
Condition="$(AssemblyName.EndsWith(%(InternalsVisibleToSuffix.Identity))) == 'false'">
|
||||||
|
<_Parameter1>$(AssemblyName)%(InternalsVisibleToSuffix.Identity)</_Parameter1>
|
||||||
|
</AssemblyAttribute>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<ItemGroup Label="Packages">
|
<ItemGroup Label="Packages">
|
||||||
<PackageVersion Include="GitVersion.MsBuild" Version="6.8.2" />
|
<PackageVersion Include="GitVersion.MsBuild" Version="6.7.0" />
|
||||||
<PackageVersion Include="Microsoft.Sbom.Targets" Version="4.1.5" />
|
<PackageVersion Include="Microsoft.Sbom.Targets" Version="4.1.5" />
|
||||||
<PackageVersion Include="NewStyleCop.Analyzers" Version="1.2.1" />
|
<PackageVersion Include="NewStyleCop.Analyzers" Version="1.2.1" />
|
||||||
<PackageVersion Include="NSubstitute.Analyzers.CSharp" Version="1.0.17" />
|
<PackageVersion Include="NSubstitute.Analyzers.CSharp" Version="1.0.17" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.ApiDescription.Server" Version="10.0.10" />
|
<PackageVersion Include="Microsoft.Extensions.ApiDescription.Server" Version="10.0.5" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
+11
-30
@@ -1,46 +1,27 @@
|
|||||||
workflow: TrunkBased/preview1
|
workflow: GitHubFlow/v1
|
||||||
|
mode: ContinuousDelivery
|
||||||
tag-prefix: '[vV]?'
|
tag-prefix: '[vV]?'
|
||||||
ignore:
|
ignore:
|
||||||
paths:
|
paths:
|
||||||
- ^(?!src\/|Directory\.Packages\.props|GitVersion.yml).*
|
- ^(?!src\/|Directory\.Packages\.props|GitVersion.yml).*
|
||||||
branches:
|
branches:
|
||||||
release:
|
|
||||||
mode: ContinuousDeployment
|
|
||||||
label: ''
|
|
||||||
increment: Patch
|
|
||||||
regex: ^releases?[\/-](?<BranchName>.+)
|
|
||||||
source-branches:
|
|
||||||
- main
|
|
||||||
is-release-branch: true
|
|
||||||
is-main-branch: true
|
|
||||||
pre-release-weight: 55000
|
|
||||||
develop:
|
develop:
|
||||||
mode: ContinuousDelivery
|
label: 'beta'
|
||||||
label: alpha
|
regex: '^(dev|develop|development)$'
|
||||||
increment: Minor
|
|
||||||
regex: ^develop$
|
|
||||||
source-branches:
|
source-branches:
|
||||||
- main
|
- main
|
||||||
prevent-increment:
|
|
||||||
when-current-commit-tagged: false
|
|
||||||
pre-release-weight: 0
|
|
||||||
feature:
|
feature:
|
||||||
|
mode: ContinuousDelivery
|
||||||
source-branches:
|
source-branches:
|
||||||
- main
|
|
||||||
- develop
|
- develop
|
||||||
- release
|
- main
|
||||||
hotfix:
|
hotfix:
|
||||||
source-branches:
|
regex: ^hotfix?[\/-](?<BranchName>.+)
|
||||||
- main
|
mode: ContinuousDelivery
|
||||||
- release
|
release:
|
||||||
pull-request:
|
mode: ContinuousDelivery
|
||||||
source-branches:
|
|
||||||
- main
|
|
||||||
- develop
|
|
||||||
- release
|
|
||||||
- feature
|
|
||||||
- hotfix
|
|
||||||
|
|
||||||
prevent-increment:
|
prevent-increment:
|
||||||
of-merged-branch: true
|
of-merged-branch: true
|
||||||
|
when-branch-merged: true
|
||||||
when-current-commit-tagged: true
|
when-current-commit-tagged: true
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/DebuggerStepThroughAccessors/@EntryValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/DebuggerStepThroughAccessors/@EntryValue">True</s:Boolean>
|
||||||
<s:String x:Key="/Default/CodeEditing/GenerateMemberBody/DocumentationGenerationKind/@EntryValue">Inherit</s:String>
|
<s:String x:Key="/Default/CodeEditing/GenerateMemberBody/DocumentationGenerationKind/@EntryValue">Inherit</s:String>
|
||||||
<s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/PlaceBackingFieldAboveProperty/@EntryValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/PlaceBackingFieldAboveProperty/@EntryValue">True</s:Boolean>
|
||||||
@@ -14,8 +14,14 @@
|
|||||||
<s:Boolean x:Key="/Default/CodeEditing/TypingAssist/CSharpAnnotationTypingAssist/IsEnabledAtOtherPositions/@EntryValue">False</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeEditing/TypingAssist/CSharpAnnotationTypingAssist/IsEnabledAtOtherPositions/@EntryValue">False</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/CodeEditing/TypingAssist/CSharpAnnotationTypingAssist/IsInsertNullCheckWhenAlreadyAnnotated/@EntryValue">False</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeEditing/TypingAssist/CSharpAnnotationTypingAssist/IsInsertNullCheckWhenAlreadyAnnotated/@EntryValue">False</s:Boolean>
|
||||||
|
|
||||||
|
<s:Int64 x:Key="/Default/CodeInspection/CognitiveComplexityAnalysis/CSharpThreshold/@EntryValue">20</s:Int64>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/GeneratedCode/GeneratedFileMasks/=_002AModelSnapshot_002Ecs/@EntryIndexedValue">*ModelSnapshot.cs</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/GeneratedCode/GeneratedFileMasks/=Migrations_002F_002A/@EntryIndexedValue">Migrations/*</s:String>
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/CalculateInheritedTypeMembers/@EntryValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/CalculateInheritedTypeMembers/@EntryValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/DoNotShowVsBulb/@EntryValue">False</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/DoNotShowVsBulb/@EntryValue">False</s:Boolean>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassNeverInstantiated_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassNeverInstantiated_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertToPrimaryConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
|
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/MergeVsBulbItemsIntoReSharperBulb/@EntryValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/MergeVsBulbItemsIntoReSharperBulb/@EntryValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/ReadSettingsFromFileLevel/@EntryValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/ReadSettingsFromFileLevel/@EntryValue">True</s:Boolean>
|
||||||
@@ -23,12 +29,83 @@
|
|||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/SweaWarningsMode/@EntryValue">ShowAndRun</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/SweaWarningsMode/@EntryValue">ShowAndRun</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/XmlDocInspections/TypeAccessibility/@EntryValue">None</s:String>
|
<s:String x:Key="/Default/CodeInspection/XmlDocInspections/TypeAccessibility/@EntryValue">None</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/XmlDocInspections/TypeMemberAccessibility/@EntryValue">None</s:String>
|
<s:String x:Key="/Default/CodeInspection/XmlDocInspections/TypeMemberAccessibility/@EntryValue">None</s:String>
|
||||||
|
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CommonFormatter/AUTODETECT_INDENT_SETTINGS/@EntryValue">True</s:Boolean>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_SPACES</s:String>
|
||||||
|
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_REGION/@EntryValue">0</s:Int64>
|
||||||
|
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_BEFORE_SINGLE_LINE_COMMENT/@EntryValue">1</s:Int64>
|
||||||
|
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_BETWEEN_USING_GROUPS/@EntryValue">1</s:Int64>
|
||||||
|
|
||||||
|
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSOR_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSORHOLDER_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
|
||||||
|
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_WHILE_ON_NEW_LINE/@EntryValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AFTER_TYPECAST_PARENTHESES/@EntryValue">False</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_WITHIN_SINGLE_LINE_ARRAY_INITIALIZER_BRACES/@EntryValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_BEFORE_BINARY_OPSIGN/@EntryValue">True</s:Boolean>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_CHAINED_METHOD_CALLS/@EntryValue">CHOP_IF_LONG</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_LINQ_EXPRESSIONS/@EntryValue">CHOP_ALWAYS</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_TERNARY_EXPR_STYLE/@EntryValue">CHOP_ALWAYS</s:String>
|
||||||
|
<s:Boolean x:Key="/Default/CodeStyle/CSharpUsing/QualifiedUsingAtNestedScope/@EntryValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/EnableStyleCopSupport/@EntryValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/EnableStyleCopSupport/@EntryValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/ShowEditorConfigStatusBarIndicator/@EntryValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeStyle/EditorConfig/ShowEditorConfigStatusBarIndicator/@EntryValue">True</s:Boolean>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FBLOCK_005FSCOPE_005FCONSTANT/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FBLOCK_005FSCOPE_005FFUNCTION/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FBLOCK_005FSCOPE_005FVARIABLE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FCLASS/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FCONSTRUCTOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FFUNCTION/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FGLOBAL_005FVARIABLE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FLABEL/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FLOCAL_005FCONSTRUCTOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FLOCAL_005FVARIABLE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FOBJECT_005FPROPERTY_005FOF_005FFUNCTION/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=JS_005FPARAMETER/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FCLASS/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FENUM/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FENUM_005FMEMBER/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FINTERFACE/@EntryIndexedValue"><Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FMIXED_005FENUM/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FMODULE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FMODULE_005FEXPORTED/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FMODULE_005FLOCAL/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FMEMBER_005FACCESSOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FSTATIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPRIVATE_005FTYPE_005FMETHOD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FMEMBER_005FACCESSOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FSTATIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPROTECTED_005FTYPE_005FMETHOD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FMEMBER_005FACCESSOR/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FSTATIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FTYPE_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FPUBLIC_005FTYPE_005FMETHOD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FTYPE_005FALIAS/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/JavaScriptNaming/UserRules/=TS_005FTYPE_005FPARAMETER/@EntryIndexedValue"><Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FHTML_005FCONTROL/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FTAG_005FNAME/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/WebNaming/UserRules/=ASP_005FTAG_005FPREFIX/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=NAMESPACE_005FALIAS/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=NAMESPACE_005FALIAS/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FFIELD/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FRESOURCE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FRESOURCE/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></s:String>
|
||||||
|
<s:String x:Key="/Default/CustomTools/CustomToolsData/@EntryValue"></s:String>
|
||||||
|
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=AutoRecoverer/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=Format/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=Roslyn_002Dswea/@EntryIndexedValue">DO_NOTHING</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=ShowAnnotations/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=SolExp_002DTrack/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=StartPage_002DIsDownloadRefreshEnabled/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=StartPage_002DOnEnvironmentStatup/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=SyncSettings/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=TextEditor_002DCodeLens/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=TextEditor_002DTrackChanges_002D2/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=VCS/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=VsBulb/@EntryIndexedValue">DO_NOTHING</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=XAML_0020Designer/@EntryIndexedValue">LIVE_MONITOR</s:String>
|
||||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
|
||||||
@@ -38,5 +115,6 @@
|
|||||||
<s:Boolean x:Key="/Default/Environment/UnitTesting/DisabledProviders/=Testing_0020Platform/@EntryIndexedValue">False</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/UnitTesting/DisabledProviders/=Testing_0020Platform/@EntryIndexedValue">False</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/Environment/UnitTesting/DisabledProviders/=VsTest/@EntryIndexedValue">False</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/UnitTesting/DisabledProviders/=VsTest/@EntryIndexedValue">False</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/Environment/UnitTesting/TestingPlatformTestProvider/IgnoreProjectsSupportedByOtherProviders/@EntryValue">False</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/UnitTesting/TestingPlatformTestProvider/IgnoreProjectsSupportedByOtherProviders/@EntryValue">False</s:Boolean>
|
||||||
|
|
||||||
<s:Boolean x:Key="/Default/ReSpeller/ReSpellerEnabled/@EntryValue">False</s:Boolean>
|
<s:Boolean x:Key="/Default/ReSpeller/ReSpellerEnabled/@EntryValue">False</s:Boolean>
|
||||||
</wpf:ResourceDictionary>
|
</wpf:ResourceDictionary>
|
||||||
@@ -1,79 +1,9 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<ImportGroup
|
<ImportGroup Condition="Exists($([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))) == 'true'">
|
||||||
Condition="Exists($([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))) == 'true'">
|
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
|
||||||
<Import
|
|
||||||
Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
|
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
|
||||||
<PropertyGroup Label="Package">
|
<PropertyGroup Label="Package">
|
||||||
<PackageProjectUrl>http://localhost</PackageProjectUrl>
|
<PackageProjectUrl>http://localhost</PackageProjectUrl>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Label="GitVersion per-project scoping">
|
|
||||||
<GitVersionTemplateFile>$(MSBuildThisFileDirectory)..\GitVersion.yml</GitVersionTemplateFile>
|
|
||||||
<_GitVersionIgnorePathsRegex>(paths:\s*\r?\n\s*- ).+</_GitVersionIgnorePathsRegex>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
GitVersion.MsBuild runs `gitversion "$(MSBuildProjectDirectory)"`, and GitVersion resolves its
|
|
||||||
config by
|
|
||||||
walking up from that directory to the repo root, using the first GitVersion.yml it finds. Rendering
|
|
||||||
one
|
|
||||||
here (rewriting the repo-root GitVersion.yml's ignore.paths entry, so there is a single
|
|
||||||
hand-maintained
|
|
||||||
file) scopes ignore.paths to this project's own directory plus the full transitive closure of its
|
|
||||||
ProjectReference dependencies, so a change anywhere upstream in the dependency graph also counts
|
|
||||||
toward
|
|
||||||
this project's version. Generated file is gitignored (see .gitignore).
|
|
||||||
-->
|
|
||||||
<Target Name="_CollectGitVersionTransitiveReferences" Returns="@(_GitVersionTransitiveRef)">
|
|
||||||
<ItemGroup>
|
|
||||||
<!-- Resolve to FullPath here, before crossing the MSBuild task-output boundary below:
|
|
||||||
relative
|
|
||||||
Includes from an intermediate project resolve against the wrong directory once passed through. -->
|
|
||||||
<_GitVersionTransitiveRef Include="@(ProjectReference->'%(FullPath)')" />
|
|
||||||
</ItemGroup>
|
|
||||||
<MSBuild Projects="@(ProjectReference)" Targets="_CollectGitVersionTransitiveReferences"
|
|
||||||
Condition="'@(ProjectReference)' != ''" SkipNonexistentTargets="true">
|
|
||||||
<Output TaskParameter="TargetOutputs" ItemName="_GitVersionTransitiveRef" />
|
|
||||||
</MSBuild>
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<Target Name="GenerateProjectGitVersionConfig" BeforeTargets="RunGitVersion"
|
|
||||||
Condition="Exists('$(GitVersionTemplateFile)')">
|
|
||||||
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_CollectGitVersionTransitiveReferences"
|
|
||||||
Condition="'@(ProjectReference)' != ''" SkipNonexistentTargets="true">
|
|
||||||
<Output TaskParameter="TargetOutputs" ItemName="_GitVersionScopeProjectRef" />
|
|
||||||
</MSBuild>
|
|
||||||
<ItemGroup>
|
|
||||||
<_GitVersionScopePath Include="$(MSBuildProjectDirectory)" />
|
|
||||||
<_GitVersionScopePath Include="@(_GitVersionScopeProjectRef->'%(RootDir)%(Directory)')" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<_GitVersionScopePath>
|
|
||||||
<EscapedPath>$([MSBuild]::EnsureTrailingSlash($([MSBuild]::MakeRelative('$(MSBuildThisFileDirectory)..\',
|
|
||||||
'%(Identity)'))).Replace('\', '/').Replace('.', '\.').Replace('/', '\/'))</EscapedPath>
|
|
||||||
</_GitVersionScopePath>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<_GitVersionIgnorePattern>^(?!@(_GitVersionScopePath->'%(EscapedPath)',
|
|
||||||
'|')|Directory\.Packages\.props|GitVersion\.yml).*</_GitVersionIgnorePattern>
|
|
||||||
<_GitVersionTemplateContent>$([System.IO.File]::ReadAllText('$(GitVersionTemplateFile)'))</_GitVersionTemplateContent>
|
|
||||||
<_GitVersionRenderedContent>$([System.Text.RegularExpressions.Regex]::Replace('$(_GitVersionTemplateContent)',
|
|
||||||
'$(_GitVersionIgnorePathsRegex)', '$1$(_GitVersionIgnorePattern)'))</_GitVersionRenderedContent>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="'$(_GitVersionRenderedContent)' == '$(_GitVersionTemplateContent)'"
|
|
||||||
Text="GenerateProjectGitVersionConfig: could not find an ignore.paths entry to rewrite in $(GitVersionTemplateFile) for $(MSBuildProjectName) -- check its ignore.paths structure." />
|
|
||||||
<WriteLinesToFile File="$(MSBuildProjectDirectory)\GitVersion.yml"
|
|
||||||
Lines="$(_GitVersionRenderedContent)"
|
|
||||||
Overwrite="true" WriteOnlyWhenDifferent="true" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
<PropertyGroup Label="Changelog per-project scoping">
|
|
||||||
<!-- GenerateChangelogFromGit (root Directory.Build.targets) walks direct ProjectReference
|
|
||||||
directories when this is true. A dependency's own changes belong in its own changelog/version,
|
|
||||||
not copied here (that would misattribute a dependency's commit as this project's own change):
|
|
||||||
scope to this project's own directory only. -->
|
|
||||||
<ChangeLogIncludeReferences>false</ChangeLogIncludeReferences>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<Project>
|
|
||||||
<ImportGroup
|
|
||||||
Condition="Exists($([MSBuild]::GetPathOfFileAbove('Directory.Build.targets', '$(MSBuildThisFileDirectory)../'))) == 'true'">
|
|
||||||
<Import
|
|
||||||
Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.targets', '$(MSBuildThisFileDirectory)../'))" />
|
|
||||||
</ImportGroup>
|
|
||||||
|
|
||||||
<!-- Overrides the root's CreateReleaseNotesFromFile: its Condition="Exists('$(ChangeLogPath)')" is
|
|
||||||
evaluated before its own DependsOnTargets="GenerateChangelogFromGit" has run, so on a clean build the file
|
|
||||||
never exists yet and PackageReleaseNotes silently never gets set. Moving the existence check onto the
|
|
||||||
task (evaluated after the dependency runs) instead of the target fixes the ordering. -->
|
|
||||||
<Target Name="CreateReleaseNotesFromFile" BeforeTargets="GenerateNuspec"
|
|
||||||
DependsOnTargets="GenerateChangelogFromGit">
|
|
||||||
<ReadLinesFromFile File="$(ChangeLogPath)" Condition="Exists('$(ChangeLogPath)')">
|
|
||||||
<Output TaskParameter="Lines" ItemName="ReleaseNoteLines" />
|
|
||||||
</ReadLinesFromFile>
|
|
||||||
<PropertyGroup Condition="Exists('$(ChangeLogPath)')">
|
|
||||||
<PackageReleaseNotes>@(ReleaseNoteLines, '%0a')</PackageReleaseNotes>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Target>
|
|
||||||
</Project>
|
|
||||||
Reference in new issue
Block a user