├── DomainService ├── Request.cs ├── Response.cs ├── IDomainService.cs ├── Domain.csproj └── DomainService.cs ├── deploy.sh ├── .editorconfig ├── Handlers ├── appsettings.json ├── Properties │ └── AssemblyInfo.cs ├── ServiceCollectionHelper.cs ├── Handler.cs └── Handlers.csproj ├── .travis.yml ├── Tests ├── Tests.cs ├── Properties │ └── AssemblyInfo.cs ├── HandlerTests.cs └── Tests.csproj ├── serverless.yml ├── Serverless.Microservice.Bootstrap.sln ├── README.md ├── .npmignore └── .gitignore /DomainService/Request.cs: -------------------------------------------------------------------------------- 1 | namespace Domain 2 | { 3 | public class Request 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /DomainService/Response.cs: -------------------------------------------------------------------------------- 1 | namespace Domain 2 | { 3 | public class Response 4 | { 5 | public string Message { get; set; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DomainService/IDomainService.cs: -------------------------------------------------------------------------------- 1 | namespace Domain 2 | { 3 | public interface IDomainService 4 | { 5 | Response Process(Request request); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export AWS_ACCESS_KEY_ID=$AWS_SECRET_ID && export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY 4 | serverless deploy --stage v1 --region ap-southeast-2 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | # Unix-style newlines with a newline ending every file 4 | [*] 5 | end_of_line = lf 6 | insert_final_newline = true 7 | 8 | indent_style = space 9 | indent_size = 4 10 | 11 | [{package.json,.travis.yml}] 12 | indent_style = space 13 | indent_size = 2 14 | -------------------------------------------------------------------------------- /Handlers/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "AWS.Logging": { 3 | "IncludeCategory": false, 4 | "IncludeLogLevel": false, 5 | "IncludeNewline": true, 6 | "LogLevel": { 7 | "Default": "Information", 8 | "System": "Information", 9 | "Microsoft": "Information" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: csharp 2 | dist: trusty 3 | mono: none 4 | dotnet: 2.0.0 5 | 6 | before_script: 7 | - npm install -g serverless 8 | 9 | script: 10 | - "./build.sh --quiet verify" 11 | - dotnet test Tests/Tests.csproj 12 | 13 | #deploy: 14 | #- provider: script 15 | # skip_cleanup: true 16 | # script: "./deploy.sh" 17 | # on: 18 | # branch: master 19 | -------------------------------------------------------------------------------- /DomainService/Domain.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | Domain 6 | Domain 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Tests/Tests.cs: -------------------------------------------------------------------------------- 1 | using Domain; 2 | using Xunit; 3 | using NSubstitute; 4 | using Microsoft.Extensions.Logging; 5 | 6 | namespace Tests 7 | { 8 | public class Tests 9 | { 10 | [Fact] 11 | public void TestResult() 12 | { 13 | var service = new DomainService(Substitute.For>()); 14 | 15 | var result = service.Process(new Request()); 16 | 17 | Assert.IsType(result); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Handlers/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices; 2 | using Amazon.Lambda.Core; 3 | 4 | [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] 5 | 6 | // Setting ComVisible to false makes the types in this assembly not visible 7 | // to COM components. If you need to access a type in this assembly from 8 | // COM, set the ComVisible attribute to true on that type. 9 | [assembly: ComVisible(false)] 10 | 11 | // The following GUID is for the ID of the typelib if this project is exposed to COM 12 | [assembly: Guid("7d7bae76-8cea-4691-9a55-8c7d121670be")] 13 | -------------------------------------------------------------------------------- /DomainService/DomainService.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Logging; 2 | 3 | namespace Domain 4 | { 5 | public class DomainService: IDomainService 6 | { 7 | private readonly ILogger _logger; 8 | 9 | public DomainService(ILogger logger) 10 | { 11 | _logger = logger; 12 | } 13 | public Response Process(Request request) 14 | { 15 | _logger.LogInformation("Processing request: {0}", request); 16 | return new Response 17 | { 18 | Message = "It worked!" 19 | }; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /serverless.yml: -------------------------------------------------------------------------------- 1 | service: serverless-microservice-bootstrap 2 | 3 | provider: 4 | name: aws 5 | runtime: dotnetcore2.0 6 | 7 | # you can overwrite defaults here 8 | stage: v1 9 | region: ap-southeast-2 10 | deploymentBucket: serverless-microservice-bootstrap.${self:provider.region}.deploys 11 | 12 | # you can add packaging information here 13 | package: 14 | artifact: Handlers/bin/release/netcoreapp2.0/publish/deploy-package.zip 15 | 16 | functions: 17 | hello: 18 | handler: Handlers::Handlers.Handler::Hello 19 | 20 | healthcheck: 21 | handler: Handlers::Handlers.Handler::HealthCheck 22 | events: 23 | - http: 24 | path: healthcheck 25 | method: get 26 | cors: true 27 | -------------------------------------------------------------------------------- /Handlers/ServiceCollectionHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Amazon.Lambda.Core; 3 | using Domain; 4 | using Microsoft.Extensions.DependencyInjection; 5 | using Microsoft.Extensions.Logging; 6 | 7 | namespace Handlers 8 | { 9 | public static class ServiceCollectionHelper 10 | { 11 | public static IServiceProvider ConfigureServiceCollection(ILambdaContext context) 12 | { 13 | var serviceCollection = new ServiceCollection().AddSingleton(context); 14 | 15 | ConfigureServices(serviceCollection); 16 | 17 | return serviceCollection.BuildServiceProvider(); 18 | } 19 | 20 | public static void ConfigureServices(IServiceCollection services) 21 | { 22 | services.AddLogging(configure => configure.AddLambdaLogger()); 23 | services.AddSingleton(); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Tests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyConfiguration("")] 9 | [assembly: AssemblyCompany("")] 10 | [assembly: AssemblyProduct("Tests")] 11 | [assembly: AssemblyTrademark("")] 12 | 13 | // Setting ComVisible to false makes the types in this assembly not visible 14 | // to COM components. If you need to access a type in this assembly from 15 | // COM, set the ComVisible attribute to true on that type. 16 | [assembly: ComVisible(false)] 17 | 18 | // The following GUID is for the ID of the typelib if this project is exposed to COM 19 | [assembly: Guid("d3c1b13d-6650-4208-b592-a0af15cf8db2")] 20 | -------------------------------------------------------------------------------- /Tests/HandlerTests.cs: -------------------------------------------------------------------------------- 1 | using Amazon.Lambda.APIGatewayEvents; 2 | using Amazon.Lambda.TestUtilities; 3 | using Domain; 4 | using Handlers; 5 | using Xunit; 6 | 7 | namespace Tests 8 | { 9 | public class HandlerTests 10 | { 11 | [Fact] 12 | public void TestHealthCheck() 13 | { 14 | var handler = new Handler(); 15 | 16 | var request = new APIGatewayProxyRequest(); 17 | var context = new TestLambdaContext(); 18 | 19 | var response = handler.HealthCheck(request, context); 20 | 21 | Assert.Equal(200, response.StatusCode); 22 | Assert.Equal("OK", response.Body); 23 | } 24 | 25 | [Fact] 26 | public void TestHello() 27 | { 28 | var handler = new Handler(); 29 | 30 | var context = new TestLambdaContext(); 31 | 32 | var response = handler.Hello(new Request(), context); 33 | 34 | Assert.NotNull(response); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tests/Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp2.0 5 | portable 6 | Tests 7 | Tests 8 | true 9 | false 10 | false 11 | false 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Handlers/Handler.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Amazon.Lambda.APIGatewayEvents; 3 | using Amazon.Lambda.Core; 4 | using Domain; 5 | using Microsoft.Extensions.DependencyInjection; 6 | using Microsoft.Extensions.Logging; 7 | 8 | namespace Handlers 9 | { 10 | public class Handler 11 | { 12 | public Response Hello(Request request, ILambdaContext context) 13 | { 14 | var serviceProcess = ServiceCollectionHelper.ConfigureServiceCollection(context).GetService(); 15 | return serviceProcess.Process(request); 16 | } 17 | 18 | public APIGatewayProxyResponse HealthCheck(APIGatewayProxyRequest request, ILambdaContext context) 19 | { 20 | var logger = ServiceCollectionHelper.ConfigureServiceCollection(context).GetService>(); 21 | 22 | logger.LogInformation("Function name is {0}", context.FunctionName); 23 | logger.LogCritical("Http method is {0}", request.HttpMethod); 24 | 25 | return new APIGatewayProxyResponse() 26 | { 27 | StatusCode = 200, 28 | Headers = new Dictionary() { {"Context-Type", "text/html"} }, 29 | Body = "OK" 30 | }; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Handlers/Handlers.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | netcoreapp2.0 4 | true 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Always 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Serverless.Microservice.Bootstrap.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26730.10 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9D4D35B5-177A-439F-AAAA-AF29F41BD49B}" 7 | ProjectSection(SolutionItems) = preProject 8 | .travis.yml = .travis.yml 9 | build.ps1 = build.ps1 10 | build.sh = build.sh 11 | deploy.sh = deploy.sh 12 | README.md = README.md 13 | serverless.yml = serverless.yml 14 | EndProjectSection 15 | EndProject 16 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Handlers", "Handlers\Handlers.csproj", "{D2124DA5-1A70-4485-BDC2-D554A6283A06}" 17 | EndProject 18 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj", "{8C0FD11D-C0B4-4AE7-B627-B14D074D1788}" 19 | EndProject 20 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Domain", "DomainService\Domain.csproj", "{16ADD706-F580-4ED0-A3AD-3DD40255C3F3}" 21 | EndProject 22 | Global 23 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 24 | Debug|Any CPU = Debug|Any CPU 25 | Release|Any CPU = Release|Any CPU 26 | EndGlobalSection 27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 28 | {D2124DA5-1A70-4485-BDC2-D554A6283A06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {D2124DA5-1A70-4485-BDC2-D554A6283A06}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {D2124DA5-1A70-4485-BDC2-D554A6283A06}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {D2124DA5-1A70-4485-BDC2-D554A6283A06}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {8C0FD11D-C0B4-4AE7-B627-B14D074D1788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {8C0FD11D-C0B4-4AE7-B627-B14D074D1788}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {8C0FD11D-C0B4-4AE7-B627-B14D074D1788}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {8C0FD11D-C0B4-4AE7-B627-B14D074D1788}.Release|Any CPU.Build.0 = Release|Any CPU 36 | {16ADD706-F580-4ED0-A3AD-3DD40255C3F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 37 | {16ADD706-F580-4ED0-A3AD-3DD40255C3F3}.Debug|Any CPU.Build.0 = Debug|Any CPU 38 | {16ADD706-F580-4ED0-A3AD-3DD40255C3F3}.Release|Any CPU.ActiveCfg = Release|Any CPU 39 | {16ADD706-F580-4ED0-A3AD-3DD40255C3F3}.Release|Any CPU.Build.0 = Release|Any CPU 40 | EndGlobalSection 41 | GlobalSection(SolutionProperties) = preSolution 42 | HideSolutionNode = FALSE 43 | EndGlobalSection 44 | GlobalSection(ExtensibilityGlobals) = postSolution 45 | SolutionGuid = {F5B69645-B0B9-4557-A722-A476D67F90D0} 46 | EndGlobalSection 47 | EndGlobal 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Serverless Microservice Bootstrap 2 | 3 | [![serverless](https://dl.dropboxusercontent.com/s/d6opqwym91k0roz/serverless_badge_v3.svg)](http://www.serverless.com) 4 | [![Build Status](https://travis-ci.org/PageUpPeopleOrg/serverless-microservice-bootstrap.svg?branch=making-it-relevant)](https://travis-ci.org/PageUpPeopleOrg/serverless-microservice-bootstrap) 5 | 6 | This is a serverless framework template project for creating microservices using microsoft dotnet core. 7 | 8 | ## Getting Started 9 | 10 | Make sure you have the [Serverless Framework](http://www.serverless.com) installed. 11 | ``` 12 | npm install serverless -g 13 | ``` 14 | 15 | Install dotnet core on your machine. Instructions can be found at [dotnet website](https://www.microsoft.com/net/download) 16 | 17 | 18 | ## Build 19 | 20 | Run the following command in powershell to build the project. 21 | ``` 22 | build.ps1 23 | ``` 24 | 25 | Use the following command for bash. 26 | ``` 27 | ./build.sh 28 | ``` 29 | 30 | ## Test 31 | To run unit tests 32 | ``` 33 | dotnet test .\src\Tests 34 | ``` 35 | 36 | ## Deploy 37 | 38 | ### Continous deployment with Travis 39 | The repository is configured for continous deployment with Travis. Refer to the include `.travis.yml` file. 40 | For the purpose of templating, deployment section has been commented out. Please uncomment the following lines in `.travis.yml`. 41 | 42 | ``` 43 | deploy: 44 | - provider: script 45 | skip_cleanup: true 46 | script: "./deploy.sh" 47 | on: 48 | branch: master 49 | ``` 50 | 51 | ### To deploy from the command line 52 | Use the following command to deploy from the command line tool 53 | ``` 54 | serverless deploy 55 | ``` 56 | 57 | #### Expected serverless output 58 | ``` 59 | λ serverless deploy 60 | Serverless: Packaging service... 61 | Serverless: Uploading CloudFormation file to S3... 62 | Serverless: Uploading artifacts... 63 | Serverless: Validating template... 64 | Serverless: Updating Stack... 65 | Serverless: Checking Stack update progress... 66 | .................... 67 | Serverless: Stack update finished... 68 | Service Information 69 | service: serverless-microservice-bootstrap 70 | stage: v1 71 | region: ap-southeast-2 72 | stack: serverless-microservice-bootstrap-v1 73 | api keys: 74 | None 75 | endpoints: 76 | GET - https://xxxxxxxx.execute-api.ap-southeast-2.amazonaws.com/v1/healthcheck 77 | functions: 78 | hello: serverless-microservice-bootstrap-v1-hello 79 | healthcheck: serverless-microservice-bootstrap-v1-healthcheck 80 | ``` 81 | 82 | #### Test the deployment 83 | 84 | Bootstrap includes a healthcheck endpoint for which the get endpoint will be written console, refer to the deploy output above. A simple curl command like below should verify the deployment. 85 | 86 | ``curl -i https://xxxxxxxx.execute-api.ap-southeast-2.amazonaws.com/v1/healthcheck`` 87 | 88 | *Output should be similar to* 89 | 90 | ``` 91 | HTTP/2 200 92 | content-type: application/json 93 | content-length: 2 94 | date: Wed, 10 Jan 2018 15:19:02 GMT 95 | x-amzn-requestid: 95b5bc4a-f619-11e7-8866-43a29ca1cc05 96 | context-type: text/html 97 | x-amzn-trace-id: sampled=0;root=1-5a562ee4-4453904d7fcc88f425547103 98 | x-cache: Miss from cloudfront 99 | via: 1.1 9edc66051886b13f4d282ea125622e34.cloudfront.net (CloudFront) 100 | x-amz-cf-id: eXe9WCo_Kf3futXvyNcHlGGtZ0Yz1X3OxXfxf8XhNweeC-NsDvBomQ== 101 | 102 | OK 103 | 104 | ``` 105 | 106 | 107 | #### Removing after testing 108 | If you are playing around, remember to remove the serverless stack after testing using the following command. 109 | 110 | ``serverless remove`` 111 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | 24 | # Visual Studio 2015 cache/options directory 25 | .vs/ 26 | # Uncomment if you have tasks that create the project's static files in wwwroot 27 | #wwwroot/ 28 | 29 | # MSTest test Results 30 | [Tt]est[Rr]esult*/ 31 | [Bb]uild[Ll]og.* 32 | 33 | # NUNIT 34 | *.VisualState.xml 35 | TestResult.xml 36 | 37 | # Build Results of an ATL Project 38 | [Dd]ebugPS/ 39 | [Rr]eleasePS/ 40 | dlldata.c 41 | 42 | # DNX 43 | project.lock.json 44 | artifacts/ 45 | 46 | *_i.c 47 | *_p.c 48 | *_i.h 49 | *.ilk 50 | *.meta 51 | *.obj 52 | *.pch 53 | *.pdb 54 | *.pgc 55 | *.pgd 56 | *.rsp 57 | *.sbr 58 | *.tlb 59 | *.tli 60 | *.tlh 61 | *.tmp 62 | *.tmp_proj 63 | *.log 64 | *.vspscc 65 | *.vssscc 66 | .builds 67 | *.pidb 68 | *.svclog 69 | *.scc 70 | 71 | # Chutzpah Test files 72 | _Chutzpah* 73 | 74 | # Visual C++ cache files 75 | ipch/ 76 | *.aps 77 | *.ncb 78 | *.opendb 79 | *.opensdf 80 | *.sdf 81 | *.cachefile 82 | 83 | # Visual Studio profiler 84 | *.psess 85 | *.vsp 86 | *.vspx 87 | *.sap 88 | 89 | # TFS 2012 Local Workspace 90 | $tf/ 91 | 92 | # Guidance Automation Toolkit 93 | *.gpState 94 | 95 | # ReSharper is a .NET coding add-in 96 | _ReSharper*/ 97 | *.[Rr]e[Ss]harper 98 | *.DotSettings.user 99 | 100 | # JustCode is a .NET coding add-in 101 | .JustCode 102 | 103 | # TeamCity is a build add-in 104 | _TeamCity* 105 | 106 | # DotCover is a Code Coverage Tool 107 | *.dotCover 108 | 109 | # NCrunch 110 | _NCrunch_* 111 | .*crunch*.local.xml 112 | nCrunchTemp_* 113 | 114 | # MightyMoose 115 | *.mm.* 116 | AutoTest.Net/ 117 | 118 | # Web workbench (sass) 119 | .sass-cache/ 120 | 121 | # Installshield output folder 122 | [Ee]xpress/ 123 | 124 | # DocProject is a documentation generator add-in 125 | DocProject/buildhelp/ 126 | DocProject/Help/*.HxT 127 | DocProject/Help/*.HxC 128 | DocProject/Help/*.hhc 129 | DocProject/Help/*.hhk 130 | DocProject/Help/*.hhp 131 | DocProject/Help/Html2 132 | DocProject/Help/html 133 | 134 | # Click-Once directory 135 | publish/ 136 | 137 | # Publish Web Output 138 | *.[Pp]ublish.xml 139 | *.azurePubxml 140 | # TODO: Comment the next line if you want to checkin your web deploy settings 141 | # but database connection strings (with potential passwords) will be unencrypted 142 | *.pubxml 143 | *.publishproj 144 | 145 | # NuGet Packages 146 | *.nupkg 147 | # The packages folder can be ignored because of Package Restore 148 | **/packages/* 149 | # except build/, which is used as an MSBuild target. 150 | !**/packages/build/ 151 | # Uncomment if necessary however generally it will be regenerated when needed 152 | #!**/packages/repositories.config 153 | # NuGet v3's project.json files produces more ignoreable files 154 | *.nuget.props 155 | *.nuget.targets 156 | 157 | # Microsoft Azure Build Output 158 | csx/ 159 | *.build.csdef 160 | 161 | # Microsoft Azure Emulator 162 | ecf/ 163 | rcf/ 164 | 165 | # Microsoft Azure ApplicationInsights config file 166 | ApplicationInsights.config 167 | 168 | # Windows Store app package directory 169 | AppPackages/ 170 | BundleArtifacts/ 171 | 172 | # Visual Studio cache files 173 | # files ending in .cache can be ignored 174 | *.[Cc]ache 175 | # but keep track of directories ending in .cache 176 | !*.[Cc]ache/ 177 | 178 | # Others 179 | ClientBin/ 180 | ~$* 181 | *~ 182 | *.dbmdl 183 | *.dbproj.schemaview 184 | *.pfx 185 | *.publishsettings 186 | node_modules/ 187 | orleans.codegen.cs 188 | 189 | # RIA/Silverlight projects 190 | Generated_Code/ 191 | 192 | # Backup & report files from converting an old project file 193 | # to a newer Visual Studio version. Backup files are not needed, 194 | # because we have git ;-) 195 | _UpgradeReport_Files/ 196 | Backup*/ 197 | UpgradeLog*.XML 198 | UpgradeLog*.htm 199 | 200 | # SQL Server files 201 | *.mdf 202 | *.ldf 203 | 204 | # Business Intelligence projects 205 | *.rdl.data 206 | *.bim.layout 207 | *.bim_*.settings 208 | 209 | # Microsoft Fakes 210 | FakesAssemblies/ 211 | 212 | # GhostDoc plugin setting file 213 | *.GhostDoc.xml 214 | 215 | # Node.js Tools for Visual Studio 216 | .ntvs_analysis.dat 217 | 218 | # Visual Studio 6 build log 219 | *.plg 220 | 221 | # Visual Studio 6 workspace options file 222 | *.opt 223 | 224 | # Visual Studio LightSwitch build output 225 | **/*.HTMLClient/GeneratedArtifacts 226 | **/*.DesktopClient/GeneratedArtifacts 227 | **/*.DesktopClient/ModelManifest.xml 228 | **/*.Server/GeneratedArtifacts 229 | **/*.Server/ModelManifest.xml 230 | _Pvt_Extensions 231 | 232 | # Paket dependency manager 233 | .paket/paket.exe 234 | 235 | # FAKE - F# Make 236 | .fake/ 237 | *.orig 238 | 239 | # macOS 240 | .DS_Store 241 | 242 | # JetBrains Rider C# IDE 243 | .idea* 244 | 245 | # Serverless directories 246 | .serverless 247 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | 24 | # Visual Studio 2015 cache/options directory 25 | .vs/ 26 | # Uncomment if you have tasks that create the project's static files in wwwroot 27 | #wwwroot/ 28 | 29 | # MSTest test Results 30 | [Tt]est[Rr]esult*/ 31 | [Bb]uild[Ll]og.* 32 | 33 | # NUNIT 34 | *.VisualState.xml 35 | TestResult.xml 36 | 37 | # Build Results of an ATL Project 38 | [Dd]ebugPS/ 39 | [Rr]eleasePS/ 40 | dlldata.c 41 | 42 | # DNX 43 | project.lock.json 44 | artifacts/ 45 | 46 | *_i.c 47 | *_p.c 48 | *_i.h 49 | *.ilk 50 | *.meta 51 | *.obj 52 | *.pch 53 | *.pdb 54 | *.pgc 55 | *.pgd 56 | *.rsp 57 | *.sbr 58 | *.tlb 59 | *.tli 60 | *.tlh 61 | *.tmp 62 | *.tmp_proj 63 | *.log 64 | *.vspscc 65 | *.vssscc 66 | .builds 67 | *.pidb 68 | *.svclog 69 | *.scc 70 | 71 | # Chutzpah Test files 72 | _Chutzpah* 73 | 74 | # Visual C++ cache files 75 | ipch/ 76 | *.aps 77 | *.ncb 78 | *.opendb 79 | *.opensdf 80 | *.sdf 81 | *.cachefile 82 | 83 | # Visual Studio profiler 84 | *.psess 85 | *.vsp 86 | *.vspx 87 | *.sap 88 | 89 | # TFS 2012 Local Workspace 90 | $tf/ 91 | 92 | # Guidance Automation Toolkit 93 | *.gpState 94 | 95 | # ReSharper is a .NET coding add-in 96 | _ReSharper*/ 97 | *.[Rr]e[Ss]harper 98 | *.DotSettings.user 99 | 100 | # JustCode is a .NET coding add-in 101 | .JustCode 102 | 103 | # TeamCity is a build add-in 104 | _TeamCity* 105 | 106 | # DotCover is a Code Coverage Tool 107 | *.dotCover 108 | 109 | # NCrunch 110 | _NCrunch_* 111 | .*crunch*.local.xml 112 | nCrunchTemp_* 113 | 114 | # MightyMoose 115 | *.mm.* 116 | AutoTest.Net/ 117 | 118 | # Web workbench (sass) 119 | .sass-cache/ 120 | 121 | # Installshield output folder 122 | [Ee]xpress/ 123 | 124 | # DocProject is a documentation generator add-in 125 | DocProject/buildhelp/ 126 | DocProject/Help/*.HxT 127 | DocProject/Help/*.HxC 128 | DocProject/Help/*.hhc 129 | DocProject/Help/*.hhk 130 | DocProject/Help/*.hhp 131 | DocProject/Help/Html2 132 | DocProject/Help/html 133 | 134 | # Click-Once directory 135 | publish/ 136 | 137 | # Publish Web Output 138 | *.[Pp]ublish.xml 139 | *.azurePubxml 140 | # TODO: Comment the next line if you want to checkin your web deploy settings 141 | # but database connection strings (with potential passwords) will be unencrypted 142 | *.pubxml 143 | *.publishproj 144 | 145 | # NuGet Packages 146 | *.nupkg 147 | # The packages folder can be ignored because of Package Restore 148 | **/packages/* 149 | # except build/, which is used as an MSBuild target. 150 | !**/packages/build/ 151 | # Uncomment if necessary however generally it will be regenerated when needed 152 | #!**/packages/repositories.config 153 | # NuGet v3's project.json files produces more ignoreable files 154 | *.nuget.props 155 | *.nuget.targets 156 | 157 | # Microsoft Azure Build Output 158 | csx/ 159 | *.build.csdef 160 | 161 | # Microsoft Azure Emulator 162 | ecf/ 163 | rcf/ 164 | 165 | # Microsoft Azure ApplicationInsights config file 166 | ApplicationInsights.config 167 | 168 | # Windows Store app package directory 169 | AppPackages/ 170 | BundleArtifacts/ 171 | 172 | # Visual Studio cache files 173 | # files ending in .cache can be ignored 174 | *.[Cc]ache 175 | # but keep track of directories ending in .cache 176 | !*.[Cc]ache/ 177 | 178 | # Others 179 | ClientBin/ 180 | ~$* 181 | *~ 182 | *.dbmdl 183 | *.dbproj.schemaview 184 | *.pfx 185 | *.publishsettings 186 | node_modules/ 187 | orleans.codegen.cs 188 | 189 | # RIA/Silverlight projects 190 | Generated_Code/ 191 | 192 | # Backup & report files from converting an old project file 193 | # to a newer Visual Studio version. Backup files are not needed, 194 | # because we have git ;-) 195 | _UpgradeReport_Files/ 196 | Backup*/ 197 | UpgradeLog*.XML 198 | UpgradeLog*.htm 199 | 200 | # SQL Server files 201 | *.mdf 202 | *.ldf 203 | 204 | # Business Intelligence projects 205 | *.rdl.data 206 | *.bim.layout 207 | *.bim_*.settings 208 | 209 | # Microsoft Fakes 210 | FakesAssemblies/ 211 | 212 | # GhostDoc plugin setting file 213 | *.GhostDoc.xml 214 | 215 | # Node.js Tools for Visual Studio 216 | .ntvs_analysis.dat 217 | 218 | # Visual Studio 6 build log 219 | *.plg 220 | 221 | # Visual Studio 6 workspace options file 222 | *.opt 223 | 224 | # Visual Studio LightSwitch build output 225 | **/*.HTMLClient/GeneratedArtifacts 226 | **/*.DesktopClient/GeneratedArtifacts 227 | **/*.DesktopClient/ModelManifest.xml 228 | **/*.Server/GeneratedArtifacts 229 | **/*.Server/ModelManifest.xml 230 | _Pvt_Extensions 231 | 232 | # Paket dependency manager 233 | .paket/paket.exe 234 | 235 | # FAKE - F# Make 236 | .fake/ 237 | *.orig 238 | 239 | # macOS 240 | .DS_Store 241 | 242 | # JetBrains Rider C# IDE 243 | .idea* 244 | 245 | # Serverless directories 246 | .serverless 247 | 248 | # Visual Studio Code 249 | .vscode 250 | 251 | --------------------------------------------------------------------------------