├── images ├── vs4mac-lottie-player.gif └── vs4mac-lottie-player.png ├── src ├── VS4Mac.LottiePlayer │ ├── Images │ │ ├── pause.png │ │ └── play.png │ ├── Controllers │ │ ├── Base │ │ │ └── IController.cs │ │ └── LottiePlayerController.cs │ ├── Views │ │ ├── Base │ │ │ └── IView.cs │ │ └── LottiePlayerDialog.cs │ ├── Controls │ │ └── Lottie │ │ │ ├── styles.scss │ │ │ ├── ExtendedWebView.cs │ │ │ ├── LottiePlayer.html │ │ │ └── LottiePlayer.cs │ ├── Helpers │ │ ├── ProjectHelper.cs │ │ └── FileHelper.cs │ ├── Properties │ │ ├── AddinInfo.cs │ │ └── Manifest.addin.xml │ ├── GlobalSuppressions.cs │ ├── Commands │ │ └── OpenLottiePlayerCommand.cs │ └── VS4Mac.LottiePlayer.csproj └── VS4Mac.LottiePlayer.sln ├── README.md ├── .gitattributes └── .gitignore /images/vs4mac-lottie-player.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsuarezruiz/VS4Mac-LottiePlayer/HEAD/images/vs4mac-lottie-player.gif -------------------------------------------------------------------------------- /images/vs4mac-lottie-player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsuarezruiz/VS4Mac-LottiePlayer/HEAD/images/vs4mac-lottie-player.png -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Images/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsuarezruiz/VS4Mac-LottiePlayer/HEAD/src/VS4Mac.LottiePlayer/Images/pause.png -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jsuarezruiz/VS4Mac-LottiePlayer/HEAD/src/VS4Mac.LottiePlayer/Images/play.png -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Controllers/Base/IController.cs: -------------------------------------------------------------------------------- 1 | namespace VS4Mac.LottiePlayer.Controllers.Base 2 | { 3 | public interface IController 4 | { 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Views/Base/IView.cs: -------------------------------------------------------------------------------- 1 | using VS4Mac.LottiePlayer.Controllers.Base; 2 | 3 | namespace VS4Mac.LottiePlayer.Views.Base 4 | { 5 | public interface IView 6 | { 7 | void SetController(IController controller); 8 | } 9 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Controls/Lottie/styles.scss: -------------------------------------------------------------------------------- 1 | html, body { 2 | background-color: transparent; 3 | width: 100%; 4 | height: 100%; 5 | margin: 0; 6 | overflow: hidden; 7 | } 8 | 9 | #player { 10 | width: 100%; 11 | height: 100%; 12 | } 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VS4Mac Lottie Player 2 | 3 | **Lottie Player** is a Visual Studio for macOS addin to Preview Lottie json files. 4 | 5 | ![VS4Mac Lottie Player](images/vs4mac-lottie-player.gif) 6 | 7 | ## Copyright and license 8 | 9 | Code released under the [MIT license](https://opensource.org/licenses/MIT). -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Controls/Lottie/ExtendedWebView.cs: -------------------------------------------------------------------------------- 1 | using CoreGraphics; 2 | using Gtk; 3 | using MonoDevelop.Components.Mac; 4 | using WebKit; 5 | 6 | namespace VS4Mac.LottiePlayer.Controls 7 | { 8 | public class ExtendedWebView : WKWebView 9 | { 10 | public ExtendedWebView() : base(new CGRect(), new WKWebViewConfiguration()) { } 11 | 12 | public Widget GtkWidget => gtkWidget ?? (gtkWidget = GtkMacInterop.NSViewToGtkWidget(this)); 13 | 14 | Widget gtkWidget; 15 | } 16 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Helpers/ProjectHelper.cs: -------------------------------------------------------------------------------- 1 | using MonoDevelop.Ide; 2 | 3 | namespace VS4Mac.LottiePlayer.Helpers 4 | { 5 | public static class ProjectHelper 6 | { 7 | public static bool IsProjectReady() 8 | { 9 | var isBuilding = IdeApp.ProjectOperations.IsBuilding(IdeApp.ProjectOperations.CurrentSelectedSolution); 10 | var isRunning = IdeApp.ProjectOperations.IsRunning(IdeApp.ProjectOperations.CurrentSelectedSolution); 11 | 12 | return !isBuilding && !isRunning; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Controllers/LottiePlayerController.cs: -------------------------------------------------------------------------------- 1 | using MonoDevelop.Projects; 2 | using VS4Mac.LottiePlayer.Controllers.Base; 3 | using VS4Mac.LottiePlayer.Views; 4 | 5 | namespace VS4Mac.LottiePlayer.Controllers 6 | { 7 | public class LottiePlayerController : IController 8 | { 9 | readonly ILottiePlayerView _view; 10 | 11 | public LottiePlayerController(ILottiePlayerView view, ProjectFile projectFile) 12 | { 13 | _view = view; 14 | 15 | ProjectFile = projectFile; 16 | IsPlaying = true; 17 | 18 | view.SetController(this); 19 | } 20 | 21 | public ProjectFile ProjectFile { get; set; } 22 | public bool IsPlaying { get; set; } 23 | } 24 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Helpers/FileHelper.cs: -------------------------------------------------------------------------------- 1 | using MonoDevelop.Projects; 2 | 3 | namespace VS4Mac.LottiePlayer.Helpers 4 | { 5 | public static class FileHelper 6 | { 7 | internal static readonly string[] ValidJsonExtensions = { "json", "lottie" }; 8 | 9 | public static bool IsJsonFile(ProjectFile projectFile) 10 | { 11 | if (projectFile == null) 12 | return false; 13 | 14 | var extension = projectFile.FilePath.Extension; 15 | 16 | foreach (var validJsonExtension in ValidJsonExtensions) 17 | { 18 | if (extension.Contains(validJsonExtension)) 19 | { 20 | return true; 21 | } 22 | } 23 | 24 | return false; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Properties/AddinInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.InteropServices; 3 | using Mono.Addins; 4 | using Mono.Addins.Description; 5 | 6 | [assembly: Addin( 7 | "LottiePlayer", 8 | Namespace = "MonoDevelop", 9 | Version = "0.1", 10 | Category = "IDE extensions" 11 | )] 12 | 13 | [assembly: AddinName("Lottie player")] 14 | [assembly: AddinCategory("IDE extensions")] 15 | [assembly: AddinDescription("Visual Studio for macOS addin to Preview Lottie json files.")] 16 | [assembly: AddinAuthor("Javier Suárez Ruiz")] 17 | [assembly: AddinUrl("https://github.com/jsuarezruiz/VS4Mac-LottiePlayer")] 18 | 19 | [assembly: CLSCompliant(false)] 20 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VS4Mac.LottiePlayer", "VS4Mac.LottiePlayer\VS4Mac.LottiePlayer.csproj", "{AB8C7273-B886-4549-B1F3-DE26EEFA4F56}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {AB8C7273-B886-4549-B1F3-DE26EEFA4F56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {AB8C7273-B886-4549-B1F3-DE26EEFA4F56}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {AB8C7273-B886-4549-B1F3-DE26EEFA4F56}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {AB8C7273-B886-4549-B1F3-DE26EEFA4F56}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | EndGlobal 18 | -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | 2 | // This file is used by Code Analysis to maintain SuppressMessage 3 | // attributes that are applied to this project. 4 | // Project-level suppressions either have no target or are given 5 | // a specific target and scoped to a namespace, type, member, etc. 6 | 7 | [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Potential Code Quality Issues", "RECS0165:Asynchronous methods should return a Task instead of void", Justification = "", Scope = "member", Target = "~M:VS4Mac.LottiePlayer.Controls.LottiePlayerNavigationDelegate.DidFinishNavigation(WebKit.WKWebView,WebKit.WKNavigation)")] 8 | [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Potential Code Quality Issues", "RECS0165:Asynchronous methods should return a Task instead of void", Justification = "", Scope = "member", Target = "~M:VS4Mac.LottiePlayer.Views.LottiePlayerDialog.SetController(VS4Mac.LottiePlayer.Controllers.Base.IController)")] 9 | 10 | -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Properties/Manifest.addin.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 |
5 | Lottie Player Addin 6 | Javier Suárez Ruiz 7 | Javier Suárez Ruiz 8 | https://github.com/jsuarezruiz/VSMac-LottiePlayer 9 |
10 | 12 | 16 | 17 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
-------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Controls/Lottie/LottiePlayer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Lottie Player 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 35 | 36 | -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Commands/OpenLottiePlayerCommand.cs: -------------------------------------------------------------------------------- 1 | using MonoDevelop.Components.Commands; 2 | using MonoDevelop.Ide; 3 | using MonoDevelop.Projects; 4 | using VS4Mac.LottiePlayer.Controllers; 5 | using VS4Mac.LottiePlayer.Helpers; 6 | using VS4Mac.LottiePlayer.Views; 7 | 8 | namespace VS4Mac.LottiePlayer.Commands 9 | { 10 | public class OpenLottiePlayerCommand : CommandHandler 11 | { 12 | protected override void Run() 13 | { 14 | var projectFile = IdeApp.ProjectOperations.CurrentSelectedItem as ProjectFile; 15 | 16 | var lottiePlayerDialog = new LottiePlayerDialog(); 17 | var lottiePlayerController = new LottiePlayerController(lottiePlayerDialog, projectFile); 18 | lottiePlayerDialog.Run(Xwt.MessageDialog.RootWindow); 19 | 20 | } 21 | 22 | protected override void Update(CommandInfo info) 23 | { 24 | info.Visible = 25 | IsWorkspaceOpen() 26 | && ProjectHelper.IsProjectReady() 27 | && SelectedItemIsJson(); 28 | } 29 | 30 | bool IsWorkspaceOpen() 31 | { 32 | return IdeApp.Workspace.IsOpen; 33 | } 34 | 35 | bool SelectedItemIsJson() 36 | { 37 | var projectFile = IdeApp.ProjectOperations.CurrentSelectedItem as ProjectFile; 38 | return FileHelper.IsJsonFile(projectFile); 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/VS4Mac.LottiePlayer.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net471 4 | 5 | 6 | true 7 | 8 | 9 | true 10 | 11 | 12 | 13 | 14 | 15 | 16 | LottiePlayer 17 | 18 | 19 | Styles 20 | 21 | 22 | pause.png 23 | 24 | 25 | play.png 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Controls/Lottie/LottiePlayer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | using WebKit; 5 | 6 | namespace VS4Mac.LottiePlayer.Controls 7 | { 8 | public class LottiePlayer : ExtendedWebView, IWKNavigationDelegate 9 | { 10 | const string HTML_RESOURCE = "LottiePlayer"; 11 | 12 | public event EventHandler DurationChanged; 13 | 14 | public LottiePlayer() 15 | { 16 | NavigationDelegate = new LottiePlayerNavigationDelegate(); 17 | } 18 | 19 | public string Animation { get; set; } 20 | 21 | public WKNavigation InitialNavigation { get; set; } 22 | 23 | public bool Initialized { get; set; } 24 | 25 | public double Duration { get; internal set; } 26 | 27 | public async Task SetDataAsync(string data) 28 | { 29 | Animation = data; 30 | 31 | if (!Initialized) 32 | { 33 | var html = CreateHtml(Animation); 34 | InitialNavigation = LoadHtmlString(html, null); 35 | await Task.Delay(500); 36 | LoadAnimationDuration(); 37 | return; 38 | } 39 | } 40 | 41 | public void Play() 42 | { 43 | EvaluateJavaScript($"window.animation.play();", null); 44 | } 45 | 46 | public void Pause() 47 | { 48 | EvaluateJavaScript($"window.animation.pause();", null); 49 | LoadAnimationDuration(); 50 | } 51 | 52 | public void GoToAndStop(double value) 53 | { 54 | Pause(); 55 | EvaluateJavaScript($"window.animation.goToAndStop({value}, true);", null); 56 | } 57 | 58 | void LoadAnimationDuration() 59 | { 60 | EvaluateJavaScript($"getAnimationDuration();", (result, error) => 61 | { 62 | var durationString = result.ToString(); 63 | Duration = Convert.ToDouble(durationString); 64 | DurationChanged?.Invoke(this, null); 65 | }); 66 | } 67 | 68 | static string CreateHtml(string data) 69 | { 70 | return LoadStringFromResource(HTML_RESOURCE) 71 | .Replace("{REPLACE_WITH_ANIMATION}", data); 72 | } 73 | 74 | static string LoadStringFromResource(string id) 75 | { 76 | using (var stream = typeof(LottiePlayer).Assembly.GetManifestResourceStream(id)) 77 | using (var reader = new StreamReader(stream)) 78 | return reader.ReadToEnd(); 79 | } 80 | } 81 | 82 | public class LottiePlayerNavigationDelegate : WKNavigationDelegate 83 | { 84 | public override async void DidFinishNavigation(WKWebView webView, WKNavigation navigation) 85 | { 86 | var lottiePlayer = webView as LottiePlayer; 87 | 88 | if (navigation == lottiePlayer.InitialNavigation) 89 | { 90 | lottiePlayer.InitialNavigation = null; 91 | lottiePlayer.Initialized = true; 92 | await lottiePlayer.SetDataAsync(lottiePlayer.Animation); 93 | } 94 | } 95 | } 96 | } -------------------------------------------------------------------------------- /src/VS4Mac.LottiePlayer/Views/LottiePlayerDialog.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Threading.Tasks; 3 | using MonoDevelop.Ide; 4 | using VS4Mac.LottiePlayer.Controllers; 5 | using VS4Mac.LottiePlayer.Controllers.Base; 6 | using VS4Mac.LottiePlayer.Views.Base; 7 | using Xwt; 8 | 9 | namespace VS4Mac.LottiePlayer.Views 10 | { 11 | public interface ILottiePlayerView : IView 12 | { 13 | 14 | } 15 | 16 | public class LottiePlayerDialog : Dialog, ILottiePlayerView 17 | { 18 | VBox _mainBox; 19 | Controls.LottiePlayer _lottiePlayer; 20 | HBox _controlBox; 21 | Button _playButton; 22 | Slider _timeSlider; 23 | HBox _buttonBox; 24 | Button _closeButton; 25 | 26 | LottiePlayerController _controller; 27 | 28 | public LottiePlayerDialog() 29 | { 30 | Init(); 31 | BuildGui(); 32 | AttachEvents(); 33 | } 34 | 35 | void Init() 36 | { 37 | _mainBox = new VBox 38 | { 39 | BackgroundColor = MonoDevelop.Ide.Gui.Styles.BackgroundColor, 40 | Margin = new WidgetSpacing(0, 0, 0, 0) 41 | }; 42 | 43 | _lottiePlayer = new Controls.LottiePlayer(); 44 | 45 | _controlBox = new HBox 46 | { 47 | Margin = new WidgetSpacing(0, 6, 0, 6) 48 | }; 49 | 50 | _playButton = new Button 51 | { 52 | BackgroundColor = MonoDevelop.Ide.Gui.Styles.BackgroundColor, 53 | Image = ImageService.GetIcon("lottie-pause", Gtk.IconSize.Button), 54 | ImagePosition = ContentPosition.Center, 55 | Style = ButtonStyle.Borderless 56 | }; 57 | 58 | _timeSlider = new HSlider 59 | { 60 | MinimumValue = 0, 61 | Visible = false 62 | }; 63 | 64 | _buttonBox = new HBox(); 65 | _closeButton = new Button("Close"); 66 | } 67 | 68 | void BuildGui() 69 | { 70 | Title = "Lottie Player"; 71 | 72 | Height = 500; 73 | Width = 500; 74 | 75 | var xwtLottiePlayer = Toolkit.CurrentEngine.WrapWidget(_lottiePlayer); 76 | 77 | _controlBox.PackStart(_playButton); 78 | _controlBox.PackStart(_timeSlider, true); 79 | 80 | _buttonBox.PackEnd(_closeButton); 81 | 82 | _mainBox.PackStart(xwtLottiePlayer, true); 83 | _mainBox.PackStart(_controlBox); 84 | _mainBox.PackEnd(_buttonBox); 85 | 86 | _mainBox.Show(); 87 | 88 | Content = _mainBox; 89 | Resizable = false; 90 | } 91 | 92 | void AttachEvents() 93 | { 94 | _lottiePlayer.DurationChanged += OnLottiePlayerDurationChanged; 95 | _timeSlider.ValueChanged += OnTimeSliderValueChanged; 96 | _playButton.Clicked += OnPlayButtonClicked; 97 | _closeButton.Clicked += OnCloseButtonClicked; 98 | } 99 | 100 | protected override void Dispose(bool disposing) 101 | { 102 | base.Dispose(disposing); 103 | 104 | _lottiePlayer.DurationChanged -= OnLottiePlayerDurationChanged; 105 | _timeSlider.ValueChanged -= OnTimeSliderValueChanged; 106 | _playButton.Clicked -= OnPlayButtonClicked; 107 | _closeButton.Clicked -= OnCloseButtonClicked; 108 | } 109 | 110 | public async void SetController(IController controller) 111 | { 112 | _controller = (LottiePlayerController)controller; 113 | 114 | await LoadAnimationAsync(); 115 | } 116 | 117 | async Task LoadAnimationAsync() 118 | { 119 | var animationText = File.ReadAllText(_controller.ProjectFile.FilePath); 120 | 121 | await _lottiePlayer.SetDataAsync(animationText); 122 | } 123 | 124 | void UpdateSliderData() 125 | { 126 | _timeSlider.MaximumValue = _lottiePlayer.Duration; 127 | _timeSlider.StepIncrement = 0.1; 128 | } 129 | 130 | void OnLottiePlayerDurationChanged(object sender, System.EventArgs e) 131 | { 132 | UpdateSliderData(); 133 | } 134 | 135 | void OnTimeSliderValueChanged(object sender, System.EventArgs e) 136 | { 137 | var timeValue = _timeSlider.Value; 138 | _lottiePlayer.GoToAndStop(timeValue); 139 | } 140 | 141 | void OnPlayButtonClicked(object sender, System.EventArgs e) 142 | { 143 | _controller.IsPlaying = !_controller.IsPlaying; 144 | 145 | if (_controller.IsPlaying) 146 | { 147 | Pause(); 148 | } 149 | else 150 | { 151 | Play(); 152 | } 153 | } 154 | 155 | void Pause() 156 | { 157 | _playButton.Image = ImageService.GetIcon("lottie-pause", Gtk.IconSize.Button); 158 | _timeSlider.Visible = false; 159 | _lottiePlayer.Play(); 160 | } 161 | 162 | void Play() 163 | { 164 | _playButton.Image = ImageService.GetIcon("lottie-play", Gtk.IconSize.Button); 165 | _timeSlider.Visible = true; 166 | _lottiePlayer.Pause(); 167 | } 168 | 169 | void OnCloseButtonClicked(object sender, System.EventArgs e) 170 | { 171 | Respond(Command.Close); 172 | Close(); 173 | } 174 | } 175 | } -------------------------------------------------------------------------------- /.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 | [Ll]og/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | *.VC.VC.opendb 85 | 86 | # Visual Studio profiler 87 | *.psess 88 | *.vsp 89 | *.vspx 90 | *.sap 91 | 92 | # TFS 2012 Local Workspace 93 | $tf/ 94 | 95 | # Guidance Automation Toolkit 96 | *.gpState 97 | 98 | # ReSharper is a .NET coding add-in 99 | _ReSharper*/ 100 | *.[Rr]e[Ss]harper 101 | *.DotSettings.user 102 | 103 | # JustCode is a .NET coding add-in 104 | .JustCode 105 | 106 | # TeamCity is a build add-in 107 | _TeamCity* 108 | 109 | # DotCover is a Code Coverage Tool 110 | *.dotCover 111 | 112 | # NCrunch 113 | _NCrunch_* 114 | .*crunch*.local.xml 115 | nCrunchTemp_* 116 | 117 | # MightyMoose 118 | *.mm.* 119 | AutoTest.Net/ 120 | 121 | # Web workbench (sass) 122 | .sass-cache/ 123 | 124 | # Installshield output folder 125 | [Ee]xpress/ 126 | 127 | # DocProject is a documentation generator add-in 128 | DocProject/buildhelp/ 129 | DocProject/Help/*.HxT 130 | DocProject/Help/*.HxC 131 | DocProject/Help/*.hhc 132 | DocProject/Help/*.hhk 133 | DocProject/Help/*.hhp 134 | DocProject/Help/Html2 135 | DocProject/Help/html 136 | 137 | # Click-Once directory 138 | publish/ 139 | 140 | # Publish Web Output 141 | *.[Pp]ublish.xml 142 | *.azurePubxml 143 | # TODO: Comment the next line if you want to checkin your web deploy settings 144 | # but database connection strings (with potential passwords) will be unencrypted 145 | *.pubxml 146 | *.publishproj 147 | 148 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 149 | # checkin your Azure Web App publish settings, but sensitive information contained 150 | # in these scripts will be unencrypted 151 | PublishScripts/ 152 | 153 | # NuGet Packages 154 | *.nupkg 155 | # The packages folder can be ignored because of Package Restore 156 | **/packages/* 157 | # except build/, which is used as an MSBuild target. 158 | !**/packages/build/ 159 | # Uncomment if necessary however generally it will be regenerated when needed 160 | #!**/packages/repositories.config 161 | # NuGet v3's project.json files produces more ignoreable files 162 | *.nuget.props 163 | *.nuget.targets 164 | 165 | # Microsoft Azure Build Output 166 | csx/ 167 | *.build.csdef 168 | 169 | # Microsoft Azure Emulator 170 | ecf/ 171 | rcf/ 172 | 173 | # Windows Store app package directories and files 174 | AppPackages/ 175 | BundleArtifacts/ 176 | Package.StoreAssociation.xml 177 | _pkginfo.txt 178 | 179 | # Visual Studio cache files 180 | # files ending in .cache can be ignored 181 | *.[Cc]ache 182 | # but keep track of directories ending in .cache 183 | !*.[Cc]ache/ 184 | 185 | # Others 186 | ClientBin/ 187 | ~$* 188 | *~ 189 | *.dbmdl 190 | *.dbproj.schemaview 191 | *.pfx 192 | *.publishsettings 193 | node_modules/ 194 | orleans.codegen.cs 195 | 196 | # Since there are multiple workflows, uncomment next line to ignore bower_components 197 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 198 | #bower_components/ 199 | 200 | # RIA/Silverlight projects 201 | Generated_Code/ 202 | 203 | # Backup & report files from converting an old project file 204 | # to a newer Visual Studio version. Backup files are not needed, 205 | # because we have git ;-) 206 | _UpgradeReport_Files/ 207 | Backup*/ 208 | UpgradeLog*.XML 209 | UpgradeLog*.htm 210 | 211 | # SQL Server files 212 | *.mdf 213 | *.ldf 214 | 215 | # Business Intelligence projects 216 | *.rdl.data 217 | *.bim.layout 218 | *.bim_*.settings 219 | 220 | # Microsoft Fakes 221 | FakesAssemblies/ 222 | 223 | # GhostDoc plugin setting file 224 | *.GhostDoc.xml 225 | 226 | # Node.js Tools for Visual Studio 227 | .ntvs_analysis.dat 228 | 229 | # Visual Studio 6 build log 230 | *.plg 231 | 232 | # Visual Studio 6 workspace options file 233 | *.opt 234 | 235 | # Visual Studio LightSwitch build output 236 | **/*.HTMLClient/GeneratedArtifacts 237 | **/*.DesktopClient/GeneratedArtifacts 238 | **/*.DesktopClient/ModelManifest.xml 239 | **/*.Server/GeneratedArtifacts 240 | **/*.Server/ModelManifest.xml 241 | _Pvt_Extensions 242 | 243 | # Paket dependency manager 244 | .paket/paket.exe 245 | paket-files/ 246 | 247 | # FAKE - F# Make 248 | .fake/ 249 | 250 | # JetBrains Rider 251 | .idea/ 252 | *.sln.iml 253 | --------------------------------------------------------------------------------