├── .config
└── dotnet-tools.json
├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── appveyor.yml
├── build.cake
├── build.cmd
├── build.ps1
├── build.sh
├── global.json
└── src
├── .editorconfig
├── Directory.Build.props
├── Example.Tests
├── AnimalTests.cs
└── Example.Tests.csproj
├── Example.sln
└── Example
├── Animals
├── Cat.cs
└── Dog.cs
├── Example.csproj
└── IAnimal.cs
/.config/dotnet-tools.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 1,
3 | "isRoot": true,
4 | "tools": {
5 | "cake.tool": {
6 | "version": "5.0.0",
7 | "commands": [
8 | "dotnet-cake"
9 | ]
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_size = 4
6 | indent_style = space
7 | insert_final_newline = true
8 | trim_trailing_whitespace = true
9 |
10 | # This may not be needed, but kept for compatibility with VS
11 | [*.{sln,csproj}]
12 | end_of_line = crlf
13 |
14 | # Markdown files allows the use of trailing spaces to denote
15 | # a line break
16 | [*.md]
17 | trim_trailing_whitespace = false
18 |
19 | # Batch and powershell files requires crlf to be
20 | # used as the line ending.
21 | # Powershell also requires UTF-8 with BOM encoding
22 | # to function if utf8 characters is used (maibe batch files as well)
23 | [*.{bat,ps1}]
24 | charset = utf-8-bom
25 | end_of_line = crlf
26 |
27 | # Shell scripts requires the use of lf line endings
28 | # to be able to run.
29 | [*.sh]
30 | end_of_line = lf
31 |
32 | # The visual studio code file
33 | # requires the use of crlf line endings
34 | [tasks.json]
35 | end_of_line = crlf
36 |
37 | # xml indent 2 spaces
38 | [*.{xml,csproj,props,targets}]
39 | indent_size = 2
40 | indent_style = space
41 | tab_width = 2
42 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Misc folders
2 | [Bb]in/
3 | [Oo]bj/
4 | [Pp]ackages/
5 |
6 | # Build related
7 | tools/**
8 |
9 | ## Ignore Visual Studio temporary files, build results, and
10 | ## files generated by popular Visual Studio add-ons.
11 |
12 | # User-specific files
13 | *.suo
14 | *.user
15 | *.sln.docstates
16 | *.sln.ide/
17 | *.userprefs
18 | *.GhostDoc.xml
19 | .vs/
20 | .idea/
21 |
22 | # Build results
23 | [Dd]ebug/
24 | [Rr]elease/
25 | x64/
26 | *_i.c
27 | *_p.c
28 | *.ilk
29 | *.meta
30 | *.obj
31 | *.pch
32 | *.pdb
33 | *.pgc
34 | *.pgd
35 | *.rsp
36 | *.sbr
37 | *.tlb
38 | *.tli
39 | *.tlh
40 | *.tmp
41 | *.log
42 | *.vspscc
43 | *.vssscc
44 | .builds
45 |
46 | # Visual Studio profiler
47 | *.psess
48 | *.vsp
49 | *.vspx
50 |
51 | # ReSharper is a .NET coding add-in
52 | _ReSharper*
53 |
54 | # NCrunch
55 | *.ncrunch*
56 | .*crunch*.local.xml
57 | _NCrunch_*
58 |
59 | # NuGet Packages Directory
60 | packages
61 |
62 | # Windows
63 | Thumbs.db
64 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 - 2016 Patrik Svensson, Mattias Karlsson, Gary Ewan Park and contributors
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Cake example repository
2 |
3 | This repository is used as an minimal example of using the [Cake build system](https://cakebuild.net)
4 |
5 | You can read more in the Cake [Getting Started guide](https://cakebuild.net/docs/getting-started/setting-up-a-new-project).
6 |
7 | [](https://ci.appveyor.com/project/cakebuild/example)
8 |
--------------------------------------------------------------------------------
/appveyor.yml:
--------------------------------------------------------------------------------
1 | version: 1.0.{build}
2 | image: Visual Studio 2022
3 | build_script:
4 | - cmd: PowerShell -Version 4.0 .\build.ps1
5 | test: off
6 |
--------------------------------------------------------------------------------
/build.cake:
--------------------------------------------------------------------------------
1 | //////////////////////////////////////////////////////////////////////
2 | // ARGUMENTS
3 | //////////////////////////////////////////////////////////////////////
4 |
5 | var target = Argument("target", "Default");
6 | var configuration = Argument("configuration", "Release");
7 |
8 | //////////////////////////////////////////////////////////////////////
9 | // PREPARATION
10 | //////////////////////////////////////////////////////////////////////
11 |
12 | // Define directories.
13 | var buildDir = Directory("./src/Example/bin") + Directory(configuration);
14 |
15 | //////////////////////////////////////////////////////////////////////
16 | // TASKS
17 | //////////////////////////////////////////////////////////////////////
18 |
19 | Task("Clean")
20 | .Does(() =>
21 | {
22 | CleanDirectory(buildDir);
23 | });
24 |
25 | Task("Restore-NuGet-Packages")
26 | .IsDependentOn("Clean")
27 | .Does(() =>
28 | {
29 | DotNetRestore("./src/Example.sln");
30 | });
31 |
32 | Task("Build")
33 | .IsDependentOn("Restore-NuGet-Packages")
34 | .Does(() =>
35 | {
36 | DotNetBuild("./src/Example.sln", new DotNetBuildSettings
37 | {
38 | Configuration = configuration,
39 | NoRestore = true,
40 | });
41 | });
42 |
43 | Task("Run-Unit-Tests")
44 | .IsDependentOn("Build")
45 | .Does(() =>
46 | {
47 | DotNetTest("./src/Example.sln", new DotNetTestSettings
48 | {
49 | Configuration = configuration,
50 | NoRestore = true,
51 | });
52 | });
53 |
54 | //////////////////////////////////////////////////////////////////////
55 | // TASK TARGETS
56 | //////////////////////////////////////////////////////////////////////
57 |
58 | Task("Default")
59 | .IsDependentOn("Run-Unit-Tests");
60 |
61 | //////////////////////////////////////////////////////////////////////
62 | // EXECUTION
63 | //////////////////////////////////////////////////////////////////////
64 |
65 | RunTarget(target);
66 |
--------------------------------------------------------------------------------
/build.cmd:
--------------------------------------------------------------------------------
1 | @echo on
2 | @cd %~dp0
3 |
4 | set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
5 | set DOTNET_CLI_TELEMETRY_OPTOUT=1
6 | set DOTNET_NOLOGO=1
7 |
8 | dotnet tool restore
9 | @if %ERRORLEVEL% neq 0 goto :eof
10 |
11 | dotnet cake %*
12 |
--------------------------------------------------------------------------------
/build.ps1:
--------------------------------------------------------------------------------
1 | $ErrorActionPreference = 'Stop'
2 |
3 | Set-Location -LiteralPath $PSScriptRoot
4 |
5 | $env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = '1'
6 | $env:DOTNET_CLI_TELEMETRY_OPTOUT = '1'
7 | $env:DOTNET_NOLOGO = '1'
8 |
9 | dotnet tool restore
10 | if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
11 |
12 | dotnet cake @args
13 | if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
14 |
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -euox pipefail
3 |
4 | cd "$(dirname "${BASH_SOURCE[0]}")"
5 |
6 | export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
7 | export DOTNET_CLI_TELEMETRY_OPTOUT=1
8 | export DOTNET_NOLOGO=1
9 |
10 | dotnet tool restore
11 |
12 | dotnet cake "$@"
13 |
--------------------------------------------------------------------------------
/global.json:
--------------------------------------------------------------------------------
1 | {
2 | "sdk": {
3 | "version": "9.0.100",
4 | "rollForward": "latestFeature"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/.editorconfig:
--------------------------------------------------------------------------------
1 | # C# files
2 | [*.{cs, cake}]
3 |
4 | #### Core EditorConfig Options ####
5 |
6 | # Indentation and spacing
7 | indent_size = 4
8 | indent_style = space
9 | tab_width = 4
10 |
11 | # New line preferences
12 | end_of_line = crlf
13 | insert_final_newline = true
14 |
15 | #### .NET Coding Conventions ####
16 |
17 | # Organize usings
18 | dotnet_separate_import_directive_groups = true
19 | dotnet_sort_system_directives_first = true
20 | file_header_template = unset
21 |
22 | # this. and Me. preferences
23 | dotnet_style_qualification_for_event = false:warning
24 | dotnet_style_qualification_for_field = false:warning
25 | dotnet_style_qualification_for_method = false:warning
26 | dotnet_style_qualification_for_property = false:warning
27 |
28 | # Language keywords vs BCL types preferences
29 | dotnet_style_predefined_type_for_locals_parameters_members = true:warning
30 | dotnet_style_predefined_type_for_member_access = true:warning
31 |
32 | # Parentheses preferences
33 | dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
34 | dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
35 | dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
36 | dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
37 |
38 | # Modifier preferences
39 | dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning
40 |
41 | # Expression-level preferences
42 | dotnet_style_coalesce_expression = true:suggestion
43 | dotnet_style_collection_initializer = true:suggestion
44 | dotnet_style_explicit_tuple_names = true:suggestion
45 | dotnet_style_null_propagation = true:suggestion
46 | dotnet_style_object_initializer = true:suggestion
47 | dotnet_style_operator_placement_when_wrapping = beginning_of_line
48 | dotnet_style_prefer_auto_properties = true:silent
49 | dotnet_style_prefer_compound_assignment = true:suggestion
50 | dotnet_style_prefer_conditional_expression_over_assignment = true:silent
51 | dotnet_style_prefer_conditional_expression_over_return = true:silent
52 | dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
53 | dotnet_style_prefer_inferred_tuple_names = true:suggestion
54 | dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
55 | dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
56 | dotnet_style_prefer_simplified_interpolation = true:suggestion
57 |
58 | # Field preferences
59 | dotnet_style_readonly_field = true:suggestion
60 |
61 | # Parameter preferences
62 | dotnet_code_quality_unused_parameters = all:suggestion
63 |
64 | #### C# Coding Conventions ####
65 |
66 | # var preferences
67 | csharp_style_var_elsewhere = false:silent
68 | csharp_style_var_for_built_in_types = false:silent
69 | csharp_style_var_when_type_is_apparent = false:silent
70 |
71 | # Expression-bodied members
72 | csharp_style_expression_bodied_accessors = true:silent
73 | csharp_style_expression_bodied_constructors = false:silent
74 | csharp_style_expression_bodied_indexers = true:silent
75 | csharp_style_expression_bodied_lambdas = true:silent
76 | csharp_style_expression_bodied_local_functions = false:silent
77 | csharp_style_expression_bodied_methods = false:silent
78 | csharp_style_expression_bodied_operators = false:silent
79 | csharp_style_expression_bodied_properties = true:silent
80 |
81 | # Pattern matching preferences
82 | csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
83 | csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
84 | csharp_style_prefer_switch_expression = true:suggestion
85 |
86 | # Null-checking preferences
87 | csharp_style_conditional_delegate_call = true:suggestion
88 |
89 | # Modifier preferences
90 | csharp_prefer_static_local_function = true:suggestion
91 | csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent
92 |
93 | # Code-block preferences
94 | csharp_prefer_braces = true:silent
95 | csharp_prefer_simple_using_statement = true:suggestion
96 |
97 | # Expression-level preferences
98 | csharp_prefer_simple_default_expression = true:suggestion
99 | csharp_style_deconstructed_variable_declaration = true:suggestion
100 | csharp_style_inlined_variable_declaration = true:suggestion
101 | csharp_style_pattern_local_over_anonymous_function = true:suggestion
102 | csharp_style_prefer_index_operator = true:suggestion
103 | csharp_style_prefer_range_operator = true:suggestion
104 | csharp_style_throw_expression = true:suggestion
105 | csharp_style_unused_value_assignment_preference = discard_variable:suggestion
106 | csharp_style_unused_value_expression_statement_preference = discard_variable:silent
107 |
108 | # 'using' directive preferences
109 | csharp_using_directive_placement = outside_namespace:warning
110 |
111 | #### C# Formatting Rules ####
112 |
113 | # New line preferences
114 | csharp_new_line_before_catch = true
115 | csharp_new_line_before_else = true
116 | csharp_new_line_before_finally = true
117 | csharp_new_line_before_members_in_anonymous_types = true
118 | csharp_new_line_before_members_in_object_initializers = true
119 | csharp_new_line_before_open_brace = all
120 | csharp_new_line_between_query_expression_clauses = true
121 |
122 | # Indentation preferences
123 | csharp_indent_block_contents = true
124 | csharp_indent_braces = false
125 | csharp_indent_case_contents = true
126 | csharp_indent_case_contents_when_block = false
127 | csharp_indent_labels = flush_left
128 | csharp_indent_switch_labels = true
129 |
130 | # Space preferences
131 | csharp_space_after_cast = false
132 | csharp_space_after_colon_in_inheritance_clause = true
133 | csharp_space_after_comma = true
134 | csharp_space_after_dot = false
135 | csharp_space_after_keywords_in_control_flow_statements = true
136 | csharp_space_after_semicolon_in_for_statement = true
137 | csharp_space_around_binary_operators = before_and_after
138 | csharp_space_around_declaration_statements = false
139 | csharp_space_before_colon_in_inheritance_clause = true
140 | csharp_space_before_comma = false
141 | csharp_space_before_dot = false
142 | csharp_space_before_open_square_brackets = false
143 | csharp_space_before_semicolon_in_for_statement = false
144 | csharp_space_between_empty_square_brackets = false
145 | csharp_space_between_method_call_empty_parameter_list_parentheses = false
146 | csharp_space_between_method_call_name_and_opening_parenthesis = false
147 | csharp_space_between_method_call_parameter_list_parentheses = false
148 | csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
149 | csharp_space_between_method_declaration_name_and_open_parenthesis = false
150 | csharp_space_between_method_declaration_parameter_list_parentheses = false
151 | csharp_space_between_parentheses = false
152 | csharp_space_between_square_brackets = false
153 |
154 | # Wrapping preferences
155 | csharp_preserve_single_line_blocks = true
156 | csharp_preserve_single_line_statements = false
157 |
158 | #### Naming styles ####
159 |
160 | # Naming rules
161 |
162 | dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning
163 | dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
164 | dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
165 |
166 | dotnet_naming_rule.types_should_be_pascal_case.severity = warning
167 | dotnet_naming_rule.types_should_be_pascal_case.symbols = types
168 | dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
169 |
170 | dotnet_naming_rule.method_should_be_pascal_case.severity = warning
171 | dotnet_naming_rule.method_should_be_pascal_case.symbols = method
172 | dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case
173 |
174 | dotnet_naming_rule.public_or_protected_field_should_be_pascal_case.severity = warning
175 | dotnet_naming_rule.public_or_protected_field_should_be_pascal_case.symbols = public_or_protected_field
176 | dotnet_naming_rule.public_or_protected_field_should_be_pascal_case.style = pascal_case
177 |
178 | dotnet_naming_rule.private_or_internal_static_field_should_be_pascal_case.severity = warning
179 | dotnet_naming_rule.private_or_internal_static_field_should_be_pascal_case.symbols = private_or_internal_static_field
180 | dotnet_naming_rule.private_or_internal_static_field_should_be_pascal_case.style = pascal_case
181 |
182 | dotnet_naming_rule.private_or_internal_field_should_be_camelcase.severity = warning
183 | dotnet_naming_rule.private_or_internal_field_should_be_camelcase.symbols = private_or_internal_field
184 | dotnet_naming_rule.private_or_internal_field_should_be_camelcase.style = camelcase
185 |
186 | dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning
187 | dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
188 | dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
189 |
190 | # Symbol specifications
191 |
192 | dotnet_naming_symbols.interface.applicable_kinds = interface
193 | dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
194 | dotnet_naming_symbols.interface.required_modifiers =
195 |
196 | dotnet_naming_symbols.method.applicable_kinds = method
197 | dotnet_naming_symbols.method.applicable_accessibilities = public
198 | dotnet_naming_symbols.method.required_modifiers =
199 |
200 | dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field
201 | dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected
202 | dotnet_naming_symbols.public_or_protected_field.required_modifiers =
203 |
204 | dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
205 | dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
206 | dotnet_naming_symbols.private_or_internal_field.required_modifiers =
207 |
208 | dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field
209 | dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected
210 | dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static
211 |
212 | dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
213 | dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
214 | dotnet_naming_symbols.types.required_modifiers =
215 |
216 | dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
217 | dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
218 | dotnet_naming_symbols.non_field_members.required_modifiers =
219 |
220 | # Naming styles
221 |
222 | dotnet_naming_style.pascal_case.required_prefix =
223 | dotnet_naming_style.pascal_case.required_suffix =
224 | dotnet_naming_style.pascal_case.word_separator =
225 | dotnet_naming_style.pascal_case.capitalization = pascal_case
226 |
227 | dotnet_naming_style.begins_with_i.required_prefix = I
228 | dotnet_naming_style.begins_with_i.required_suffix =
229 | dotnet_naming_style.begins_with_i.word_separator =
230 | dotnet_naming_style.begins_with_i.capitalization = pascal_case
231 |
232 | dotnet_naming_style.camelcase.required_prefix =
233 | dotnet_naming_style.camelcase.required_suffix =
234 | dotnet_naming_style.camelcase.word_separator =
235 | dotnet_naming_style.camelcase.capitalization = camel_case
236 |
237 |
--------------------------------------------------------------------------------
/src/Directory.Build.props:
--------------------------------------------------------------------------------
1 |
2 |
3 | 12
4 | enable
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/Example.Tests/AnimalTests.cs:
--------------------------------------------------------------------------------
1 | using Example.Animals;
2 | using NUnit.Framework;
3 |
4 | namespace Example.Tests;
5 |
6 | [TestFixture]
7 | public sealed class AnimalTests
8 | {
9 | [Test]
10 | public void The_Cat_Should_Meow()
11 | {
12 | // Given
13 | var cat = new Cat();
14 |
15 | // When
16 | var result = cat.Talk();
17 |
18 | // Then
19 | Assert.AreEqual("Meow", result);
20 | }
21 |
22 | [Test]
23 | public void The_Dog_Should_Bark()
24 | {
25 | // Given
26 | var dog = new Dog();
27 |
28 | // When
29 | var result = dog.Talk();
30 |
31 | // Then
32 | Assert.AreEqual("Woof", result);
33 | }
34 | }
--------------------------------------------------------------------------------
/src/Example.Tests/Example.Tests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | net8.0
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/Example.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 2013
4 | VisualStudioVersion = 12.0.31101.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.Tests", "Example.Tests\Example.Tests.csproj", "{7B3656D1-98AD-45C8-826F-2E5A13BED71E}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example", "Example\Example.csproj", "{6E099E06-32E2-441F-B831-331ECB76FC4E}"
9 | EndProject
10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{39F51784-E1AE-478D-BAE2-8A4428AEE20B}"
11 | ProjectSection(SolutionItems) = preProject
12 | ..\build.cake = ..\build.cake
13 | ..\build.ps1 = ..\build.ps1
14 | EndProjectSection
15 | EndProject
16 | Global
17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
18 | Debug|Any CPU = Debug|Any CPU
19 | Release|Any CPU = Release|Any CPU
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {7B3656D1-98AD-45C8-826F-2E5A13BED71E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {7B3656D1-98AD-45C8-826F-2E5A13BED71E}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {7B3656D1-98AD-45C8-826F-2E5A13BED71E}.Release|Any CPU.ActiveCfg = Release|Any CPU
25 | {7B3656D1-98AD-45C8-826F-2E5A13BED71E}.Release|Any CPU.Build.0 = Release|Any CPU
26 | {6E099E06-32E2-441F-B831-331ECB76FC4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27 | {6E099E06-32E2-441F-B831-331ECB76FC4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 | {6E099E06-32E2-441F-B831-331ECB76FC4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 | {6E099E06-32E2-441F-B831-331ECB76FC4E}.Release|Any CPU.Build.0 = Release|Any CPU
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | GlobalSection(ExtensibilityGlobals) = postSolution
35 | SolutionGuid = {131EFBB6-D070-404F-89C8-BFD611D9B7AF}
36 | EndGlobalSection
37 | EndGlobal
38 |
--------------------------------------------------------------------------------
/src/Example/Animals/Cat.cs:
--------------------------------------------------------------------------------
1 | namespace Example.Animals;
2 |
3 | public sealed class Cat : IAnimal
4 | {
5 | public string Talk()
6 | {
7 | return "Meow";
8 | }
9 | }
--------------------------------------------------------------------------------
/src/Example/Animals/Dog.cs:
--------------------------------------------------------------------------------
1 | namespace Example.Animals;
2 |
3 | public sealed class Dog : IAnimal
4 | {
5 | public string Talk()
6 | {
7 | return "Woof";
8 | }
9 | }
--------------------------------------------------------------------------------
/src/Example/Example.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | net8.0
4 |
5 |
--------------------------------------------------------------------------------
/src/Example/IAnimal.cs:
--------------------------------------------------------------------------------
1 | namespace Example;
2 |
3 | public interface IAnimal
4 | {
5 | string Talk();
6 | }
--------------------------------------------------------------------------------