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}]
|
||||
max_line_length = 1000
|
||||
|
||||
[*.{cs,vb}]
|
||||
# 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.*.cs,**/Migrations/*.cs}]
|
||||
generated_code = true
|
||||
|
||||
[{tests,samples}/**/*.cs]
|
||||
dotnet_diagnostic.CS1591.severity = none
|
||||
+2
-3
@@ -1,3 +1,2 @@
|
||||
* text=auto
|
||||
*.png binary
|
||||
*.cs diff=csharp
|
||||
Directory.Packages.props merge=union
|
||||
Directory.Packages.template.props merge=upstream-wins
|
||||
@@ -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.
|
||||
- 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.
|
||||
- **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
|
||||
|
||||
|
||||
@@ -10,17 +10,11 @@ description: "Use when writing API endpoints, routing, middleware, request/respo
|
||||
|
||||
## 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.
|
||||
- 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()`.
|
||||
|
||||
## 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
|
||||
|
||||
- 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
|
||||
|
||||
- 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.
|
||||
|
||||
## 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
|
||||
|
||||
- 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.
|
||||
- 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.
|
||||
- Use `LoggerMessage`-generated `partial` methods on a `partial class` — never log inline (e.g., `logger.LogInformation(…)`).
|
||||
|
||||
@@ -16,11 +16,11 @@ applyTo: "docker/**,compose*.yaml"
|
||||
|
||||
## 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`
|
||||
- `PUBLISHED_PROJECT`: Project name to publish (without path or extension)
|
||||
- `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
|
||||
|
||||
|
||||
@@ -6,9 +6,7 @@ applyTo: "**/*.{csproj,props,targets}"
|
||||
|
||||
## 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.
|
||||
|
||||
In `.csproj` files:
|
||||
All package versions are declared in `Directory.Packages.props` at the repo root. In `.csproj` files:
|
||||
|
||||
```xml
|
||||
<!-- Correct -->
|
||||
@@ -24,8 +22,6 @@ To add or update a version, edit `Directory.Packages.props`:
|
||||
<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)
|
||||
|
||||
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" />
|
||||
</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 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
|
||||
|
||||
- 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.
|
||||
- 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.
|
||||
- Always propose a set of basic tests for new or changed code.
|
||||
@@ -10,74 +10,29 @@ Versioning is **GitVersion-driven** (`GitVersion.yml`). Do not hand-pick version
|
||||
|
||||
## 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 |
|
||||
| --- | --- | --- |
|
||||
| `main`, `release/*` | — | `MAJOR.MINOR.PATCH` (stable; **patch increments on every commit**) |
|
||||
| `feature/*` | branch name | `…-<branch>.N` (pre-release; merging bumps **minor**) |
|
||||
| `hotfix/*` | branch name | `…-<branch>.N` (pre-release; merging bumps **patch**) |
|
||||
| `main` | — | `MAJOR.MINOR.PATCH` (stable) |
|
||||
| `develop` / `dev` / `development` | `beta` | `MAJOR.MINOR.PATCH-beta.N` |
|
||||
| `release/*`, `hotfix/*`, `feature/*` | branch name | `…-<branch>.N` |
|
||||
|
||||
- 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.
|
||||
- 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 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.
|
||||
```
|
||||
- Only changes under `src/`, `Directory.Packages.props`, or `GitVersion.yml` increment the version.
|
||||
- Increments are suppressed for already-merged branches and already-tagged commits.
|
||||
|
||||
## Procedure
|
||||
|
||||
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).
|
||||
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.
|
||||
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/`.
|
||||
4. **Tag.** `git tag -a v<version> -m "Release v<version>" && git push origin v<version>`.
|
||||
5. **Publish** packages to the configured feed.
|
||||
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
|
||||
|
||||
- **Tags are immutable** once pushed; never move or delete them.
|
||||
- **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
|
||||
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.SA1633.severity = none # File must have header
|
||||
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>
|
||||
<!-- Prepend organization name to default namespace -->
|
||||
<RootNamespace>Kritikos.$(MSBuildProjectName)</RootNamespace>
|
||||
<AssemblyName>Kritikos.$(MSBuildProjectName)</AssemblyName>
|
||||
<!-- Enable global usings based on project type -->
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<!-- Generate documentation file and ignore warnings for undocumented elements -->
|
||||
@@ -80,12 +79,20 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Label="Project Assets">
|
||||
<ProjectIcon Condition="Exists('$(MSBuildThisFileDirectory)icon.png')">$(MSBuildThisFileDirectory)icon.png</ProjectIcon>
|
||||
<ProjectIcon Condition="Exists('$(MSBuildProjectDirectory)\icon.png')">$(MSBuildProjectDirectory)\icon.png</ProjectIcon>
|
||||
<ProjectIcon Condition="Exists('$(MSBuildThisFileDirectory)\icon.png')">
|
||||
$(MSBuildThisFileDirectory)icon.png
|
||||
</ProjectIcon>
|
||||
<ProjectIcon Condition="Exists('$(MSBuildProjectDirectory)\icon.png')">
|
||||
$(MSBuildProjectDirectory)icon.png
|
||||
</ProjectIcon>
|
||||
<ProjectIconExists Condition="$(ProjectIcon) != ''">true</ProjectIconExists>
|
||||
|
||||
<ProjectReadMe Condition="Exists('$(MSBuildThisFileDirectory)README.md')">$(MSBuildThisFileDirectory)README.md</ProjectReadMe>
|
||||
<ProjectReadMe Condition="Exists('$(MSBuildProjectDirectory)\README.md')">$(MSBuildProjectDirectory)\README.md</ProjectReadMe>
|
||||
<ProjectReadMe Condition="Exists('$(MSBuildThisFileDirectory)\README.md')">
|
||||
$(MSBuildThisFileDirectory)README.md
|
||||
</ProjectReadMe>
|
||||
<ProjectReadMe Condition="Exists('$(MSBuildProjectDirectory)\README.md')">
|
||||
$(MSBuildProjectDirectory)README.md
|
||||
</ProjectReadMe>
|
||||
<ProjectReadMeExists Condition="$(ProjectReadMe) != ''">true</ProjectReadMeExists>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -120,6 +127,11 @@
|
||||
<EFOptimizeContext>true</EFOptimizeContext>
|
||||
</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>
|
||||
<AssemblyAttribute Include="System.CLSCompliant">
|
||||
<_Parameter1>$(ClsCompliant)</_Parameter1>
|
||||
@@ -147,6 +159,13 @@
|
||||
CopyToOutputDirectory="Never" Visible="false" />
|
||||
</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">
|
||||
<PackageId>$(RootNamespace)</PackageId>
|
||||
<Company>Kritikos IO</Company>
|
||||
@@ -164,7 +183,7 @@
|
||||
<EnablePackageValidation>true</EnablePackageValidation>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
|
||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Label="Versioning" Condition="'$(IsTestProject)' != 'true'">
|
||||
|
||||
+30
-57
@@ -9,12 +9,6 @@
|
||||
<None Update="packages.lock.json" Visible="false" />
|
||||
</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
|
||||
Condition="'$(UsingMicrosoftNETSdkWeb)' == 'True' AND @(PackageReference->WithMetadataValue('Identity','Microsoft.AspNetCore.OpenApi')->Count()) > 0">
|
||||
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server">
|
||||
@@ -35,69 +29,48 @@
|
||||
AfterTargets="GenerateOpenApiDocuments"
|
||||
Condition="'$(OpenApiDocumentsDirectory)' != ''">
|
||||
<Move SourceFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json"
|
||||
DestinationFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName)_v1.json"
|
||||
DestinationFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName)-v1.json"
|
||||
Condition="Exists('$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json')" />
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
OpenApiDocumentsDirectory tracks $(ArtifactsPath), which developers may override to a
|
||||
machine-specific location. Client generators (e.g. a checked-in .refitter file) need a
|
||||
stable, repo-relative path, so mirror the renamed document(s) into the repo's own
|
||||
artifacts/OpenApi folder regardless of where ArtifactsPath actually points.
|
||||
|
||||
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 Name="SetHierarchicalPackageOutputPath"
|
||||
BeforeTargets="_GetAbsoluteOutputPathsForPack"
|
||||
Condition="'$(ArtifactsPath)' != '' AND '$(PackageVersion)' != ''">
|
||||
<PropertyGroup>
|
||||
<PackageOutputPath>$(ArtifactsPath)/nuget/$(PackageId)/$(PackageVersion)</PackageOutputPath>
|
||||
</PropertyGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="AddInternalsVisibleTo" BeforeTargets="BeforeCompile">
|
||||
<!--
|
||||
Exposes assembly internals to friend assemblies.
|
||||
Add an ItemGroup with tags in the following format:
|
||||
<InternalsVisibleTo Include="CustomTest1" />
|
||||
-> [assembly: InternalsVisibleTo("CustomTest1")]
|
||||
<InternalsVisibleTo Include="CustomTest2, PublicKey=abc" />
|
||||
-> [assembly: InternalsVisibleTo("CustomTest2, PublicKey=abc")]
|
||||
<InternalsVisibleTo Include="$(AssemblyName).Custom" />
|
||||
-> [assembly: InternalsVisibleTo("ClassLibrary1.Custom")]
|
||||
|
||||
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")]
|
||||
<InternalsVisibleToSuffix Include=".Tests" /> (handled here)
|
||||
-> [assembly: InternalsVisibleTo("ClassLibrary1.Tests")]
|
||||
|
||||
Running at build time (before GetAssemblyAttributes) means the counts below
|
||||
see items declared in both imported props and the project body, so an
|
||||
explicit InternalsVisibleTo correctly suppresses the default suffix.
|
||||
-->
|
||||
|
||||
<!-- Default: expose internals to "<AssemblyName>.Tests" when the project has
|
||||
not declared any friend assemblies of its own. -->
|
||||
<ItemGroup Condition="@(InternalsVisibleTo->Count()) == 0 AND @(InternalsVisibleToSuffix->Count()) == 0">
|
||||
on a project with assembly name ClasLibrary1:
|
||||
<InternalsVisibleToSuffix Include=".Tests" />
|
||||
-> [assembly: InternalsVisibleTo("ClassLibrary1.Tests")]
|
||||
<InternalsVisibleToSuffix Include=".FunctionalTests" />
|
||||
-> [assembly: InternalsVisibleTo("ClassLibrary1.FunctionalTests")]
|
||||
-->
|
||||
|
||||
<!-- Handle InternalsVisibleTo -->
|
||||
<ItemGroup Condition="'@(InternalsVisibleTo->Count())' > 0">
|
||||
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
|
||||
<_Parameter1>%(InternalsVisibleTo.Identity)</_Parameter1>
|
||||
</AssemblyAttribute>
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Translate the suffix convention into InternalsVisibleTo items for the SDK,
|
||||
skipping the current assembly (e.g. a "*.Tests" project itself). -->
|
||||
<!-- Handle InternalsVisibleToSuffix -->
|
||||
<ItemGroup Condition="@(InternalsVisibleToSuffix->Count()) > 0">
|
||||
<InternalsVisibleTo Include="$(AssemblyName)%(InternalsVisibleToSuffix.Identity)"
|
||||
Condition="$(AssemblyName.EndsWith(%(InternalsVisibleToSuffix.Identity))) == 'false'" />
|
||||
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo"
|
||||
Condition="$(AssemblyName.EndsWith(%(InternalsVisibleToSuffix.Identity))) == 'false'">
|
||||
<_Parameter1>$(AssemblyName)%(InternalsVisibleToSuffix.Identity)</_Parameter1>
|
||||
</AssemblyAttribute>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<Project>
|
||||
<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="NewStyleCop.Analyzers" Version="1.2.1" />
|
||||
<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>
|
||||
</Project>
|
||||
+14
-33
@@ -1,46 +1,27 @@
|
||||
workflow: TrunkBased/preview1
|
||||
workflow: GitHubFlow/v1
|
||||
mode: ContinuousDelivery
|
||||
tag-prefix: '[vV]?'
|
||||
ignore:
|
||||
paths:
|
||||
- ^(?!src\/|Directory\.Packages\.props|GitVersion.yml).*
|
||||
- ^(?!src\/|Directory\.Packages\.props|GitVersion.yml).*
|
||||
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:
|
||||
mode: ContinuousDelivery
|
||||
label: alpha
|
||||
increment: Minor
|
||||
regex: ^develop$
|
||||
label: 'beta'
|
||||
regex: '^(dev|develop|development)$'
|
||||
source-branches:
|
||||
- main
|
||||
prevent-increment:
|
||||
when-current-commit-tagged: false
|
||||
pre-release-weight: 0
|
||||
- main
|
||||
feature:
|
||||
mode: ContinuousDelivery
|
||||
source-branches:
|
||||
- main
|
||||
- develop
|
||||
- release
|
||||
- develop
|
||||
- main
|
||||
hotfix:
|
||||
source-branches:
|
||||
- main
|
||||
- release
|
||||
pull-request:
|
||||
source-branches:
|
||||
- main
|
||||
- develop
|
||||
- release
|
||||
- feature
|
||||
- hotfix
|
||||
regex: ^hotfix?[\/-](?<BranchName>.+)
|
||||
mode: ContinuousDelivery
|
||||
release:
|
||||
mode: ContinuousDelivery
|
||||
|
||||
prevent-increment:
|
||||
of-merged-branch: true
|
||||
when-branch-merged: 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:String x:Key="/Default/CodeEditing/GenerateMemberBody/DocumentationGenerationKind/@EntryValue">Inherit</s:String>
|
||||
<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/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/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/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/XmlDocInspections/TypeAccessibility/@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/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/=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/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_002ECSharpPlaceEmbeddedOnSameLineMigration/@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/=VsTest/@EntryIndexedValue">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>
|
||||
</wpf:ResourceDictionary>
|
||||
@@ -1,79 +1,9 @@
|
||||
<Project>
|
||||
<ImportGroup
|
||||
Condition="Exists($([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))) == 'true'">
|
||||
<Import
|
||||
Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
|
||||
<ImportGroup Condition="Exists($([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))) == 'true'">
|
||||
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
|
||||
</ImportGroup>
|
||||
|
||||
<PropertyGroup Label="Package">
|
||||
<PackageProjectUrl>http://localhost</PackageProjectUrl>
|
||||
</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>
|
||||
@@ -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