├── src ├── Layout │ └── MainLayout.razor ├── wwwroot │ ├── app.css │ ├── icon-192.png │ └── index.html ├── _Imports.razor ├── tailwind.config.js ├── Program.cs ├── Properties │ └── launchSettings.json ├── App.razor ├── BlazorAndTailwind.csproj └── Pages │ └── Home.razor ├── media └── README │ ├── img-1.png │ ├── img-2.png │ ├── img-3.png │ └── img.png ├── Articles └── DropdownMenu │ ├── media │ ├── simple.gif │ ├── extended.gif │ └── component_customization.png │ └── README.md ├── _Imports.razor ├── App.razor ├── .github └── workflows │ └── publish-to-gh-pages.yml ├── .gitattributes ├── README.md └── .gitignore /src/Layout/MainLayout.razor: -------------------------------------------------------------------------------- 1 | @inherits LayoutComponentBase 2 | 3 | @Body 4 | -------------------------------------------------------------------------------- /src/wwwroot/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /media/README/img-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/media/README/img-1.png -------------------------------------------------------------------------------- /media/README/img-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/media/README/img-2.png -------------------------------------------------------------------------------- /media/README/img-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/media/README/img-3.png -------------------------------------------------------------------------------- /media/README/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/media/README/img.png -------------------------------------------------------------------------------- /src/wwwroot/icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/src/wwwroot/icon-192.png -------------------------------------------------------------------------------- /Articles/DropdownMenu/media/simple.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/Articles/DropdownMenu/media/simple.gif -------------------------------------------------------------------------------- /Articles/DropdownMenu/media/extended.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/Articles/DropdownMenu/media/extended.gif -------------------------------------------------------------------------------- /Articles/DropdownMenu/media/component_customization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesar-tech/BlazorAndTailwind/HEAD/Articles/DropdownMenu/media/component_customization.png -------------------------------------------------------------------------------- /_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.Web.Virtualization 7 | @using Microsoft.AspNetCore.Components.WebAssembly.Http 8 | @using Microsoft.JSInterop 9 | @using BlazorAndTailwind 10 | @using BlazorAndTailwind.Layout 11 | -------------------------------------------------------------------------------- /src/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.Web.Virtualization 7 | @using Microsoft.AspNetCore.Components.WebAssembly.Http 8 | @using Microsoft.JSInterop 9 | @using BlazorAndTailwind 10 | @using BlazorAndTailwind.Layout 11 | -------------------------------------------------------------------------------- /src/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const colors = require('tailwindcss/colors'); 2 | 3 | module.exports = { 4 | content: 5 | [ 6 | './**/*.razor', 7 | './wwwroot/index.html', 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | primary: colors.emerald 13 | }, 14 | }, 15 | }, 16 | plugins: [require('@tailwindcss/typography')], 17 | } 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/Program.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Components.Web; 2 | using Microsoft.AspNetCore.Components.WebAssembly.Hosting; 3 | using BlazorAndTailwind; 4 | 5 | var builder = WebAssemblyHostBuilder.CreateDefault(args); 6 | builder.RootComponents.Add("#app"); 7 | builder.RootComponents.Add("head::after"); 8 | 9 | builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); 10 | 11 | await builder.Build().RunAsync(); 12 | -------------------------------------------------------------------------------- /src/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "https": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "launchBrowser": true, 7 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", 8 | "applicationUrl": "https://localhost:7238;", 9 | "environmentVariables": { 10 | "ASPNETCORE_ENVIRONMENT": "Development" 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /App.razor: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Not found 8 | 9 |

Sorry, there's nothing at this address.

10 |
11 |
12 |
13 | -------------------------------------------------------------------------------- /src/App.razor: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Not found 8 | 9 |

Sorry, there's nothing at this address.

10 |
11 |
12 |
13 | -------------------------------------------------------------------------------- /src/BlazorAndTailwind.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | enable 6 | enable 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/Pages/Home.razor: -------------------------------------------------------------------------------- 1 | @page "/" 2 | 3 | Blazor and Tailwind 4 | 5 | 6 |
7 |
8 | Welcome to this demonstration site showcasing the powerful combination of Blazor and Tailwind CSS. 9 | This project is designed to illustrate how seamlessly Blazor can be integrated with Tailwind CSS, offering a modern and efficient approach to web development. 10 |
11 |
12 | Check the GitHub repo for more information.
13 |
14 | -------------------------------------------------------------------------------- /src/wwwroot/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | BlazorAndTailwind 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 |
18 |
19 |
20 |
21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /.github/workflows/publish-to-gh-pages.yml: -------------------------------------------------------------------------------- 1 | name: Build and deploy Blazor WASM app to github pages 2 | 3 | on: 4 | push: 5 | branches: '*' 6 | 7 | env: 8 | PUBLISH_DIR: output 9 | WEBAPP_PATH: ./src/ 10 | WEBAPP_CSPROJ: BlazorAndTailwind.csproj 11 | 12 | jobs: 13 | deploy-to-github-pages: 14 | runs-on: ubuntu-latest 15 | permissions: 16 | contents: write 17 | steps: 18 | - uses: actions/checkout@v3 19 | 20 | - name: Tailwind - download and run cli 21 | run: | 22 | wget https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64 -O /usr/local/bin/tailwindcss 23 | chmod +x /usr/local/bin/tailwindcss 24 | cd ${{ env.WEBAPP_PATH }} 25 | tailwindcss --input ./wwwroot/app.css --output ./wwwroot/app.min.css --minify 26 | 27 | - name: Change in App.razor to match gh repo name 28 | run: | 29 | REPO_NAME=$(echo "${{ github.repository }}" | awk -F '/' '{print $NF}') 30 | sed -i 's///g' ${{ env.WEBAPP_PATH }}wwwroot/index.html 31 | 32 | - name: Publish .NET app 33 | run: dotnet publish ${{ env.WEBAPP_PATH }}${{env.WEBAPP_CSPROJ}} --configuration Release -o ${{ env.WEBAPP_PATH }}${{env.PUBLISH_DIR}} 34 | 35 | - name: copy index.html to 404.html AND add .nojekyll file (https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/) 36 | run: | 37 | cp ${{ env.WEBAPP_PATH }}${{env.PUBLISH_DIR}}/wwwroot/index.html ${{ env.WEBAPP_PATH }}${{env.PUBLISH_DIR}}/wwwroot/404.html 38 | touch ${{ env.WEBAPP_PATH }}${{env.PUBLISH_DIR}}/wwwroot/.nojekyll 39 | 40 | 41 | - name: Deploy to GitHub Pages 42 | uses: JamesIves/github-pages-deploy-action@v4 43 | with: 44 | folder: ${{ env.WEBAPP_PATH }}${{env.PUBLISH_DIR}}/wwwroot -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /Articles/DropdownMenu/README.md: -------------------------------------------------------------------------------- 1 | # Dropdown Menu without any external library 2 | 3 | [Working demo](https://tesar-tech.github.io/BlazorAndTailwind/dropdownmenu) 4 | 5 | ## Pure CSS (Tailwind) dropdown 6 | 7 | ![simple.gif](media/simple.gif) 8 | 9 | Decent solution for simple dropdown exists. The magic is in `focus-within` css pseudo selector, which can be easily used with tailwind: 10 | 11 | ```html 12 |
13 | 14 | 15 | 20 |
21 | ``` 22 | 23 | [Live demo on play.tailwindcss.com](https://play.tailwindcss.com/xSihfwdQuZ) 24 | 25 | ([Extended version with tooltip triangle](https://play.tailwindcss.com/KO8cXX7sBN)) 26 | 27 | ### How does that work? 28 | 29 | - The container has class `group`. Using this, we can affect other elements inside that div. 30 | - Second line of classes of the menu has `invisible group-focus-within:visible group-active:visible` 31 | - it is invisible unless the focus is within element where the class `group` is set. 32 | - `group-active:visible` is necessary for items to be actually clickable (??) 33 | - Position is set to relative for outer div. For inner one (the menu) is set to absolute, so menu will always appear under the button. 34 | - When you click the button, outer div got focused, thus menu gains visibility. 35 | - When you click somewhere else, focus is lost and menu will disappear. 36 | 37 | ### What's the problem here? 38 | 39 | - The only issue I have with this simple approach is clicking the button for the second time. 40 | - I would like the menu to be closed when opened and clicked. 41 | - This is the reason why some C# code is necessary. 42 | 43 | ## Blazor and simple dropdown 44 | 45 | - To ensure the menu is closed, when clicking the button for the second time, we have to add some C# code 46 | - I came up with this: 47 | 48 | ```razor 49 |
51 | 54 | 55 | 60 |
61 | 62 | @code 63 | { 64 | private bool isVisible; 65 | private bool alreadyClicked; 66 | } 67 | ``` 68 | 69 | ![extended](media/extended.gif) 70 | 71 | - Two boolean fields: `isVisible` and `alreadyClicked`. 72 | - `@onclick` button event: 73 | - When clicked for the **first** time, visibility is set to true, same as the `alreadyClicked` flag. 74 | - When clicked for the **second** time, visibility is set to false and the `alreadyClicked` flag is reset. 75 | - `isVisible` is used as second condition for the `group-focus-within:visible group-active:visible` classes. 76 | - When outer container loses focus, `alreadyClicked` is set to false to ensure setting visibility to true when clicking next time on the button. 77 | 78 | ## DropdownMenu Component 79 | 80 | - We can easily abstract all the parts into the component. The simplest usage will look like this: 81 | 82 | ```razor 83 | 84 |
Do amazing stuff
85 |
Go back
86 |
87 | ``` 88 | 89 | - `RenderFragments` for items and for button content were added. This is full source code of the component: 90 | 91 | ```razor 92 |
94 | 104 | 105 | 112 |
113 | 114 | @code 115 | { 116 | private bool isVisible; 117 | private bool alreadyClicked; 118 | [Parameter] public RenderFragment? ButtonContent { get; set; } 119 | [Parameter,EditorRequired] public RenderFragment? ChildContent { get; set; } 120 | [Parameter] public string CssButton { get; set; } = "border-neutral-600 border px-1 rounded-md"; 121 | [Parameter] public string CssItemsCointainer { get; set; } = "left-0 top-10 flex min-w-max flex-col rounded-md border border-neutral-500 bg-neutral-100 px-2 py-1"; 122 | } 123 | ``` 124 | 125 | - With that, we can customize button content, its css and css of the container. For example: 126 | 127 | ![component customization](media/component_customization.png) 128 | 129 | ```razor 130 | 132 | 133 | Click me, to reveal more options 🔨 134 | 135 | 136 | 137 |
Do amazing stuff
138 |
Go back
139 |
140 |
141 | ``` 142 | 143 | ## Alternatives/Research 144 | 145 | - [Tailwind-elements dropdown](https://tailwind-elements.com/docs/standard/components/dropdown/) 146 | - js script is necessary to have functional dropdown 147 | - uses own css classes (tailwind-elements plugin) 148 | - A lot of other Tailwind component libraries... [Flowbite](https://flowbite.com/docs/components/dropdowns/#), [TailwindUI](https://tailwindui.com/components/application-ui/elements/dropdowns),.. 149 | - All require some sort of js library. 150 | - [Dropdown menu without js](https://stackoverflow.com/questions/10468554/dropdown-menu-without-javascript) (SO question) 151 | - Old, but may be inspirational 152 | - Works with `onhover`, also with touch, but the issue with not closing the menu when button is pressed (touched) the second time is present. 153 | - [BlazorContextMenu](https://github.com/stavroskasidis/BlazorContextMenu) 154 | - This may be the way to go! 155 | - Supports complex scenarios. For example, sub-items. 156 | - Another dependency in your project. 157 | - Necessary to import js a css file. 158 | - Css is customizable. 159 | - [Using customized checkbox](https://css-tricks.com/the-checkbox-hack/) 160 | - This also may be viable solution 161 | - I didn't test it, it feels much hackier than current solution. 162 | 163 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Blazor and Tailwind CSS 2 | 3 | [Blazor](https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor), a powerful framework for building interactive client-side web UI with .NET, and [Tailwind CSS](https://tailwindcss.com/), a highly customizable, low-level CSS framework, come together to provide a streamlined development experience. 4 | 5 | This guide is designed for developers who are interested in exploring the synergy between Blazor and Tailwind CSS. It provides insights and practical steps to integrate these technologies effectively, enhancing both the aesthetics and functionality of your web applications. 6 | 7 | ## Quick setup 8 | 9 | - For a quick and easy way to experiment with Tailwind CSS in your Blazor project, simply incorporate Tailwind's [Play CDN](https://tailwindcss.com/docs/installation/play-cdn) link into your `index.html` (or `App.razor`) file. This approach offers a straightforward method to start using Tailwind without the need for extensive setup. Your integration would look something like this: 10 | ```html 11 | 12 | ``` 13 | - Then just add the Tailwind classes to your HTML elements. For example: 14 | ```html 15 |
16 | This is a Tailwind styled div. 17 |
18 | ``` 19 | - This approach is not suitable for production use. For a more robust solution, see the next section. 20 | 21 | 22 | - You can use [tailwind cli](https://tailwindcss.com/docs/installation). It enables you to run tailwind without npm. 23 | - On Windows you can obtain it by `winget install -e --id TailwindLabs.TailwindCSS` 24 | ![tailwind cli install](media/README/img-1.png) 25 | - Add the following to your [app.css](./src/wwwroot/app.css) file. 26 | ```css 27 | @tailwind base; 28 | @tailwind components; 29 | @tailwind utilities; 30 | ``` 31 | - Add a [`tailwind.config.js`](./src/tailwind.config.js) file to your project root. You can run `tailwindcss init` command in your terminal to create it. 32 | ![tailwind init](media/README/img-2.png) 33 | - Add razor files to the `content` array in `tailwind.config.js`: 34 | ```js 35 | module.exports = { 36 | content: 37 | [ 38 | './**/*.razor',//it will scan all razor files in the project and will find all the tailwind classes that you use 39 | './wwwroot/index.html' //not necessary if you use Blazor 8 Web App (not just standalone wasm app) 40 | ], 41 | } 42 | ``` 43 | - Run the `tailwindcss -i .\wwwroot\app.css -o .\wwwroot\app.min.css -w` where the `tailwind.config.js` resides. 44 | - (Note that `app.css` is directly in the `wwwroot` folder) 45 | - This will generate `app.min.css` file in the `wwwroot` folder. `app.min.css` will contain all the classes that you use in your razor files. 46 | ![tailwind css](media/README/img-3.png) 47 | - Change the path in [`index.html`](./src/wwwroot/index.html) (or `App.razor` if you don't use standalone wasm app) to use `app.min.css` instead of `app.css`. It will look like this: 48 | ```html 49 | 50 | ``` 51 | - `app.css` is just for tailwind, `app.min.css` is for your app. 52 | - Don't include `app.min.css` in git, but rather use build action. Check [the pipeline](./.github/workflows/publish-to-gh-pages.yml) to see how to download and use tailwind cli in the pipeline. 53 | 54 | ## Related repositories 55 | 56 | - [dotnet-tailwind](https://github.com/codymullins/dotnet-tailwind). Basic tool to bootstrap Tailwind in .NET Blazor projects. 57 | - [Blazorise](https://github.com/Megabit/Blazorise). Blazorise is a component library built on top of Blazor with support fresh support for Tailwind CSS. It uses [Flowbite](https://flowbite.com/docs/getting-started/introduction/) components. 58 | - [BlazorStatic](https://github.com/tesar-tech/BlazorStatic/) is a static site generator for Blazor. It uses Tailwind as the default CSS framework. 59 | - [DragAndDropList](https://github.com/tesar-tech/DragAndDropList). Minimal implementation of drag & drop list in Blazor WebAssembly using Tailwind CSS. 60 | - ❓Your repository here? Create an issue or PR! 61 | 62 | 63 | ## Notes and tips 64 | 65 | - ❓(Let me know yours!) 66 | - Tailwind Blazor loader (see [index.html](./src/wwwroot/index.html)): 67 | 68 | ![loader](media/README/img.png) 69 | 70 | - [Tailwind playground]( https://play.tailwindcss.com/) is a great place to create prototypes. It is fast (you see changes instantly), vscode based and allows you to save your work. 71 | - tailwind build process is rather quick, but sometimes leaves a mess inside the CSS file. For example, it will keep all the classes that were previously used (but are not used anymore) 72 | - You can delete the `app.min.css` file at any time (it will generate it again). 73 | - You should use minified version in production: `./tw -i input.css -o output.css --minify` 74 | - Tailwind and bootstrap have some clashing CSS classes (px-2 for example). If you need to keep both (I have to, because I am using a component library, which is based on bootstrap) you can use [prefix](https://tailwindcss.com/docs/configuration#prefix) for tailwind classes. 75 | - There is currently no tailwind package in the chocolatey package manager. You can vote for it [here](https://github.com/tailwindlabs/tailwindcss/discussions/6650). 76 | - There is [this](https://github.com/tailwindlabs/tailwindcss-intellisense) a good extension for vscode, which brings pleasant experience from tailwind playground to your desktop. Just open root folder of your project (where the `tailwind.config.js` is). 77 | - (not an issue anymore) ~~I had a bad experience with dotnet hot reload when CSS files are regenerated. It does weird things, like not updating (even after Ctrl+R), serving older versions, etc.. You can turn off hot reloading with: `dotnet watch --project . --no-hot-reload`. I am in the progress of finding a better solution. Anybody knows it already?~~ 78 | - If you want to build your CSS file every time you reload your project you can add the following into your `.csproj` file. You do have to change the command to set the input and output directories and the executable name and it should work. However it doesn't trigger on hot reloads so you have to reload manually. 79 | 80 | ```xml 81 | 82 | 83 | 84 | 85 | 86 | 87 | ``` 88 | - If you're developing on machines with different OSs, you can add the build script down below into your `.csproj` file, and have different scripts run based on your operating system. Make sure you modify the paths to actually work. I recommend trying them out in your terminal first. Also make sure you download both the Linux and Windows executable if you're jumping between systems. 89 | 90 | ```xml 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | ``` 105 | 106 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | .idea/ 16 | encodings.xml 17 | src/wwwroot/app.min.css 18 | 19 | # Mono auto generated files 20 | mono_crash.* 21 | 22 | # Build results 23 | [Dd]ebug/ 24 | [Dd]ebugPublic/ 25 | [Rr]elease/ 26 | [Rr]eleases/ 27 | x64/ 28 | x86/ 29 | [Ww][Ii][Nn]32/ 30 | [Aa][Rr][Mm]/ 31 | [Aa][Rr][Mm]64/ 32 | bld/ 33 | [Bb]in/ 34 | [Oo]bj/ 35 | [Oo]ut/ 36 | [Ll]og/ 37 | [Ll]ogs/ 38 | 39 | # Visual Studio 2015/2017 cache/options directory 40 | .vs/ 41 | # Uncomment if you have tasks that create the project's static files in wwwroot 42 | #wwwroot/ 43 | 44 | # Visual Studio 2017 auto generated files 45 | Generated\ Files/ 46 | 47 | # MSTest test Results 48 | [Tt]est[Rr]esult*/ 49 | [Bb]uild[Ll]og.* 50 | 51 | # NUnit 52 | *.VisualState.xml 53 | TestResult.xml 54 | nunit-*.xml 55 | 56 | # Build Results of an ATL Project 57 | [Dd]ebugPS/ 58 | [Rr]eleasePS/ 59 | dlldata.c 60 | 61 | # Benchmark Results 62 | BenchmarkDotNet.Artifacts/ 63 | 64 | # .NET Core 65 | project.lock.json 66 | project.fragment.lock.json 67 | artifacts/ 68 | 69 | # ASP.NET Scaffolding 70 | ScaffoldingReadMe.txt 71 | 72 | # StyleCop 73 | StyleCopReport.xml 74 | 75 | # Files built by Visual Studio 76 | *_i.c 77 | *_p.c 78 | *_h.h 79 | *.ilk 80 | *.meta 81 | *.obj 82 | *.iobj 83 | *.pch 84 | *.pdb 85 | *.ipdb 86 | *.pgc 87 | *.pgd 88 | *.rsp 89 | *.sbr 90 | *.tlb 91 | *.tli 92 | *.tlh 93 | *.tmp 94 | *.tmp_proj 95 | *_wpftmp.csproj 96 | *.log 97 | *.vspscc 98 | *.vssscc 99 | .builds 100 | *.pidb 101 | *.svclog 102 | *.scc 103 | 104 | # Chutzpah Test files 105 | _Chutzpah* 106 | 107 | # Visual C++ cache files 108 | ipch/ 109 | *.aps 110 | *.ncb 111 | *.opendb 112 | *.opensdf 113 | *.sdf 114 | *.cachefile 115 | *.VC.db 116 | *.VC.VC.opendb 117 | 118 | # Visual Studio profiler 119 | *.psess 120 | *.vsp 121 | *.vspx 122 | *.sap 123 | 124 | # Visual Studio Trace Files 125 | *.e2e 126 | 127 | # TFS 2012 Local Workspace 128 | $tf/ 129 | 130 | # Guidance Automation Toolkit 131 | *.gpState 132 | 133 | # ReSharper is a .NET coding add-in 134 | _ReSharper*/ 135 | *.[Rr]e[Ss]harper 136 | *.DotSettings.user 137 | 138 | # TeamCity is a build add-in 139 | _TeamCity* 140 | 141 | # DotCover is a Code Coverage Tool 142 | *.dotCover 143 | 144 | # AxoCover is a Code Coverage Tool 145 | .axoCover/* 146 | !.axoCover/settings.json 147 | 148 | # Coverlet is a free, cross platform Code Coverage Tool 149 | coverage*.json 150 | coverage*.xml 151 | coverage*.info 152 | 153 | # Visual Studio code coverage results 154 | *.coverage 155 | *.coveragexml 156 | 157 | # NCrunch 158 | _NCrunch_* 159 | .*crunch*.local.xml 160 | nCrunchTemp_* 161 | 162 | # MightyMoose 163 | *.mm.* 164 | AutoTest.Net/ 165 | 166 | # Web workbench (sass) 167 | .sass-cache/ 168 | 169 | # Installshield output folder 170 | [Ee]xpress/ 171 | 172 | # DocProject is a documentation generator add-in 173 | DocProject/buildhelp/ 174 | DocProject/Help/*.HxT 175 | DocProject/Help/*.HxC 176 | DocProject/Help/*.hhc 177 | DocProject/Help/*.hhk 178 | DocProject/Help/*.hhp 179 | DocProject/Help/Html2 180 | DocProject/Help/html 181 | 182 | # Click-Once directory 183 | publish/ 184 | 185 | # Publish Web Output 186 | *.[Pp]ublish.xml 187 | *.azurePubxml 188 | # Note: Comment the next line if you want to checkin your web deploy settings, 189 | # but database connection strings (with potential passwords) will be unencrypted 190 | *.pubxml 191 | *.publishproj 192 | 193 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 194 | # checkin your Azure Web App publish settings, but sensitive information contained 195 | # in these scripts will be unencrypted 196 | PublishScripts/ 197 | 198 | # NuGet Packages 199 | *.nupkg 200 | # NuGet Symbol Packages 201 | *.snupkg 202 | # The packages folder can be ignored because of Package Restore 203 | **/[Pp]ackages/* 204 | # except build/, which is used as an MSBuild target. 205 | !**/[Pp]ackages/build/ 206 | # Uncomment if necessary however generally it will be regenerated when needed 207 | #!**/[Pp]ackages/repositories.config 208 | # NuGet v3's project.json files produces more ignorable files 209 | *.nuget.props 210 | *.nuget.targets 211 | 212 | # Microsoft Azure Build Output 213 | csx/ 214 | *.build.csdef 215 | 216 | # Microsoft Azure Emulator 217 | ecf/ 218 | rcf/ 219 | 220 | # Windows Store app package directories and files 221 | AppPackages/ 222 | BundleArtifacts/ 223 | Package.StoreAssociation.xml 224 | _pkginfo.txt 225 | *.appx 226 | *.appxbundle 227 | *.appxupload 228 | 229 | # Visual Studio cache files 230 | # files ending in .cache can be ignored 231 | *.[Cc]ache 232 | # but keep track of directories ending in .cache 233 | !?*.[Cc]ache/ 234 | 235 | # Others 236 | ClientBin/ 237 | ~$* 238 | *~ 239 | *.dbmdl 240 | *.dbproj.schemaview 241 | *.jfm 242 | *.pfx 243 | *.publishsettings 244 | orleans.codegen.cs 245 | 246 | # Including strong name files can present a security risk 247 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 248 | #*.snk 249 | 250 | # Since there are multiple workflows, uncomment next line to ignore bower_components 251 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 252 | #bower_components/ 253 | 254 | # RIA/Silverlight projects 255 | Generated_Code/ 256 | 257 | # Backup & report files from converting an old project file 258 | # to a newer Visual Studio version. Backup files are not needed, 259 | # because we have git ;-) 260 | _UpgradeReport_Files/ 261 | Backup*/ 262 | UpgradeLog*.XML 263 | UpgradeLog*.htm 264 | ServiceFabricBackup/ 265 | *.rptproj.bak 266 | 267 | # SQL Server files 268 | *.mdf 269 | *.ldf 270 | *.ndf 271 | 272 | # Business Intelligence projects 273 | *.rdl.data 274 | *.bim.layout 275 | *.bim_*.settings 276 | *.rptproj.rsuser 277 | *- [Bb]ackup.rdl 278 | *- [Bb]ackup ([0-9]).rdl 279 | *- [Bb]ackup ([0-9][0-9]).rdl 280 | 281 | # Microsoft Fakes 282 | FakesAssemblies/ 283 | 284 | # GhostDoc plugin setting file 285 | *.GhostDoc.xml 286 | 287 | # Node.js Tools for Visual Studio 288 | .ntvs_analysis.dat 289 | node_modules/ 290 | 291 | # Visual Studio 6 build log 292 | *.plg 293 | 294 | # Visual Studio 6 workspace options file 295 | *.opt 296 | 297 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 298 | *.vbw 299 | 300 | # Visual Studio LightSwitch build output 301 | **/*.HTMLClient/GeneratedArtifacts 302 | **/*.DesktopClient/GeneratedArtifacts 303 | **/*.DesktopClient/ModelManifest.xml 304 | **/*.Server/GeneratedArtifacts 305 | **/*.Server/ModelManifest.xml 306 | _Pvt_Extensions 307 | 308 | # Paket dependency manager 309 | .paket/paket.exe 310 | paket-files/ 311 | 312 | # FAKE - F# Make 313 | .fake/ 314 | 315 | # CodeRush personal settings 316 | .cr/personal 317 | 318 | # Python Tools for Visual Studio (PTVS) 319 | __pycache__/ 320 | *.pyc 321 | 322 | # Cake - Uncomment if you are using it 323 | # tools/** 324 | # !tools/packages.config 325 | 326 | # Tabs Studio 327 | *.tss 328 | 329 | # Telerik's JustMock configuration file 330 | *.jmconfig 331 | 332 | # BizTalk build output 333 | *.btp.cs 334 | *.btm.cs 335 | *.odx.cs 336 | *.xsd.cs 337 | 338 | # OpenCover UI analysis results 339 | OpenCover/ 340 | 341 | # Azure Stream Analytics local run output 342 | ASALocalRun/ 343 | 344 | # MSBuild Binary and Structured Log 345 | *.binlog 346 | 347 | # NVidia Nsight GPU debugger configuration file 348 | *.nvuser 349 | 350 | # MFractors (Xamarin productivity tool) working folder 351 | .mfractor/ 352 | 353 | # Local History for Visual Studio 354 | .localhistory/ 355 | 356 | # BeatPulse healthcheck temp database 357 | healthchecksdb 358 | 359 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 360 | MigrationBackup/ 361 | 362 | # Ionide (cross platform F# VS Code tools) working folder 363 | .ionide/ 364 | 365 | # Fody - auto-generated XML schema 366 | FodyWeavers.xsd --------------------------------------------------------------------------------