├── tutorials ├── AdcTutorial │ ├── AdcTutorial.csproj │ └── Program.cs ├── LcdTutorial │ ├── LcdTutorial.csproj │ └── Program.cs ├── BlinkTutorial │ ├── BlinkTutorial.csproj │ └── Program.cs ├── SensorTutorial │ ├── SensorTutorial.csproj │ └── Program.cs ├── InputTutorial │ ├── InputTutorial.csproj │ └── Program.cs └── ft232h │ ├── ft232h.gpio │ ├── ft232h.gpio.csproj │ └── Program.cs │ ├── ft232h.i2c │ ├── ft232h.i2c.csproj │ └── Program.cs │ ├── ft232h.list │ ├── ft232h.list.csproj │ └── Program.cs │ └── ft232h.spi │ ├── ft232h.spi.csproj │ └── Program.cs ├── quickstarts └── SenseHat.Quickstart │ ├── SenseHat.Quickstart.csproj │ └── Program.cs ├── README.md ├── LICENSE ├── setup └── sensehat-quickstart.sh └── .gitignore /tutorials/AdcTutorial/AdcTutorial.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tutorials/LcdTutorial/LcdTutorial.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tutorials/BlinkTutorial/BlinkTutorial.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tutorials/SensorTutorial/SensorTutorial.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /quickstarts/SenseHat.Quickstart/SenseHat.Quickstart.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tutorials/InputTutorial/InputTutorial.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | enable 7 | enable 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.gpio/ft232h.gpio.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | enable 7 | enable 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.i2c/ft232h.i2c.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | enable 7 | enable 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.list/ft232h.list.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | enable 7 | enable 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.spi/ft232h.spi.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | enable 7 | enable 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tutorials/BlinkTutorial/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Device.Gpio; 3 | using System.Threading; 4 | 5 | Console.WriteLine("Blinking LED. Press Ctrl+C to end."); 6 | int pin = 18; 7 | using var controller = new GpioController(); 8 | controller.OpenPin(pin, PinMode.Output); 9 | bool ledOn = true; 10 | while (true) 11 | { 12 | controller.Write(pin, ((ledOn) ? PinValue.High : PinValue.Low)); 13 | Thread.Sleep(1000); 14 | ledOn = !ledOn; 15 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | languages: 3 | - csharp 4 | products: 5 | - dotnet 6 | page_type: sample 7 | name: "Sample apps and scripts to accompany .NET IoT Libraries documentation" 8 | urlFragment: "dotnet-iot-assets" 9 | description: "For building apps on IoT devices" 10 | --- 11 | 12 | # .NET Libraries for IoT documentation 13 | 14 | Sample apps and scripts to accompany [.NET IoT Libraries documentation](https://docs.microsoft.com/dotnet/iot). 15 | 16 | Happy IoT Hacking! 🐱‍💻 17 | 18 | .NET 💜 IoT 19 | -------------------------------------------------------------------------------- /tutorials/AdcTutorial/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Device.Spi; 3 | using System.Threading; 4 | using Iot.Device.Adc; 5 | 6 | var hardwareSpiSettings = new SpiConnectionSettings(0, 0); 7 | 8 | using SpiDevice spi = SpiDevice.Create(hardwareSpiSettings); 9 | using var mcp = new Mcp3008(spi); 10 | while (true) 11 | { 12 | Console.Clear(); 13 | double value = mcp.Read(0); 14 | Console.WriteLine($"{value}"); 15 | Console.WriteLine($"{Math.Round(value/10.23, 1)}%"); 16 | Thread.Sleep(500); 17 | } -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.gpio/Program.cs: -------------------------------------------------------------------------------- 1 | using System.Device.Gpio; 2 | using Iot.Device.Ft232H; 3 | using Iot.Device.FtCommon; 4 | 5 | Console.WriteLine("Blinking LED. Press Ctrl+C to end."); 6 | 7 | Ft232HDevice ft232h = new Ft232HDevice(FtCommon.GetDevices()[0]); 8 | GpioController controller = ft232h.CreateGpioController(); 9 | 10 | int pin = Ft232HDevice.GetPinNumberFromString("D7"); 11 | controller.OpenPin(pin, PinMode.Output); 12 | bool ledOn = true; 13 | while (true) 14 | { 15 | controller.Write(pin, ledOn ? PinValue.High : PinValue.Low); 16 | Thread.Sleep(1000); 17 | ledOn = !ledOn; 18 | } -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.list/Program.cs: -------------------------------------------------------------------------------- 1 | using Iot.Device.FtCommon; 2 | 3 | var devices = FtCommon.GetDevices(); 4 | Console.WriteLine($"{devices.Count} available device(s)"); 5 | foreach (var device in devices) 6 | { 7 | Console.WriteLine($" {device.Description}"); 8 | Console.WriteLine($" Flags: {device.Flags}"); 9 | Console.WriteLine($" Id: {device.Id}"); 10 | Console.WriteLine($" LocId: {device.LocId}"); 11 | Console.WriteLine($" Serial number: {device.SerialNumber}"); 12 | Console.WriteLine($" Type: {device.Type}"); 13 | } 14 | 15 | if (devices.Count == 0) 16 | { 17 | Console.WriteLine("No device connected"); 18 | return; 19 | } -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.spi/Program.cs: -------------------------------------------------------------------------------- 1 | using System.Device.Gpio; 2 | using System.Device.Spi; 3 | using Iot.Device.Adc; 4 | using Iot.Device.Ft232H; 5 | using Iot.Device.FtCommon; 6 | 7 | var devices = FtCommon.GetDevices(); 8 | var ft232h = new Ft232HDevice(devices[0]); 9 | var hardwareSpiSettings = new SpiConnectionSettings(0, 3) { ClockFrequency = 1_000_000, DataBitLength = 8, ChipSelectLineActiveState = PinValue.Low }; 10 | using SpiDevice spi = ft232h.CreateSpiDevice(hardwareSpiSettings); 11 | using var mcp = new Mcp3008(spi); 12 | while (true) 13 | { 14 | Console.Clear(); 15 | double value = mcp.Read(0); 16 | Console.WriteLine($"{value}"); 17 | Console.WriteLine($"{Math.Round(value/10.23, 1)}%"); 18 | Thread.Sleep(500); 19 | } -------------------------------------------------------------------------------- /tutorials/InputTutorial/Program.cs: -------------------------------------------------------------------------------- 1 | using System.Device.Gpio; 2 | using System.Threading.Tasks; 3 | 4 | const int Pin = 21; 5 | const string Alert = "ALERT 🚨"; 6 | const string Ready = "READY ✅"; 7 | 8 | using var controller = new GpioController(); 9 | controller.OpenPin(Pin, PinMode.InputPullUp); 10 | 11 | Console.WriteLine( 12 | $"Initial status ({DateTime.Now}): {(controller.Read(Pin) == PinValue.High ? Alert : Ready)}"); 13 | 14 | controller.RegisterCallbackForPinValueChangedEvent( 15 | Pin, 16 | PinEventTypes.Falling | PinEventTypes.Rising, 17 | OnPinEvent); 18 | 19 | await Task.Delay(Timeout.Infinite); 20 | 21 | static void OnPinEvent(object sender, PinValueChangedEventArgs args) 22 | { 23 | Console.WriteLine( 24 | $"({DateTime.Now}) {(args.ChangeType is PinEventTypes.Rising ? Alert : Ready)}"); 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/LcdTutorial/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Device.Gpio; 3 | using System.Device.I2c; 4 | using System.Threading; 5 | using Iot.Device.CharacterLcd; 6 | using Iot.Device.Pcx857x; 7 | 8 | Console.WriteLine("Displaying current time. Press Ctrl+C to end."); 9 | 10 | using I2cDevice i2c = I2cDevice.Create(new I2cConnectionSettings(1, 0x27)); 11 | using var driver = new Pcf8574(i2c); 12 | using var lcd = new Lcd2004(registerSelectPin: 0, 13 | enablePin: 2, 14 | dataPins: new int[] { 4, 5, 6, 7 }, 15 | backlightPin: 3, 16 | backlightBrightness: 0.1f, 17 | readWritePin: 1, 18 | controller: new GpioController(PinNumberingScheme.Logical, driver)); 19 | int currentLine = 0; 20 | 21 | while (true) 22 | { 23 | lcd.Clear(); 24 | lcd.SetCursorPosition(0,currentLine); 25 | lcd.Write(DateTime.Now.ToShortTimeString()); 26 | currentLine = (currentLine == 3) ? 0 : currentLine + 1; 27 | Thread.Sleep(1000); 28 | } -------------------------------------------------------------------------------- /tutorials/SensorTutorial/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Device.I2c; 3 | using System.Threading; 4 | using Iot.Device.Bmxx80; 5 | using Iot.Device.Bmxx80.PowerMode; 6 | 7 | var i2cSettings = new I2cConnectionSettings(1, Bme280.DefaultI2cAddress); 8 | using I2cDevice i2cDevice = I2cDevice.Create(i2cSettings); 9 | using var bme280 = new Bme280(i2cDevice); 10 | 11 | int measurementTime = bme280.GetMeasurementDuration(); 12 | 13 | while (true) 14 | { 15 | Console.Clear(); 16 | 17 | bme280.SetPowerMode(Bmx280PowerMode.Forced); 18 | Thread.Sleep(measurementTime); 19 | 20 | bme280.TryReadTemperature(out var tempValue); 21 | bme280.TryReadPressure(out var preValue); 22 | bme280.TryReadHumidity(out var humValue); 23 | bme280.TryReadAltitude(out var altValue); 24 | 25 | Console.WriteLine($"Temperature: {tempValue.DegreesCelsius:0.#}\u00B0C"); 26 | Console.WriteLine($"Pressure: {preValue.Hectopascals:#.##} hPa"); 27 | Console.WriteLine($"Relative humidity: {humValue.Percent:#.##}%"); 28 | Console.WriteLine($"Estimated altitude: {altValue.Meters:#} m"); 29 | 30 | Thread.Sleep(1000); 31 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) Microsoft Corporation 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 5 | associated documentation files (the "Software"), to deal in the Software without restriction, 6 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all copies or substantial 11 | portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 14 | NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 15 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 16 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 17 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /tutorials/ft232h/ft232h.i2c/Program.cs: -------------------------------------------------------------------------------- 1 | using System.Device.I2c; 2 | using Iot.Device.Bmxx80; 3 | using Iot.Device.Bmxx80.PowerMode; 4 | using Iot.Device.Ft232H; 5 | using Iot.Device.FtCommon; 6 | 7 | Ft232HDevice ft232h = new Ft232HDevice(FtCommon.GetDevices()[0]); 8 | I2cConnectionSettings i2cSettings = new I2cConnectionSettings(0, Bme280.SecondaryI2cAddress); 9 | 10 | using I2cDevice i2cDevice = ft232h.CreateI2cDevice(i2cSettings); 11 | using Bme280 bme280 = new Bme280(i2cDevice); 12 | 13 | int measurementTime = bme280.GetMeasurementDuration(); 14 | 15 | while (true) 16 | { 17 | Console.Clear(); 18 | 19 | bme280.SetPowerMode(Bmx280PowerMode.Forced); 20 | Thread.Sleep(measurementTime); 21 | 22 | bme280.TryReadTemperature(out var tempValue); 23 | bme280.TryReadPressure(out var preValue); 24 | bme280.TryReadHumidity(out var humValue); 25 | bme280.TryReadAltitude(out var altValue); 26 | 27 | Console.WriteLine($"Temperature: {tempValue.DegreesCelsius:0.#}\u00B0C"); 28 | Console.WriteLine($"Pressure: {preValue.Hectopascals:#.##} hPa"); 29 | Console.WriteLine($"Relative humidity: {humValue.Percent:#.##}%"); 30 | Console.WriteLine($"Estimated altitude: {altValue.Meters:#} m"); 31 | 32 | Thread.Sleep(1000); 33 | } -------------------------------------------------------------------------------- /setup/sensehat-quickstart.sh: -------------------------------------------------------------------------------- 1 | # Script parameters 2 | declare dotnetVersion="8.0.303" 3 | declare iotBits="https://github.com/MicrosoftDocs/dotnet-iot-assets" 4 | 5 | # Text formatting 6 | declare red=`tput setaf 1` 7 | declare green=`tput setaf 2` 8 | declare yellow=`tput setaf 3` 9 | declare blue=`tput setaf 4` 10 | declare magenta=`tput setaf 5` 11 | declare cyan=`tput setaf 6` 12 | declare white=`tput setaf 7` 13 | declare defaultColor=`tput setaf 9` 14 | declare bold=`tput bold` 15 | declare plain=`tput sgr0` 16 | declare newline=$'\n' 17 | 18 | # Element styling 19 | declare azCliCommandStyle="${plain}${cyan}" 20 | declare defaultTextStyle="${plain}${white}" 21 | declare dotnetCliCommandStyle="${plain}${magenta}" 22 | declare dotnetSayStyle="${magenta}${bold}" 23 | declare headingStyle="${white}${bold}" 24 | declare successStyle="${green}${bold}" 25 | declare warningStyle="${yellow}${bold}" 26 | declare errorStyle="${red}${bold}" 27 | 28 | echo 29 | echo 30 | echo "${headingStyle}.NET IoT Libraries Sense HAT quickstart${defaultTextStyle}" 31 | echo 32 | echo Installing .NET SDK v$dotnetVersion... 33 | echo 34 | 35 | # Install .NET 36 | declare installCmd="curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version $dotnetVersion" 37 | echo "> ${yellow}$installCmd${defaultTextStyle}" 38 | echo 39 | eval $installCmd 40 | echo 41 | 42 | # Add .dotnet directory to PATH and DOTNET_ROOT 43 | echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc 44 | echo 'export PATH=$PATH:$HOME/.dotnet' >> ~/.bashrc 45 | source ~/.bashrc 46 | 47 | # Clone the code 48 | declare cloneCmd="git clone $iotBits dotnet-iot" 49 | cd ~ 50 | echo Downloading from $iotBits... 51 | echo 52 | echo "> ${yellow}$cloneCmd${defaultTextStyle}" 53 | echo 54 | eval $cloneCmd 55 | echo 56 | 57 | # Build the code 58 | cd ~/dotnet-iot/quickstarts/SenseHat.Quickstart 59 | declare buildCmd="dotnet build" 60 | echo Building SenseHat.Quickstart... 61 | echo 62 | echo "> ${dotnetCliCommandStyle}$buildCmd${defaultTextStyle}" 63 | echo 64 | eval $buildCmd 65 | echo 66 | 67 | # Run the code 68 | declare runCmd="dotnet run" 69 | echo Running SenseHat.Quickstart... 70 | echo 71 | echo "> ${dotnetCliCommandStyle}$runCmd${defaultTextStyle}" 72 | echo 73 | eval $runCmd 74 | echo 75 | 76 | # Happy IoT hacking! 77 | -------------------------------------------------------------------------------- /quickstarts/SenseHat.Quickstart/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Threading; 4 | using Iot.Device.Common; 5 | using Iot.Device.SenseHat; 6 | using UnitsNet; 7 | 8 | // set this to the current sea level pressure in the area for correct altitude readings 9 | var defaultSeaLevelPressure = WeatherHelper.MeanSeaLevel; 10 | 11 | using SenseHat sh = new SenseHat(); 12 | int n = 0; 13 | int x = 3, y = 3; 14 | 15 | while (true) 16 | { 17 | Console.Clear(); 18 | 19 | (int dx, int dy, bool holding) = JoystickState(sh); 20 | 21 | if (holding) 22 | { 23 | n++; 24 | } 25 | 26 | x = (x + 8 + dx) % 8; 27 | y = (y + 8 + dy) % 8; 28 | 29 | sh.Fill(n % 2 == 0 ? Color.DarkBlue : Color.DarkRed); 30 | sh.SetPixel(x, y, Color.Yellow); 31 | 32 | var tempValue = sh.Temperature; 33 | var temp2Value = sh.Temperature2; 34 | var preValue = sh.Pressure; 35 | var humValue = sh.Humidity; 36 | var accValue = sh.Acceleration; 37 | var angValue = sh.AngularRate; 38 | var magValue = sh.MagneticInduction; 39 | var altValue = WeatherHelper.CalculateAltitude(preValue, defaultSeaLevelPressure, tempValue); 40 | 41 | Console.WriteLine($"Temperature Sensor 1: {tempValue.DegreesCelsius:0.#}\u00B0C"); 42 | Console.WriteLine($"Temperature Sensor 2: {temp2Value.DegreesCelsius:0.#}\u00B0C"); 43 | Console.WriteLine($"Pressure: {preValue.Hectopascals:0.##} hPa"); 44 | Console.WriteLine($"Altitude: {altValue.Meters:0.##} m"); 45 | Console.WriteLine($"Acceleration: {sh.Acceleration} g"); 46 | Console.WriteLine($"Angular rate: {sh.AngularRate} DPS"); 47 | Console.WriteLine($"Magnetic induction: {sh.MagneticInduction} gauss"); 48 | Console.WriteLine($"Relative humidity: {humValue.Percent:0.#}%"); 49 | Console.WriteLine($"Heat index: {WeatherHelper.CalculateHeatIndex(tempValue, humValue).DegreesCelsius:0.#}\u00B0C"); 50 | Console.WriteLine($"Dew point: {WeatherHelper.CalculateDewPoint(tempValue, humValue).DegreesCelsius:0.#}\u00B0C"); 51 | 52 | Thread.Sleep(1000); 53 | } 54 | 55 | (int, int, bool) JoystickState(SenseHat sh) 56 | { 57 | sh.ReadJoystickState(); 58 | 59 | int dx = 0; 60 | int dy = 0; 61 | 62 | if (sh.HoldingUp) 63 | { 64 | dy--; // y goes down 65 | } 66 | 67 | if (sh.HoldingDown) 68 | { 69 | dy++; 70 | } 71 | 72 | if (sh.HoldingLeft) 73 | { 74 | dx--; 75 | } 76 | 77 | if (sh.HoldingRight) 78 | { 79 | dx++; 80 | } 81 | 82 | return (dx, dy, sh.HoldingButton); 83 | } 84 | -------------------------------------------------------------------------------- /.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 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015/2017 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # Visual Studio 2017 auto generated files 33 | Generated\ Files/ 34 | 35 | # MSTest test Results 36 | [Tt]est[Rr]esult*/ 37 | [Bb]uild[Ll]og.* 38 | 39 | # NUNIT 40 | *.VisualState.xml 41 | TestResult.xml 42 | 43 | # Build Results of an ATL Project 44 | [Dd]ebugPS/ 45 | [Rr]eleasePS/ 46 | dlldata.c 47 | 48 | # Benchmark Results 49 | BenchmarkDotNet.Artifacts/ 50 | 51 | # .NET Core 52 | project.lock.json 53 | project.fragment.lock.json 54 | artifacts/ 55 | **/Properties/launchSettings.json 56 | 57 | # StyleCop 58 | StyleCopReport.xml 59 | 60 | # Files built by Visual Studio 61 | *_i.c 62 | *_p.c 63 | *_i.h 64 | *.ilk 65 | *.meta 66 | *.obj 67 | *.iobj 68 | *.pch 69 | *.pdb 70 | *.ipdb 71 | *.pgc 72 | *.pgd 73 | *.rsp 74 | *.sbr 75 | *.tlb 76 | *.tli 77 | *.tlh 78 | *.tmp 79 | *.tmp_proj 80 | *.log 81 | *.vspscc 82 | *.vssscc 83 | .builds 84 | *.pidb 85 | *.svclog 86 | *.scc 87 | 88 | # Chutzpah Test files 89 | _Chutzpah* 90 | 91 | # Visual C++ cache files 92 | ipch/ 93 | *.aps 94 | *.ncb 95 | *.opendb 96 | *.opensdf 97 | *.sdf 98 | *.cachefile 99 | *.VC.db 100 | *.VC.VC.opendb 101 | 102 | # Visual Studio profiler 103 | *.psess 104 | *.vsp 105 | *.vspx 106 | *.sap 107 | 108 | # Visual Studio Trace Files 109 | *.e2e 110 | 111 | # TFS 2012 Local Workspace 112 | $tf/ 113 | 114 | # Guidance Automation Toolkit 115 | *.gpState 116 | 117 | # ReSharper is a .NET coding add-in 118 | _ReSharper*/ 119 | *.[Rr]e[Ss]harper 120 | *.DotSettings.user 121 | 122 | # JustCode is a .NET coding add-in 123 | .JustCode 124 | 125 | # TeamCity is a build add-in 126 | _TeamCity* 127 | 128 | # DotCover is a Code Coverage Tool 129 | *.dotCover 130 | 131 | # AxoCover is a Code Coverage Tool 132 | .axoCover/* 133 | !.axoCover/settings.json 134 | 135 | # Visual Studio code coverage results 136 | *.coverage 137 | *.coveragexml 138 | 139 | # NCrunch 140 | _NCrunch_* 141 | .*crunch*.local.xml 142 | nCrunchTemp_* 143 | 144 | # MightyMoose 145 | *.mm.* 146 | AutoTest.Net/ 147 | 148 | # Web workbench (sass) 149 | .sass-cache/ 150 | 151 | # Installshield output folder 152 | [Ee]xpress/ 153 | 154 | # DocProject is a documentation generator add-in 155 | DocProject/buildhelp/ 156 | DocProject/Help/*.HxT 157 | DocProject/Help/*.HxC 158 | DocProject/Help/*.hhc 159 | DocProject/Help/*.hhk 160 | DocProject/Help/*.hhp 161 | DocProject/Help/Html2 162 | DocProject/Help/html 163 | 164 | # Click-Once directory 165 | publish/ 166 | 167 | # Publish Web Output 168 | *.[Pp]ublish.xml 169 | *.azurePubxml 170 | # Note: Comment the next line if you want to checkin your web deploy settings, 171 | # but database connection strings (with potential passwords) will be unencrypted 172 | *.pubxml 173 | *.publishproj 174 | 175 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 176 | # checkin your Azure Web App publish settings, but sensitive information contained 177 | # in these scripts will be unencrypted 178 | PublishScripts/ 179 | 180 | # NuGet Packages 181 | *.nupkg 182 | # The packages folder can be ignored because of Package Restore 183 | **/[Pp]ackages/* 184 | # except build/, which is used as an MSBuild target. 185 | !**/[Pp]ackages/build/ 186 | # Uncomment if necessary however generally it will be regenerated when needed 187 | #!**/[Pp]ackages/repositories.config 188 | # NuGet v3's project.json files produces more ignorable files 189 | *.nuget.props 190 | *.nuget.targets 191 | 192 | # Microsoft Azure Build Output 193 | csx/ 194 | *.build.csdef 195 | 196 | # Microsoft Azure Emulator 197 | ecf/ 198 | rcf/ 199 | 200 | # Windows Store app package directories and files 201 | AppPackages/ 202 | BundleArtifacts/ 203 | Package.StoreAssociation.xml 204 | _pkginfo.txt 205 | *.appx 206 | 207 | # Visual Studio cache files 208 | # files ending in .cache can be ignored 209 | *.[Cc]ache 210 | # but keep track of directories ending in .cache 211 | !*.[Cc]ache/ 212 | 213 | # Others 214 | ClientBin/ 215 | ~$* 216 | *~ 217 | *.dbmdl 218 | *.dbproj.schemaview 219 | *.jfm 220 | *.pfx 221 | *.publishsettings 222 | orleans.codegen.cs 223 | 224 | # Including strong name files can present a security risk 225 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 226 | #*.snk 227 | 228 | # Since there are multiple workflows, uncomment next line to ignore bower_components 229 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 230 | #bower_components/ 231 | 232 | # RIA/Silverlight projects 233 | Generated_Code/ 234 | 235 | # Backup & report files from converting an old project file 236 | # to a newer Visual Studio version. Backup files are not needed, 237 | # because we have git ;-) 238 | _UpgradeReport_Files/ 239 | Backup*/ 240 | UpgradeLog*.XML 241 | UpgradeLog*.htm 242 | ServiceFabricBackup/ 243 | *.rptproj.bak 244 | 245 | # SQL Server files 246 | *.mdf 247 | *.ldf 248 | *.ndf 249 | 250 | # Business Intelligence projects 251 | *.rdl.data 252 | *.bim.layout 253 | *.bim_*.settings 254 | *.rptproj.rsuser 255 | 256 | # Microsoft Fakes 257 | FakesAssemblies/ 258 | 259 | # GhostDoc plugin setting file 260 | *.GhostDoc.xml 261 | 262 | # Node.js Tools for Visual Studio 263 | .ntvs_analysis.dat 264 | node_modules/ 265 | 266 | # Visual Studio 6 build log 267 | *.plg 268 | 269 | # Visual Studio 6 workspace options file 270 | *.opt 271 | 272 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 273 | *.vbw 274 | 275 | # Visual Studio LightSwitch build output 276 | **/*.HTMLClient/GeneratedArtifacts 277 | **/*.DesktopClient/GeneratedArtifacts 278 | **/*.DesktopClient/ModelManifest.xml 279 | **/*.Server/GeneratedArtifacts 280 | **/*.Server/ModelManifest.xml 281 | _Pvt_Extensions 282 | 283 | # Paket dependency manager 284 | .paket/paket.exe 285 | paket-files/ 286 | 287 | # FAKE - F# Make 288 | .fake/ 289 | 290 | # JetBrains Rider 291 | .idea/ 292 | *.sln.iml 293 | 294 | # CodeRush 295 | .cr/ 296 | 297 | # Python Tools for Visual Studio (PTVS) 298 | __pycache__/ 299 | *.pyc 300 | 301 | # Cake - Uncomment if you are using it 302 | # tools/** 303 | # !tools/packages.config 304 | 305 | # Tabs Studio 306 | *.tss 307 | 308 | # Telerik's JustMock configuration file 309 | *.jmconfig 310 | 311 | # BizTalk build output 312 | *.btp.cs 313 | *.btm.cs 314 | *.odx.cs 315 | *.xsd.cs 316 | 317 | # OpenCover UI analysis results 318 | OpenCover/ 319 | 320 | # Azure Stream Analytics local run output 321 | ASALocalRun/ 322 | 323 | # MSBuild Binary and Structured Log 324 | *.binlog 325 | 326 | # NVidia Nsight GPU debugger configuration file 327 | *.nvuser 328 | 329 | # MFractors (Xamarin productivity tool) working folder 330 | .mfractor/ --------------------------------------------------------------------------------