├── .editorconfig ├── .gitattributes ├── .gitignore ├── Documentation └── Images │ ├── HelpExplorerOptions.png │ ├── HelpExplorerOptionsDisplayMultipleFileTypes.png │ ├── HelpExplorerOptionsDisplayMultipleProjectTypes.png │ ├── HelpExplorerOptionsEnableFileCreation.png │ ├── HelpExplorerOptionsGeneral.png │ ├── HelpExplorerOptionsLocalFileCreationPath.png │ ├── HelpExplorerRunMenu.png │ ├── HelpExplorerToolWinExtensibilityProjectLoaded.png │ ├── HelpExplorerToolWindow.png │ └── HelpExplorerToolWindowNoProject.png ├── HelpExplorer.sln ├── LICENSE ├── README.md ├── Tutorial.md ├── TutorialImages ├── ASP.Net.CoreInfo.png ├── AddASP.NET.CoreProject.png ├── CSHtmlSelection.png ├── CapabilitiesVersion2.png ├── CreateProjectInfo.png ├── CreateProjectType.png ├── DisplayMultipleFileTypes.png ├── DisplayMultipleProjectTypes.png ├── ExitVS.png ├── HEOptionMProjectTypesOff.png ├── HEOptionsOff.png ├── HelpExplorerDefaultOptions.png ├── HelpExplorerNoProjectLoaded.png ├── HelpExplorerOpenFirstTime.png ├── HelpExplorerToolWindow.png ├── HelpExplorerToolWindowToolbarButtons.png ├── HelpExplorerXamlLink.png ├── JsonSelection.png ├── MainWindows.xaml.png ├── ProjectNameASP.NET.Core.png ├── ProjectNameDialog.png ├── SaveProjectCapabilites.png ├── SelectionChangeFromXamltoCSharp.png ├── VSCreateProject.png ├── VisualStudioBeforeHelpExplorerLoaded.png ├── WPFAppWithDocFxLoggingAndZipExample.png └── XamlSelection.png ├── appveyor.yml └── src ├── Commands ├── CreateCapabilitesFileCommand.cs ├── DisplayMultipleFileTypesCommand.cs ├── DisplayMultipleProjectTypesCommand.cs └── MyToolWindowCommand.cs ├── HelpExplorer.csproj ├── HelpExplorerPackage.cs ├── Options └── General.cs ├── Properties └── AssemblyInfo.cs ├── Resources └── Icon.png ├── Schema ├── FileTypeCollection.cs ├── ProjectTypeCollection.cs ├── filetypes.json ├── projecttypes.json └── projecttypes.json.txt ├── ToolWindowMessenger.cs ├── ToolWindows ├── MyToolWindow.cs ├── MyToolWindowControl.xaml └── MyToolWindowControl.xaml.cs ├── VSCommandTable.cs ├── VSCommandTable.vsct ├── source.extension.cs └── source.extension.vsixmanifest /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome:http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Don't use tabs for indentation. 7 | [*] 8 | indent_style = space 9 | end_of_line = crlf 10 | # (Please don't specify an indent_size here; that has too many unintended consequences.) 11 | 12 | # Code files 13 | [*.{cs,csx,vb,vbx}] 14 | indent_size = 4 15 | 16 | # Xml project files 17 | [*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] 18 | indent_size = 2 19 | 20 | # Xml config files 21 | [*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] 22 | indent_size = 2 23 | 24 | # JSON files 25 | [*.json] 26 | indent_size = 2 27 | 28 | # Dotnet code style settings: 29 | [*.{cs,vb}] 30 | # Sort using and Import directives with System.* appearing first 31 | dotnet_sort_system_directives_first = true 32 | dotnet_separate_import_directive_groups = false 33 | 34 | # Avoid "this." and "Me." if not necessary 35 | dotnet_style_qualification_for_field = false : suggestion 36 | dotnet_style_qualification_for_property = false : suggestion 37 | dotnet_style_qualification_for_method = false : suggestion 38 | dotnet_style_qualification_for_event = false : suggestion 39 | 40 | # Use language keywords instead of framework type names for type references 41 | dotnet_style_predefined_type_for_locals_parameters_members = true : suggestion 42 | dotnet_style_predefined_type_for_member_access = true : suggestion 43 | 44 | # Suggest more modern language features when available 45 | dotnet_style_object_initializer = true : suggestion 46 | dotnet_style_collection_initializer = true : suggestion 47 | dotnet_style_coalesce_expression = true : suggestion 48 | dotnet_style_null_propagation = true : suggestion 49 | dotnet_style_explicit_tuple_names = true : suggestion 50 | 51 | # Naming rules - async methods to be prefixed with Async 52 | dotnet_naming_rule.async_methods_must_end_with_async.severity = warning 53 | dotnet_naming_rule.async_methods_must_end_with_async.symbols = method_symbols 54 | dotnet_naming_rule.async_methods_must_end_with_async.style = end_in_async_style 55 | 56 | dotnet_naming_symbols.method_symbols.applicable_kinds = method 57 | dotnet_naming_symbols.method_symbols.required_modifiers = async 58 | 59 | dotnet_naming_style.end_in_async_style.capitalization = pascal_case 60 | dotnet_naming_style.end_in_async_style.required_suffix = Async 61 | 62 | # Naming rules - private fields must start with an underscore 63 | dotnet_naming_rule.field_must_start_with_underscore.severity = warning 64 | dotnet_naming_rule.field_must_start_with_underscore.symbols = private_fields 65 | dotnet_naming_rule.field_must_start_with_underscore.style = start_underscore_style 66 | 67 | dotnet_naming_symbols.private_fields.applicable_kinds = field 68 | dotnet_naming_symbols.private_fields.applicable_accessibilities = private 69 | 70 | dotnet_naming_style.start_underscore_style.capitalization = camel_case 71 | dotnet_naming_style.start_underscore_style.required_prefix = _ 72 | 73 | # CSharp code style settings: 74 | [*.cs] 75 | # Prefer "var" everywhere 76 | csharp_style_var_for_built_in_types = true : suggestion 77 | csharp_style_var_when_type_is_apparent = true : suggestion 78 | csharp_style_var_elsewhere = false : suggestion 79 | 80 | # Prefer method-like constructs to have a block body 81 | csharp_style_expression_bodied_methods = false : none 82 | csharp_style_expression_bodied_constructors = false : none 83 | csharp_style_expression_bodied_operators = false : none 84 | 85 | # Prefer property-like constructs to have an expression-body 86 | csharp_style_expression_bodied_properties = true : none 87 | csharp_style_expression_bodied_indexers = true : none 88 | csharp_style_expression_bodied_accessors = true : none 89 | 90 | # Suggest more modern language features when available 91 | csharp_style_pattern_matching_over_is_with_cast_check = true : suggestion 92 | csharp_style_pattern_matching_over_as_with_null_check = true : suggestion 93 | csharp_style_inlined_variable_declaration = true : suggestion 94 | csharp_style_throw_expression = true : suggestion 95 | csharp_style_conditional_delegate_call = true : suggestion 96 | 97 | # Newline settings 98 | csharp_new_line_before_open_brace = all 99 | csharp_new_line_before_else = true 100 | csharp_new_line_before_catch = true 101 | csharp_new_line_before_finally = true 102 | csharp_new_line_before_members_in_object_initializers = true 103 | csharp_new_line_before_members_in_anonymous_types = true -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerOptions.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerOptionsDisplayMultipleFileTypes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerOptionsDisplayMultipleFileTypes.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerOptionsDisplayMultipleProjectTypes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerOptionsDisplayMultipleProjectTypes.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerOptionsEnableFileCreation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerOptionsEnableFileCreation.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerOptionsGeneral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerOptionsGeneral.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerOptionsLocalFileCreationPath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerOptionsLocalFileCreationPath.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerRunMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerRunMenu.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerToolWinExtensibilityProjectLoaded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerToolWinExtensibilityProjectLoaded.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerToolWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerToolWindow.png -------------------------------------------------------------------------------- /Documentation/Images/HelpExplorerToolWindowNoProject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/Documentation/Images/HelpExplorerToolWindowNoProject.png -------------------------------------------------------------------------------- /HelpExplorer.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.1.31910.343 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelpExplorer", "src\HelpExplorer.csproj", "{5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6F50EDA1-DE02-4D93-AE6E-1A4870873414}" 9 | ProjectSection(SolutionItems) = preProject 10 | .editorconfig = .editorconfig 11 | appveyor.yml = appveyor.yml 12 | README.md = README.md 13 | EndProjectSection 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Debug|x86 = Debug|x86 19 | Release|Any CPU = Release|Any CPU 20 | Release|x86 = Release|x86 21 | EndGlobalSection 22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 23 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Debug|x86.ActiveCfg = Debug|x86 26 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Debug|x86.Build.0 = Debug|x86 27 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Release|Any CPU.ActiveCfg = Release|Any CPU 28 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Release|Any CPU.Build.0 = Release|Any CPU 29 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Release|x86.ActiveCfg = Release|x86 30 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C}.Release|x86.Build.0 = Release|x86 31 | EndGlobalSection 32 | GlobalSection(SolutionProperties) = preSolution 33 | HideSolutionNode = FALSE 34 | EndGlobalSection 35 | GlobalSection(ExtensibilityGlobals) = postSolution 36 | SolutionGuid = {47F66776-7976-4A92-AC10-CE2D5F6DCFA1} 37 | EndGlobalSection 38 | EndGlobal 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2020 Mads Kristensen 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Help Explorer for Visual Studio 2 | 3 | [![Build 4 | status](https://ci.appveyor.com/api/projects/status/5b1gr9r9vjra7yuf?svg=true)](https://ci.appveyor.com/project/madskristensen/helpexplorer) 5 | 6 | Adds a Help Explorer tool window that provides contextual help and resources. 7 | Great for beginners, students, and hobby programmers alike. 8 | 9 | Download and install the [CI 10 | build](https://www.vsixgallery.com/extension/HelpExplorer.c8c773f3-d62f-4717-9b7d-1d3e440a7d53/). 11 | 12 | We're building this extension live on air. Check out the first episode [Where we 13 | build a tool window 14 | extension](https://www.youtube.com/watch?v=VVaGOxdvYSw&list=PLReL099Y5nReXKzeX10TZF3BfLdOZXxix&index=1) 15 | and make sure to tune in to the [Hacking Visual Studio 16 | show](https://www.youtube.com/playlist?list=PLReL099Y5nReXKzeX10TZF3BfLdOZXxix) 17 | every Friday. 18 | 19 | ## License 20 | 21 | [Apache 2.0](LICENSE) 22 | 23 | ## Help Explorer Tutorial and User 24 | -------------------------------------------------------------------------------- /Tutorial.md: -------------------------------------------------------------------------------- 1 | # Help Explorer for Visual Studio Tutorial 2 | 3 | The Help Explorer for Visual Studio is an Visual Studio extension that adds a 4 | Help Explorer tool window that provides contextual help and resources based on 5 | Solution Explorer’s current Project of File selection. 6 | 7 | ## This Tutorial is broken down into two sections: See Outline below. 8 | 9 | 1. Beginners, Students and Hobby Developers 10 | 11 | - Basics on using Help Explorer to Find and Learn from Help Explorer provided URL links based on the current project or file selected in Solution Explorer. 12 | 13 | - Help Explorer Tools Option Settings. 14 | 15 | 1. Display single or multiple project type URL links. 16 | 17 | 2. Display single or multiple file type URL links. 18 | 19 | 3. Create or do not create local Template Project Capabilities files. 20 | 21 | 4. Local Template Project Capabilities file save path. 22 | 23 | - Help Explorer Tools Window, Toolbar Buttons. 24 | 25 | 1. Display single or multiple project type URL links. 26 | 27 | 2. Display single or multiple file type URL links. 28 | 29 | 3. Create or do not create local Template Project Capabilities files. 30 | 31 | 1. Experienced Developers or Visual Studio 2022 Template Developers 32 | 33 | - How to update your Visual Studio 2022 Custom Project Template Extensions to provide Custom Project Capabilities. 34 | 35 | - How to update Help Explorer’s projecttypes.json and filetypes.json file. 36 | 37 | 1. projecttypes 38 | 39 | - capability. 40 | 41 | - capabilityExpression 42 | 43 | - capabilitiesFileName 44 | 45 | - text 46 | 47 | - links 48 | 49 | - text 50 | 51 | - url 52 | 53 | 1. Filetypes 54 | 55 | - Name 56 | 57 | - text 58 | 59 | - links 60 | 61 | - text 62 | 63 | - url 64 | 65 | - How to filter the Project Types URL links, for Help, Tutorials or Guides, based on the updated Custom Template Project Capabilities. 66 | 67 | 68 | ## Section 1: Beginners, Students and Hobby Developers 69 | 70 | Help Explorer has built in URL links for know project and file types. If you do not get a link for a selected project or file type please become a contributer to: 71 | [Help Explorer](https://github.com/madskristensen/HelpExplorer) on [GitHub](https://github.com/). 72 | 73 | ### Using Help Explorer: 74 | 75 | If Visual Studio is running? Shut it down, by Using: 76 | ```csharp 77 | Select File Menu, Then Exit 78 | ``` 79 | ![ExitVS](TutorialImages/ExitVS.png) 80 | 81 | Install HelpExplorer.vsix extension from [HelpExplorer](https://www.vsixgallery.com/extension/HelpExplorer.c8c773f3-d62f-4717-9b7d-1d3e440a7d53) at the [Open VSIX Gallery](https://www.vsixgallery.com/) or from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/). 82 | 83 | Once you have Help Explorer extension installed: 84 | 85 | - [ ] launch Visual Studio 2022. 86 | - [ ] Create new C# WPF Application Project. 87 | 88 | ![ExitVS](TutorialImages/CreateProjectType.png) 89 | 90 | - [ ] Select the MainWindow.xaml file in Solution Explorer. 91 | 92 | ![MainWindowXaml](TutorialImages/MainWindows.xaml.png) 93 | 94 | - [ ] Load Help Explorer ToolWindow for the first time. 95 | 96 | ![HelpExplorerLoad](TutorialImages/HelpExplorerOpenFirstTime.png) 97 | 98 | Help Explorer ToolWindow displays and shows links for selected project and file. 99 | 100 | ![HelpExplorerXaml](TutorialImages/HelpExplorerXamlLink.png) 101 | 102 | - [ ] Change selected file from .xaml to .CS. 103 | 104 | ![HelpExplorerSelectionChanged](TutorialImages/SelectionChangeFromXamltoCSharp.png) 105 | 106 | ### Help Explorer Tools Option Settings. 107 | 108 | 1. Display single or multiple project type URL links. 109 | 110 | The defaults are shown. 111 | ![MultipleProjectTypes](TutorialImages/HelpExplorerDefaultOptions.png) 112 | 113 | Change the 'Display Multiple Projects Types value to true or false. 114 | 115 | True will display multiple links for a project type. 116 | 117 | False will only display the first link returned for a project type. 118 | 119 | 2. Display single or multiple file type URL links. 120 | 121 | ![MultipleProjectTypes](TutorialImages/HelpExplorerDefaultOptions.png) 122 | 123 | Change the 'Display Multiple File Types value to true or false. 124 | 125 | True will display multiple links for a file type. 126 | 127 | False will only display the first link returned for a file type. 128 | 129 | 3. Create or do not create local Template Project Capabilities files. 130 | 131 | Enable Local File Creation is a true or false value. True to create local file. 132 | 133 | 4. Local Template Project Capabilities file save path. 134 | 135 | > **Note: User must user rights to create files in the local path location entered.** 136 | 137 | 138 | ### Help Explorer Tools Window, Toolbar Buttons. 139 | 140 | The Help Explorer Tools Window Toolbar buttons allow you to change the Help Explorer Options easily. 141 | 142 | Each button Click changes the current Help Explorer Option from true to false of from false to true, and then refreshes the display of the links. 143 | 144 | 1. Display single or multiple project type URL links. 145 | 146 | ![MultipleProjectTypes](TutorialImages/DisplayMultipleProjectTypes.png) 147 | 148 | 2. Display single or multiple file type URL links. 149 | 150 | ![MultipleFileTypes](TutorialImages/DisplayMultipleFileTypes.png) 151 | 152 | 3. Create or do not create local Template Project Capabilities files. 153 | 154 | ![SaveProjectCapabilites](TutorialImages/SaveProjectCapabilites.png) 155 | 156 | ## Section 2: Experienced Developers or Visual Studio 2022 Template Developers 157 | 158 | ### How to update your Visual Studio 2022 Custom Project Template Extensions to provide Custom Project Capabilities. 159 | 160 | If you are the owner of the Custom or built in Visual Studio Project Template you can very easily add Project Capabilities to your project template. 161 | 162 | > **It's very important that project capabilities you define fit this [criteria](https://github.com/Microsoft/VSProjectSystem/blob/master/doc/overview/about_project_capabilities.md):** 163 | > 164 | Open you Visual Studio SDK Style Project Template 165 | (Note: This is the project template .csproj contained in the Visual Studio Extension Project located under the ProjectsTemplates folder.) 166 | You may need to unzip the Project Template to get access to the .csproj file. 167 | 168 | Open the .csproj file for your SDK Style project. It should look similar to this .csproj snippet 169 | Note: This snippet sample already has Custom Project Capabilities added. 170 | 171 | ```xml 172 | 173 | 174 | 175 | WinExe 176 | net6.0-windows 177 | true 178 | x64 179 | win10-x64 180 | 1.0.0.0 181 | 1.0.0.0 182 | $safeprojectname$.App 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | ``` 192 | 193 | Now to add the Custom Project Capabilities to the .csproj file. 194 | 195 | ```xnk 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | ``` 204 | 205 | The DiagnoseCapabilities option will list all current available Project Templates in your Project under Solution Explorer. 206 | If you do not want to always list all the Project Capablities in your deployed template then remove this line. 207 | 208 | ```xml 209 | 210 | 211 | ``` 212 | 213 | ![CapabilitiesV2](TutorialImages/CapabilitiesVersion2.png) 214 | 215 | The remaining ProjectCapability lines will show listed in your projects deploy template. 216 | These are examples and should not be included unless your project template supports them. 217 | 218 | For example: If you had [VSIXWPFAppWithDocFxLoggingAndZip](https://marketplace.visualstudio.com/items?itemName=DannyMcNaught.WPFAppWithDocFxLoggingAndZip2022) project template installed. 219 | 220 | The above example has the ProjectCapabilitiy listed so with project loaded based on that template, 221 | Help Explorer will display these links: (Note: Right below the Project name in Solution Explorer the first 222 | ProjectCapability list shows up as "Capablilities Version: 2" the version can be ignored.) 223 | 224 | ![WPFAppWithDocFxLoggingAndZipExample](TutorialImages/WPFAppWithDocFxLoggingAndZipExample.png) 225 | 226 | 227 | ## How to update Help Explorer’s projecttypes.json and filetypes.json file. 228 | 229 | To make you custom project capabilities available to Help Explorer and to the development community 230 | using Help Explorer you must contribute to Help Explorer Project and add your custom project capabliities to the projecttypes.json file. 231 | 232 | Once you modify the projecttypes.json or the filetypes.json you must commit it and submit a pull request to the project owner. 233 | 234 | Once they accept your pull request and merge it to master, the users will be able to update to that version or higher of Help Explorer and now have your custom project capabilities and help url links available. 235 | 236 | #### Example of projecttypes.json file: 237 | 238 | ```json 239 | { 240 | "projecttypes": [ 241 | { 242 | "capability": "", 243 | "capabilityExpression": "", 244 | "capabilitiesFileName": "", 245 | "text": "No project loaded.", 246 | "links": [ 247 | { 248 | "text": "Getting started with Visual Studio", 249 | "url": "https://visualstudio.microsoft.com/vs/" 250 | }, 251 | { 252 | "text": "Visual Studio tips & tricks", 253 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 254 | } 255 | ] 256 | }, 257 | { 258 | "capability": "AspNetCore", 259 | "capabilityExpression": "(AspNetCore & CSharp) & CPS", 260 | "capabilitiesFileName": "AspNetCore_CSharp_CPS", 261 | "text": "You are working in an ASP.NET Core project and might find these links useful.", 262 | "links": [ 263 | { 264 | "text": "Getting started with ASP.NET Core", 265 | "url": "https://dotnet.microsoft.com/apps/aspnet" 266 | }, 267 | { 268 | "text": "ASP.NET Core tutorial", 269 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 270 | } 271 | ] 272 | }, 273 | { 274 | "capability": "DotNetCoreWeb", 275 | "capabilityExpression": "(DotNetCoreWeb & CSharp) & CPS", 276 | "capabilitiesFileName": "DotNetCoreWeb_CSharp_CPS", 277 | "text": "You are working in an ASP.NET Core Web project and might find these links useful.", 278 | "links": [ 279 | { 280 | "text": "Getting started with ASP.NET Core Web", 281 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/quickstart-aspnet-core?view=vs-2022" 282 | }, 283 | { 284 | "text": "ASP.NET Core Web tutorial", 285 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-aspnet-core?view=vs-2022" 286 | } 287 | ] 288 | }, 289 | { 290 | "capability": "MauiBlazor", 291 | "capabilityExpression": "(MauiBlazor & CSharp) & CPS", 292 | "capabilitiesFileName": "MauiBlazor_CSharp_CPS", 293 | "text": "You are working in an Maui Blazor .NET Core project and might find these links useful.", 294 | "links": [ 295 | { 296 | "text": "Getting started with Maui Blazor.NET Core", 297 | "url": "https://docs.microsoft.com/en-us/shows/xamarinshow/introduction-to-net-maui-blazor--the-xamarin-show" 298 | }, 299 | { 300 | "text": "Getting started with .NET MAUI Project and Item Templates", 301 | "url": "https://marketplace.visualstudio.com/items?itemName=egvijayanand.maui-templates" 302 | }, 303 | { 304 | "text": "Razor tutorial", 305 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 306 | } 307 | ] 308 | }, 309 | { 310 | "capability": "WPF & DocFx.Console & Microsoft.Extensions.Logging", 311 | "capabilityExpression": "(WPF & CSharp) & (CPS & CrossPlatformExecutable) & (DocFx.Console & Microsoft.Extensions.Logging)", 312 | "capabilitiesFileName": "WPF_CSharp_CPS_DocFx_Logging", 313 | "text": "You are working in an WPF Application project using DocFx and Microsoft.Extensions.Logging and might find these links useful.", 314 | "links": [ 315 | { 316 | "text": "Getting started with WPF Application", 317 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 318 | }, 319 | { 320 | "text": "WPF tutorial", 321 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 322 | }, 323 | { 324 | "text": "DocFx tutorial", 325 | "url": "https://docs.microsoft.com/en-us/shows/on-net/intro-to-docfx" 326 | }, 327 | { 328 | "text": "Microsoft.Extensions.Logging tutorial", 329 | "url": "https://docs.microsoft.com/en-us/dotnet/core/extensions/logging?tabs=command-line" 330 | } 331 | ] 332 | }, 333 | { 334 | "capability": "WPF", 335 | "capabilityExpression": "(WPF & CSharp) & (CPS & CrossPlatformExecutable) & (!DocFx.Console & !Microsoft.Extensions.Logging)", 336 | "capabilitiesFileName": "WPF_CSharp_CPS", 337 | "text": "You are working in an WPF Application project and might find these links useful.", 338 | "links": [ 339 | { 340 | "text": "Getting started with WPF Application", 341 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 342 | }, 343 | { 344 | "text": "WPF tutorial", 345 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 346 | } 347 | ] 348 | }, 349 | { 350 | "capability": "WPFLibrary", 351 | "capabilityExpression": "(WPF & CSharp) & (CPS & !CrossPlatformExecutable)", 352 | "capabilitiesFileName": "WPFLibrary_CSharp_CPS", 353 | "text": "You are working in an WPF Library project and might find these links useful.", 354 | "links": [ 355 | { 356 | "text": "Getting started with WPF Library", 357 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 358 | }, 359 | { 360 | "text": "WPF library tutorial", 361 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 362 | } 363 | ] 364 | }, 365 | { 366 | "capability": "WindowsForms", 367 | "capabilityExpression": "(WindowsForms & CSharp) & (CPS & CrossPlatformExecutable)", 368 | "capabilitiesFileName": "WindowsForms_CSharp_CPS", 369 | "text": "You are working in an WindowsForms .NET Core project and might find these links useful.", 370 | "links": [ 371 | { 372 | "text": "Getting started with WindowsForms .NET Core", 373 | "url": "https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/6.0/application-bootstrap" 374 | }, 375 | { 376 | "text": "WindowsForms .NET Core tutorial", 377 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/create-csharp-winform-visual-studio?view=vs-2022" 378 | } 379 | ] 380 | }, 381 | { 382 | "capability": "WindowsForms", 383 | "capabilityExpression": "(WindowsForms & CSharp) & (CPS & !CrossPlatformExecutable)", 384 | "capabilitiesFileName": "WindowsForms_ClassLibrary_CSharp_CPS", 385 | "text": "You are working in an WindowsForms Class Library .NET Core project and might find these links useful.", 386 | "links": [ 387 | { 388 | "text": "Getting started with WindowsForms Class Library .NET Core", 389 | "url": "https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/6.0/application-bootstrap" 390 | }, 391 | { 392 | "text": "WindowsForms Class Library .NET Core tutorial", 393 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/create-csharp-winform-visual-studio?view=vs-2022" 394 | } 395 | ] 396 | }, 397 | { 398 | "capability": "WindowsXAML", 399 | "capabilityExpression": "(WindowsXAML & CSharp) & !CPS", 400 | "capabilitiesFileName": "Universal_Windows_Platform_CSharp", 401 | "text": "You are working in an UWP project and might find these links useful.", 402 | "links": [ 403 | { 404 | "text": "Getting started with UWP", 405 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 406 | }, 407 | { 408 | "text": "UWP tutorial", 409 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 410 | } 411 | ] 412 | }, 413 | { 414 | "capability": "WinUI3", 415 | "capabilityExpression": "(WinUI & CSharp) & (CPS & WapProj)", 416 | "capabilitiesFileName": "WinUI_WapProj_CSharp_CPS", 417 | "text": "You are working in an WinUI WapProj .Net Core project and might find these links useful.", 418 | "links": [ 419 | { 420 | "text": "Getting started with WinUI WapProj .Net Core", 421 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 422 | }, 423 | { 424 | "text": "WinUI WapProj .Net Core tutorial", 425 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 426 | } 427 | ] 428 | }, 429 | { 430 | "capability": "WinUI3", 431 | "capabilityExpression": "(WinUI & CSharp) & (CPS & Msix) & !WapProj", 432 | "capabilitiesFileName": "WinUI_App_Msix__CSharp_CPS", 433 | "text": "You are working in an WinUI Application Package Msix .Net Core project and might find these links useful.", 434 | "links": [ 435 | { 436 | "text": "Getting started with WinUI Application Package Msix .Net Core", 437 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 438 | }, 439 | { 440 | "text": "WinUI Application Package Msix .Net Core tutorial", 441 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 442 | } 443 | ] 444 | }, 445 | { 446 | "capability": "WinUI3ClassLibrary", 447 | "capabilityExpression": "(WinUI & CSharp) & (CPS & !WapProj)", 448 | "capabilitiesFileName": "WinUI_ClassLibrary_CSharp_CPS", 449 | "text": "You are working in an WinUI Class Library .Net Core project and might find these links useful.", 450 | "links": [ 451 | { 452 | "text": "Getting started with WinUI Class Library .Net Core", 453 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/" 454 | }, 455 | { 456 | "text": "WinUI Class Library .Net Core tutorial", 457 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/winui3/" 458 | } 459 | ] 460 | }, 461 | { 462 | "capability": "VSIX", 463 | "capabilityExpression": "(VSIX & CSharp) & !CPS", 464 | "capabilitiesFileName": "VSIX_CSharp", 465 | "text": "You are working in an Visual Studio Extensibility project and might find these links useful.", 466 | "links": [ 467 | { 468 | "text": "Getting started with Visual Studio Extensibility", 469 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/getting-started-with-the-vsix-project-template?view=vs-2022" 470 | }, 471 | { 472 | "text": "Visual Studio Extensibility tutorial", 473 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/extensibility-hello-world?view=vs-2022" 474 | } 475 | ] 476 | }, 477 | { 478 | "capability": "TestContainer", 479 | "capabilityExpression": "(TestContainer & CSharp) & CPS", 480 | "capabilitiesFileName": "NUnit_CSharp_CPS", 481 | "text": "You are working in an NUnit Test .NET Core project and might find these links useful.", 482 | "links": [ 483 | { 484 | "text": "Getting started with NUnit Test in .NET Core", 485 | "url": "https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-nunit" 486 | }, 487 | { 488 | "text": "NUnit Test .NET Core tutorial", 489 | "url": "https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices" 490 | } 491 | ] 492 | }, 493 | { 494 | "capability": "CSharp", 495 | "capabilityExpression": "(CSharp & CPS)", 496 | "capabilitiesFileName": "CSharp_CPS", 497 | "text": "You are working in an C# project and might find these links useful.", 498 | "links": [ 499 | { 500 | "text": "Getting started with C#", 501 | "url": "https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/" 502 | }, 503 | { 504 | "text": "C# tutorial", 505 | "url": "https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/" 506 | } 507 | ] 508 | } 509 | ] 510 | } 511 | ``` 512 | 513 | 514 | ### Projecttypes.json Schema: 515 | 516 | 1. projecttypes 517 | 518 | - capability = The user friendly capability name. 519 | 520 | - capabilityExpression = The capability expression uses the requirements in the link below to filter project capabilities included in selected project. 521 | [IVsBooleanSymbolExpressionEvaluator.EvaluateExpression(String, String) Method](https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.shell.interop.ivsbooleansymbolexpressionevaluator.evaluateexpression?redirectedfrom=MSDN&view=visualstudiosdk-2022#Microsoft_VisualStudio_Shell_Interop_IVsBooleanSymbolExpressionEvaluator_EvaluateExpression_System_String_System_String_) 522 | 523 | So if the capabilityExpression = 524 | ```csharp 525 | capabilityExpression = "(WPF & CSharp) & (CPS & CrossPlatformExecutable) & (!DocFx.Console & !Microsoft.Extensions.Logging)", 526 | ``` 527 | This means Display project type links if the project is: 528 | 529 | Is a CSharp and WPF application 530 | and is a (CPS Common Project System) Core and CrossPlatform Executable 531 | and does not have project capabilities DocFx.Console and does not have Microsoft.Extensions.Logging. 532 | 533 | This is important if you do not want project cababilities for custom WPF and CSharp project links to display twice. 534 | You can limited the project links for common and custom project capabilities used in the same project by using these filters. 535 | 536 | - capabilitiesFileName = This is the name of the file, If the Help Explorer Option is set to save the project capabilities to a local file. 537 | 538 | The local path can be changed in: Visual Studio Tools Options HelpExplorer General "Local File Path". 539 | 540 | > **Note: User must user rights to create files in the local path location entered.** 541 | 542 | - text = The friendly text to display to the user in the Help Explorer Tool Window. 543 | 544 | - links 545 | 546 | - text = The friendly text to display to the user for the URL link. 547 | 548 | - url = The URL of the web link to the help content related to the selected custom or built-in project type 549 | 550 | #### Example of filetypes.json file: 551 | 552 | ```json 553 | { 554 | "filetypes": [ 555 | { 556 | "name": "", 557 | "text": "No file loaded.", 558 | "links": [ 559 | { 560 | "text": "Getting started with Visual Studio", 561 | "url": "https://visualstudio.microsoft.com/vs/" 562 | }, 563 | { 564 | "text": "Visual Studio tips & tricks", 565 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 566 | } 567 | ] 568 | }, 569 | { 570 | "name": ".fs", 571 | "text": "You're editing a F# file. Here are some helpful links.", 572 | "links": [ 573 | { 574 | "text": "F# home page", 575 | "url": "https://dotnet.microsoft.com/languages/fsharp" 576 | }, 577 | { 578 | "text": "Visual Studio tips & tricks", 579 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 580 | } 581 | ] 582 | }, 583 | { 584 | "name": ".fsproj", 585 | "text": "You're editing a F# project file. Here are some helpful links.", 586 | "links": [ 587 | { 588 | "text": "F# project file home page", 589 | "url": "https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2022" 590 | }, 591 | { 592 | "text": "Visual Studio tips & tricks", 593 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 594 | } 595 | ] 596 | }, 597 | { 598 | "name": ".vb", 599 | "text": "You're editing a Visual Basic file. Here are some helpful links.", 600 | "links": [ 601 | { 602 | "text": "Visual home page", 603 | "url": "https://docs.microsoft.com/en-us/dotnet/visual-basic/?WT.mc_id=dotnet-35129-website" 604 | }, 605 | { 606 | "text": "Visual Studio tips & tricks", 607 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 608 | } 609 | ] 610 | }, 611 | { 612 | "name": ".vbproj", 613 | "text": "You're editing a Visual Basic project file. Here are some helpful links.", 614 | "links": [ 615 | { 616 | "text": "Visual Basic project file home page", 617 | "url": "https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2022" 618 | }, 619 | { 620 | "text": "Visual Studio tips & tricks", 621 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 622 | } 623 | ] 624 | }, 625 | { 626 | "name": ".cs", 627 | "text": "You're editing a C# file. Here are some helpful links.", 628 | "links": [ 629 | { 630 | "text": "C# home page", 631 | "url": "https://dotnet.microsoft.com/languages/csharp" 632 | }, 633 | { 634 | "text": "Visual Studio tips & tricks", 635 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 636 | } 637 | ] 638 | }, 639 | { 640 | "name": ".razor", 641 | "text": "You're editing a razor file. Here are some helpful links.", 642 | "links": [ 643 | { 644 | "text": "razor home page", 645 | "url": "https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-6.0&tabs=visual-studio" 646 | }, 647 | { 648 | "text": "Razor Tutorial", 649 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 650 | } 651 | ] 652 | }, 653 | { 654 | "name": ".csproj", 655 | "text": "You're editing a C# project file. Here are some helpful links.", 656 | "links": [ 657 | { 658 | "text": "C# project file home page", 659 | "url": "https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2022" 660 | }, 661 | { 662 | "text": "Visual Studio tips & tricks", 663 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 664 | } 665 | ] 666 | }, 667 | { 668 | "name": ".xaml", 669 | "text": "You're editing a xaml file. Here are some helpful links.", 670 | "links": [ 671 | { 672 | "text": "XAML overview", 673 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/xaml/?view=netdesktop-6.0" 674 | }, 675 | { 676 | "text": "Visual Studio tips & tricks", 677 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 678 | } 679 | ] 680 | }, 681 | { 682 | "name": ".cshtml", 683 | "text": "You're editing a HTML file. Here are some helpful links.", 684 | "links": [ 685 | { 686 | "text": "C# home page", 687 | "url": "https://dotnet.microsoft.com/languages/csharp" 688 | }, 689 | { 690 | "text": "Visual Studio tips & tricks", 691 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 692 | } 693 | ] 694 | }, 695 | { 696 | "name": ".css", 697 | "text": "You're editing a CSS file. Here are some helpful links.", 698 | "links": [ 699 | { 700 | "text": "CSS home page", 701 | "url": "https://dotnet.microsoft.com/languages/csharp" 702 | }, 703 | { 704 | "text": "Visual Studio tips & tricks", 705 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 706 | } 707 | ] 708 | }, 709 | { 710 | "name": ".json", 711 | "text": "You're editing a json file. Here are some helpful links.", 712 | "links": [ 713 | { 714 | "text": "Newtonsoft json home page", 715 | "url": "https://www.newtonsoft.com/json" 716 | }, 717 | { 718 | "text": "System.Text.Json home page", 719 | "url": "https://docs.microsoft.com/en-us/dotnet/api/system.text.json?view=net-6.0" 720 | }, 721 | { 722 | "text": "Visual Studio tips & tricks", 723 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 724 | } 725 | ] 726 | }, 727 | { 728 | "name": ".js", 729 | "text": "You're editing a javascript file. Here are some helpful links.", 730 | "links": [ 731 | { 732 | "text": ".js home page", 733 | "url": "https://dotnet.microsoft.com/languages/csharp" 734 | }, 735 | { 736 | "text": "Visual Studio tips & tricks", 737 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 738 | } 739 | ] 740 | }, 741 | { 742 | "name": ".appxmanifest", 743 | "text": "You're editing a .Net Maui file. Here are some helpful links.", 744 | "links": [ 745 | { 746 | "text": ".Net Maui home page", 747 | "url": "https://docs.microsoft.com/en-us/dotnet/maui/what-is-maui" 748 | }, 749 | { 750 | "text": "Visual Studio tips & tricks", 751 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 752 | } 753 | ] 754 | }, 755 | { 756 | "name": ".manifest", 757 | "text": "You're editing a manifest file. Here are some helpful links.", 758 | "links": [ 759 | { 760 | "text": "manifest home page", 761 | "url": "https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests" 762 | }, 763 | { 764 | "text": "Visual Studio tips & tricks", 765 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 766 | } 767 | ] 768 | }, 769 | { 770 | "name": ".xml", 771 | "text": "You're editing a xml file. Here are some helpful links.", 772 | "links": [ 773 | { 774 | "text": "xml home page", 775 | "url": "https://docs.microsoft.com/en-us/dotnet/standard/data/xml/" 776 | }, 777 | { 778 | "text": "Visual Studio tips & tricks", 779 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 780 | } 781 | ] 782 | }, 783 | { 784 | "name": ".svg", 785 | "text": "You're editing a svg file. Here are some helpful links.", 786 | "links": [ 787 | { 788 | "text": "svg home page", 789 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/ux-guidelines/images-and-icons-for-visual-studio?view=vs-2022" 790 | }, 791 | { 792 | "text": "Visual Studio tips & tricks", 793 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 794 | } 795 | ] 796 | }, 797 | { 798 | "name": ".ico", 799 | "text": "You're editing a ico file. Here are some helpful links.", 800 | "links": [ 801 | { 802 | "text": "ico home page", 803 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/ux-guidelines/images-and-icons-for-visual-studio?view=vs-2022" 804 | }, 805 | { 806 | "text": "Visual Studio tips & tricks", 807 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 808 | } 809 | ] 810 | }, 811 | { 812 | "name": ".png", 813 | "text": "You're editing a png file. Here are some helpful links.", 814 | "links": [ 815 | { 816 | "text": "png home page", 817 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/ux-guidelines/images-and-icons-for-visual-studio?view=vs-2022" 818 | }, 819 | { 820 | "text": "Visual Studio tips & tricks", 821 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 822 | } 823 | ] 824 | } 825 | ] 826 | } 827 | ``` 828 | 829 | ### Filetypes.json Schema: 830 | 831 | 1. Filetypes 832 | 833 | - Name = The user friendly file type (i.e. CSharp for .cs files) name. 834 | 835 | - text = The friendly text to display to the user in the Help Explorer Tool Window. 836 | 837 | - links 838 | 839 | - text = The friendly text to display to the user for the URL link. 840 | 841 | - url = The URL of the web link to the help content related to the selected file type 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | -------------------------------------------------------------------------------- /TutorialImages/ASP.Net.CoreInfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/ASP.Net.CoreInfo.png -------------------------------------------------------------------------------- /TutorialImages/AddASP.NET.CoreProject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/AddASP.NET.CoreProject.png -------------------------------------------------------------------------------- /TutorialImages/CSHtmlSelection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/CSHtmlSelection.png -------------------------------------------------------------------------------- /TutorialImages/CapabilitiesVersion2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/CapabilitiesVersion2.png -------------------------------------------------------------------------------- /TutorialImages/CreateProjectInfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/CreateProjectInfo.png -------------------------------------------------------------------------------- /TutorialImages/CreateProjectType.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/CreateProjectType.png -------------------------------------------------------------------------------- /TutorialImages/DisplayMultipleFileTypes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/DisplayMultipleFileTypes.png -------------------------------------------------------------------------------- /TutorialImages/DisplayMultipleProjectTypes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/DisplayMultipleProjectTypes.png -------------------------------------------------------------------------------- /TutorialImages/ExitVS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/ExitVS.png -------------------------------------------------------------------------------- /TutorialImages/HEOptionMProjectTypesOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HEOptionMProjectTypesOff.png -------------------------------------------------------------------------------- /TutorialImages/HEOptionsOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HEOptionsOff.png -------------------------------------------------------------------------------- /TutorialImages/HelpExplorerDefaultOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HelpExplorerDefaultOptions.png -------------------------------------------------------------------------------- /TutorialImages/HelpExplorerNoProjectLoaded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HelpExplorerNoProjectLoaded.png -------------------------------------------------------------------------------- /TutorialImages/HelpExplorerOpenFirstTime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HelpExplorerOpenFirstTime.png -------------------------------------------------------------------------------- /TutorialImages/HelpExplorerToolWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HelpExplorerToolWindow.png -------------------------------------------------------------------------------- /TutorialImages/HelpExplorerToolWindowToolbarButtons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HelpExplorerToolWindowToolbarButtons.png -------------------------------------------------------------------------------- /TutorialImages/HelpExplorerXamlLink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/HelpExplorerXamlLink.png -------------------------------------------------------------------------------- /TutorialImages/JsonSelection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/JsonSelection.png -------------------------------------------------------------------------------- /TutorialImages/MainWindows.xaml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/MainWindows.xaml.png -------------------------------------------------------------------------------- /TutorialImages/ProjectNameASP.NET.Core.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/ProjectNameASP.NET.Core.png -------------------------------------------------------------------------------- /TutorialImages/ProjectNameDialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/ProjectNameDialog.png -------------------------------------------------------------------------------- /TutorialImages/SaveProjectCapabilites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/SaveProjectCapabilites.png -------------------------------------------------------------------------------- /TutorialImages/SelectionChangeFromXamltoCSharp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/SelectionChangeFromXamltoCSharp.png -------------------------------------------------------------------------------- /TutorialImages/VSCreateProject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/VSCreateProject.png -------------------------------------------------------------------------------- /TutorialImages/VisualStudioBeforeHelpExplorerLoaded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/VisualStudioBeforeHelpExplorerLoaded.png -------------------------------------------------------------------------------- /TutorialImages/WPFAppWithDocFxLoggingAndZipExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/WPFAppWithDocFxLoggingAndZipExample.png -------------------------------------------------------------------------------- /TutorialImages/XamlSelection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/TutorialImages/XamlSelection.png -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2022 2 | 3 | install: 4 | - ps: (new-object Net.WebClient).DownloadString("https://raw.github.com/madskristensen/ExtensionScripts/master/AppVeyor/vsix.ps1") | iex 5 | 6 | before_build: 7 | - ps: Vsix-IncrementVsixVersion | Vsix-UpdateBuildVersion 8 | - ps: Vsix-TokenReplacement src\source.extension.cs 'Version = "([0-9\\.]+)"' 'Version = "{version}"' 9 | 10 | build_script: 11 | - nuget restore -Verbosity quiet 12 | - msbuild /p:configuration=Release /p:DeployExtension=false /p:ZipPackageCompressionLevel=normal /v:m 13 | 14 | test: off 15 | 16 | deploy_script: 17 | - ps: Vsix-PushArtifacts | Vsix-PublishToGallery 18 | -------------------------------------------------------------------------------- /src/Commands/CreateCapabilitesFileCommand.cs: -------------------------------------------------------------------------------- 1 | namespace HelpExplorer 2 | { 3 | [Command(PackageIds.CreateCapabilitiyFile)] 4 | internal sealed class CreateCapabilitesFileCommand : BaseCommand 5 | { 6 | protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) 7 | { 8 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 9 | ThreadHelper.JoinableTaskFactory.RunAsync(async () => 10 | { 11 | if (General.Instance.CreateCapabilitiesFile) 12 | { 13 | General.Instance.CreateCapabilitiesFile = false; 14 | await General.Instance.SaveAsync(); 15 | } 16 | else 17 | { 18 | General.Instance.CreateCapabilitiesFile = true; 19 | await General.Instance.SaveAsync(); 20 | } 21 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 22 | ToolWindowMessenger messenger = await Package.GetServiceAsync(); 23 | messenger.Send($"Changed Create Capabilites File Option to {General.Instance.CreateCapabilitiesFile}"); 24 | }).FireAndForget(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Commands/DisplayMultipleFileTypesCommand.cs: -------------------------------------------------------------------------------- 1 | namespace HelpExplorer.Commands 2 | { 3 | [Command(PackageIds.MultipleFileTypeDisplay)] 4 | internal sealed class DisplayMultipleFileTypesCommand : BaseCommand 5 | { 6 | protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) 7 | { 8 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 9 | ThreadHelper.JoinableTaskFactory.RunAsync(async () => 10 | { 11 | if (General.Instance.MultipleFilesOption) 12 | { 13 | General.Instance.MultipleFilesOption = false; 14 | await General.Instance.SaveAsync(); 15 | } 16 | else 17 | { 18 | General.Instance.MultipleFilesOption = true; 19 | await General.Instance.SaveAsync(); 20 | } 21 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 22 | ToolWindowMessenger messenger = await Package.GetServiceAsync(); 23 | messenger.Send("Refresh HelpExplorer File Links"); 24 | }).FireAndForget(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Commands/DisplayMultipleProjectTypesCommand.cs: -------------------------------------------------------------------------------- 1 | namespace HelpExplorer.Commands 2 | { 3 | [Command(PackageIds.MultipleProjectTypeDisplay)] 4 | internal sealed class DisplayMultipleProjectTypesCommand : BaseCommand 5 | { 6 | protected override async Task ExecuteAsync(OleMenuCmdEventArgs e) 7 | { 8 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 9 | ThreadHelper.JoinableTaskFactory.RunAsync(async () => 10 | { 11 | if (General.Instance.MultipleProjectsOption) 12 | { 13 | General.Instance.MultipleProjectsOption = false; 14 | await General.Instance.SaveAsync(); 15 | } 16 | else 17 | { 18 | General.Instance.MultipleProjectsOption = true; 19 | await General.Instance.SaveAsync(); 20 | } 21 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 22 | ToolWindowMessenger messenger = await Package.GetServiceAsync(); 23 | messenger.Send("Refresh HelpExplorer Project Links"); 24 | }).FireAndForget(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Commands/MyToolWindowCommand.cs: -------------------------------------------------------------------------------- 1 | namespace HelpExplorer 2 | { 3 | [Command(PackageIds.MyCommand)] 4 | internal sealed class MyToolWindowCommand : BaseCommand 5 | { 6 | protected override Task ExecuteAsync(OleMenuCmdEventArgs e) 7 | { 8 | return MyToolWindow.ShowAsync(); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/HelpExplorer.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 5 | latest 6 | 7 | 8 | 9 | Debug 10 | AnyCPU 11 | 2.0 12 | {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 13 | {5D2A5BB4-B3B6-4DAF-836F-5FF6584F975C} 14 | Library 15 | Properties 16 | HelpExplorer 17 | HelpExplorer 18 | v4.8 19 | true 20 | true 21 | true 22 | true 23 | false 24 | true 25 | true 26 | Program 27 | $(DevEnvDir)devenv.exe 28 | /rootsuffix Exp 29 | 30 | 31 | true 32 | full 33 | false 34 | bin\Debug\ 35 | DEBUG;TRACE 36 | prompt 37 | 4 38 | 39 | 40 | pdbonly 41 | true 42 | bin\Release\ 43 | TRACE 44 | prompt 45 | 4 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | True 59 | True 60 | source.extension.vsixmanifest 61 | 62 | 63 | 64 | True 65 | True 66 | VSCommandTable.vsct 67 | 68 | 69 | 70 | 71 | true 72 | 73 | 74 | Resources\LICENSE 75 | true 76 | 77 | 78 | true 79 | 80 | 81 | Designer 82 | VsixManifestGenerator 83 | source.extension.cs 84 | 85 | 86 | PreserveNewest 87 | true 88 | 89 | 90 | 91 | 92 | Menus.ctmenu 93 | VsctGenerator 94 | VSCommandTable.cs 95 | 96 | 97 | 98 | 99 | 100 | Designer 101 | MSBuild:Compile 102 | 103 | 104 | MyToolWindowControl.xaml 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 133 | -------------------------------------------------------------------------------- /src/HelpExplorerPackage.cs: -------------------------------------------------------------------------------- 1 | global using System; 2 | global using Community.VisualStudio.Toolkit; 3 | global using Microsoft.VisualStudio.Shell; 4 | global using Task = System.Threading.Tasks.Task; 5 | using System.Diagnostics; 6 | using System.Runtime.InteropServices; 7 | using System.Threading; 8 | using Microsoft.VisualStudio; 9 | 10 | namespace HelpExplorer 11 | { 12 | [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] 13 | [InstalledProductRegistration(Vsix.Name, Vsix.Description, Vsix.Version)] 14 | [ProvideToolWindow(typeof(MyToolWindow.Pane), Style = VsDockStyle.Tabbed, Window = WindowGuids.SolutionExplorer)] 15 | [ProvideToolWindowVisibility(typeof(MyToolWindow.Pane), VSConstants.UICONTEXT.SolutionHasSingleProject_string)] 16 | [ProvideToolWindowVisibility(typeof(MyToolWindow.Pane), VSConstants.UICONTEXT.SolutionHasMultipleProjects_string)] 17 | [ProvideToolWindowVisibility(typeof(MyToolWindow.Pane), VSConstants.UICONTEXT.NoSolution_string)] 18 | [ProvideToolWindowVisibility(typeof(MyToolWindow.Pane), VSConstants.UICONTEXT.EmptySolution_string)] 19 | [ProvideOptionPage(typeof(OptionsProvider.GeneralOptions), "HelpExplorer", "General", 0, 0, true)] 20 | [ProvideProfile(typeof(OptionsProvider.GeneralOptions), "HelpExplorer", "General", 0, 0, true)] 21 | [ProvideMenuResource("Menus.ctmenu", 1)] 22 | [ProvideService(typeof(ToolWindowMessenger), IsAsyncQueryable = true)] 23 | [Guid(PackageGuids.HelpExplorerString)] 24 | public sealed class HelpExplorerPackage : ToolkitPackage 25 | { 26 | protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) 27 | { 28 | AddService(typeof(ToolWindowMessenger), (_, _, _) => Task.FromResult(new ToolWindowMessenger())); 29 | await this.RegisterCommandsAsync(); 30 | this.RegisterToolWindows(); 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /src/Options/General.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Diagnostics; 3 | 4 | namespace HelpExplorer 5 | { 6 | internal partial class OptionsProvider 7 | { 8 | public class GeneralOptions : BaseOptionPage { } 9 | } 10 | public class General : BaseOptionModel 11 | { 12 | [Category("Display Multiple Types")] 13 | [DisplayName("Display Multiple Project Types")] 14 | [Description("Allows you to display multiple project types and links in the HelpExplorer Window or the first one found for your selected project.")] 15 | [DefaultValue(false)] 16 | public bool MultipleProjectsOption { get; set; } = false; 17 | 18 | [Category("Display Multiple Types")] 19 | [DisplayName("Display Multiple File Types")] 20 | [Description("Allows you to display multiple file types and links in the HelpExplorer Window or the first one found for your selected file.")] 21 | [DefaultValue(false)] 22 | public bool MultipleFilesOption { get; set; } = false; 23 | 24 | [Category("Capabilities")] 25 | [DisplayName("Enable Local file creation")] 26 | [Description("Allows you to enable or disable the export active project capabilities to a file. Then you can easily open and copy capabilities to the projecttypes.json file.")] 27 | [DefaultValue(true)] 28 | public bool CreateCapabilitiesFile { get; set; } = true; 29 | 30 | [Category("Capabilities")] 31 | [DisplayName("Local file path")] 32 | [Description("Allows you to export active project capabilities to a file. Then you can easily open and copy capabilities to the projecttypes.json file.")] 33 | [DefaultValue(@"C:\temp\Capabilities")] 34 | public string CapabilitiesFilePathOption { get; set; } = @"C:\temp\Capabilities"; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using HelpExplorer; 2 | 3 | using System.Reflection; 4 | using System.Runtime.InteropServices; 5 | 6 | [assembly: AssemblyTitle(Vsix.Name)] 7 | [assembly: AssemblyDescription(Vsix.Description)] 8 | [assembly: AssemblyConfiguration("")] 9 | [assembly: AssemblyCompany(Vsix.Author)] 10 | [assembly: AssemblyProduct(Vsix.Name)] 11 | [assembly: AssemblyCopyright(Vsix.Author)] 12 | [assembly: AssemblyTrademark("")] 13 | [assembly: AssemblyCulture("")] 14 | 15 | [assembly: ComVisible(false)] 16 | 17 | [assembly: AssemblyVersion(Vsix.Version)] 18 | [assembly: AssemblyFileVersion(Vsix.Version)] 19 | 20 | namespace System.Runtime.CompilerServices 21 | { 22 | public class IsExternalInit { } 23 | } -------------------------------------------------------------------------------- /src/Resources/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskristensen/HelpExplorer/34dd717d15cd0ad43ad471a6737c8d7912322b57/src/Resources/Icon.png -------------------------------------------------------------------------------- /src/Schema/FileTypeCollection.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Threading.Tasks; 3 | using Newtonsoft.Json; 4 | 5 | namespace HelpExplorer.Schema 6 | { 7 | public class FileTypeCollection 8 | { 9 | private FileTypeCollection() { } 10 | 11 | public FileType[] FileTypes { get; set; } 12 | 13 | public static async Task LoadAsync() 14 | { 15 | var dir = Path.GetDirectoryName(typeof(FileTypeCollection).Assembly.Location); 16 | var file = Path.Combine(dir, "schema", "filetypes.json"); 17 | 18 | using (var reader = new StreamReader(file)) 19 | { 20 | var json = await reader.ReadToEndAsync(); 21 | return JsonConvert.DeserializeObject(json); 22 | } 23 | } 24 | } 25 | 26 | public class FileType 27 | { 28 | public string Name { get; set; } 29 | public string Text { get; set; } 30 | public Link[] Links { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Schema/ProjectTypeCollection.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Threading.Tasks; 3 | using Newtonsoft.Json; 4 | 5 | namespace HelpExplorer.Schema 6 | { 7 | public class ProjectTypeCollection 8 | { 9 | private ProjectTypeCollection() { } 10 | 11 | public ProjectType[] ProjectTypes { get; set; } 12 | 13 | public static async Task LoadAsync() 14 | { 15 | var dir = Path.GetDirectoryName(typeof(ProjectTypeCollection).Assembly.Location); 16 | var file = Path.Combine(dir, "schema", "projecttypes.json"); 17 | 18 | using (var reader = new StreamReader(file)) 19 | { 20 | var json = await reader.ReadToEndAsync(); 21 | return JsonConvert.DeserializeObject(json); 22 | } 23 | } 24 | } 25 | 26 | public class ProjectType 27 | { 28 | public string Capability { get; set; } 29 | public string CapabilityExpression { get; set; } 30 | public string CapabilitiesFileName { get; set; } 31 | public string Text { get; set; } 32 | public Link[] Links { get; set; } 33 | } 34 | 35 | public class Link 36 | { 37 | public string Text { get; set; } 38 | public string Url { get; set; } 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/Schema/filetypes.json: -------------------------------------------------------------------------------- 1 | { 2 | "filetypes": [ 3 | { 4 | "name": "", 5 | "text": "No file loaded.", 6 | "links": [ 7 | { 8 | "text": "Getting started with Visual Studio", 9 | "url": "https://visualstudio.microsoft.com/vs/" 10 | }, 11 | { 12 | "text": "Visual Studio tips & tricks", 13 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 14 | } 15 | ] 16 | }, 17 | { 18 | "name": ".fs", 19 | "text": "You're editing a F# file. Here are some helpful links.", 20 | "links": [ 21 | { 22 | "text": "F# home page", 23 | "url": "https://dotnet.microsoft.com/languages/fsharp" 24 | }, 25 | { 26 | "text": "Visual Studio tips & tricks", 27 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 28 | } 29 | ] 30 | }, 31 | { 32 | "name": ".fsproj", 33 | "text": "You're editing a F# project file. Here are some helpful links.", 34 | "links": [ 35 | { 36 | "text": "F# project file home page", 37 | "url": "https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2022" 38 | }, 39 | { 40 | "text": "Visual Studio tips & tricks", 41 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 42 | } 43 | ] 44 | }, 45 | { 46 | "name": ".vb", 47 | "text": "You're editing a Visual Basic file. Here are some helpful links.", 48 | "links": [ 49 | { 50 | "text": "Visual home page", 51 | "url": "https://docs.microsoft.com/en-us/dotnet/visual-basic/?WT.mc_id=dotnet-35129-website" 52 | }, 53 | { 54 | "text": "Visual Studio tips & tricks", 55 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 56 | } 57 | ] 58 | }, 59 | { 60 | "name": ".vbproj", 61 | "text": "You're editing a Visual Basic project file. Here are some helpful links.", 62 | "links": [ 63 | { 64 | "text": "Visual Basic project file home page", 65 | "url": "https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2022" 66 | }, 67 | { 68 | "text": "Visual Studio tips & tricks", 69 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 70 | } 71 | ] 72 | }, 73 | { 74 | "name": ".cs", 75 | "text": "You're editing a C# file. Here are some helpful links.", 76 | "links": [ 77 | { 78 | "text": "C# home page", 79 | "url": "https://dotnet.microsoft.com/languages/csharp" 80 | }, 81 | { 82 | "text": "Visual Studio tips & tricks", 83 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 84 | } 85 | ] 86 | }, 87 | { 88 | "name": ".razor", 89 | "text": "You're editing a razor file. Here are some helpful links.", 90 | "links": [ 91 | { 92 | "text": "razor home page", 93 | "url": "https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-6.0&tabs=visual-studio" 94 | }, 95 | { 96 | "text": "Razor Tutorial", 97 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 98 | } 99 | ] 100 | }, 101 | { 102 | "name": ".csproj", 103 | "text": "You're editing a C# project file. Here are some helpful links.", 104 | "links": [ 105 | { 106 | "text": "C# project file home page", 107 | "url": "https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-project-file-schema-reference?view=vs-2022" 108 | }, 109 | { 110 | "text": "Visual Studio tips & tricks", 111 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 112 | } 113 | ] 114 | }, 115 | { 116 | "name": ".xaml", 117 | "text": "You're editing a xaml file. Here are some helpful links.", 118 | "links": [ 119 | { 120 | "text": "XAML overview", 121 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/xaml/?view=netdesktop-6.0" 122 | }, 123 | { 124 | "text": "Visual Studio tips & tricks", 125 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 126 | } 127 | ] 128 | }, 129 | { 130 | "name": ".cshtml", 131 | "text": "You're editing a HTML file. Here are some helpful links.", 132 | "links": [ 133 | { 134 | "text": "C# home page", 135 | "url": "https://dotnet.microsoft.com/languages/csharp" 136 | }, 137 | { 138 | "text": "Visual Studio tips & tricks", 139 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 140 | } 141 | ] 142 | }, 143 | { 144 | "name": ".css", 145 | "text": "You're editing a CSS file. Here are some helpful links.", 146 | "links": [ 147 | { 148 | "text": "CSS home page", 149 | "url": "https://dotnet.microsoft.com/languages/csharp" 150 | }, 151 | { 152 | "text": "Visual Studio tips & tricks", 153 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 154 | } 155 | ] 156 | }, 157 | { 158 | "name": ".json", 159 | "text": "You're editing a json file. Here are some helpful links.", 160 | "links": [ 161 | { 162 | "text": "Newtonsoft json home page", 163 | "url": "https://www.newtonsoft.com/json" 164 | }, 165 | { 166 | "text": "System.Text.Json home page", 167 | "url": "https://docs.microsoft.com/en-us/dotnet/api/system.text.json?view=net-6.0" 168 | }, 169 | { 170 | "text": "Visual Studio tips & tricks", 171 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 172 | } 173 | ] 174 | }, 175 | { 176 | "name": ".js", 177 | "text": "You're editing a javascript file. Here are some helpful links.", 178 | "links": [ 179 | { 180 | "text": ".js home page", 181 | "url": "https://dotnet.microsoft.com/languages/csharp" 182 | }, 183 | { 184 | "text": "Visual Studio tips & tricks", 185 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 186 | } 187 | ] 188 | }, 189 | { 190 | "name": ".appxmanifest", 191 | "text": "You're editing a .Net Maui file. Here are some helpful links.", 192 | "links": [ 193 | { 194 | "text": ".Net Maui home page", 195 | "url": "https://docs.microsoft.com/en-us/dotnet/maui/what-is-maui" 196 | }, 197 | { 198 | "text": "Visual Studio tips & tricks", 199 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 200 | } 201 | ] 202 | }, 203 | { 204 | "name": ".manifest", 205 | "text": "You're editing a manifest file. Here are some helpful links.", 206 | "links": [ 207 | { 208 | "text": "manifest home page", 209 | "url": "https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests" 210 | }, 211 | { 212 | "text": "Visual Studio tips & tricks", 213 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 214 | } 215 | ] 216 | }, 217 | { 218 | "name": ".xml", 219 | "text": "You're editing a xml file. Here are some helpful links.", 220 | "links": [ 221 | { 222 | "text": "xml home page", 223 | "url": "https://docs.microsoft.com/en-us/dotnet/standard/data/xml/" 224 | }, 225 | { 226 | "text": "Visual Studio tips & tricks", 227 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 228 | } 229 | ] 230 | }, 231 | { 232 | "name": ".svg", 233 | "text": "You're editing a svg file. Here are some helpful links.", 234 | "links": [ 235 | { 236 | "text": "svg home page", 237 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/ux-guidelines/images-and-icons-for-visual-studio?view=vs-2022" 238 | }, 239 | { 240 | "text": "Visual Studio tips & tricks", 241 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 242 | } 243 | ] 244 | }, 245 | { 246 | "name": ".ico", 247 | "text": "You're editing a ico file. Here are some helpful links.", 248 | "links": [ 249 | { 250 | "text": "ico home page", 251 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/ux-guidelines/images-and-icons-for-visual-studio?view=vs-2022" 252 | }, 253 | { 254 | "text": "Visual Studio tips & tricks", 255 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 256 | } 257 | ] 258 | }, 259 | { 260 | "name": ".png", 261 | "text": "You're editing a png file. Here are some helpful links.", 262 | "links": [ 263 | { 264 | "text": "png home page", 265 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/ux-guidelines/images-and-icons-for-visual-studio?view=vs-2022" 266 | }, 267 | { 268 | "text": "Visual Studio tips & tricks", 269 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 270 | } 271 | ] 272 | } 273 | ] 274 | } 275 | -------------------------------------------------------------------------------- /src/Schema/projecttypes.json: -------------------------------------------------------------------------------- 1 | { 2 | "projecttypes": [ 3 | { 4 | "capability": "", 5 | "capabilityExpression": "", 6 | "capabilitiesFileName": "", 7 | "text": "No project loaded.", 8 | "links": [ 9 | { 10 | "text": "Getting started with Visual Studio", 11 | "url": "https://visualstudio.microsoft.com/vs/" 12 | }, 13 | { 14 | "text": "Visual Studio tips & tricks", 15 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 16 | } 17 | ] 18 | }, 19 | { 20 | "capability": "Android", 21 | "capabilityExpression": "(Android & CSharp) & (CPS & AndroidApplication)", 22 | "capabilitiesFileName": "AndroidApp_CSharp_CPS", 23 | "text": "You are working in an Android Application .NET Core project and might find these links useful.", 24 | "links": [ 25 | { 26 | "text": "Getting started with Andriod Application .NET Core", 27 | "url": "https://devblogs.microsoft.com/dotnet/the-future-of-net-standard/" 28 | }, 29 | { 30 | "text": "Android Application .NET Core tutorial", 31 | "url": "https://nicksnettravels.builttoroam.com/android-net-6/" 32 | } 33 | ] 34 | }, 35 | { 36 | "capability": "Android", 37 | "capabilityExpression": "(Android & CSharp) & (CPS & !AndroidApplication)", 38 | "capabilitiesFileName": "AndroidLib_CSharp_CPS", 39 | "text": "You are working in an Android Class Library .NET Core project and might find these links useful.", 40 | "links": [ 41 | { 42 | "text": "Getting started with Andriod Class Library .NET Core", 43 | "url": "https://devblogs.microsoft.com/dotnet/announcing-net-6/" 44 | }, 45 | { 46 | "text": "Android Class Library .NET Core tutorial", 47 | "url": "https://nicksnettravels.builttoroam.com/android-net-6/" 48 | } 49 | ] 50 | }, 51 | { 52 | "capability": "AspNetCore", 53 | "capabilityExpression": "(AspNetCore & CSharp) & CPS", 54 | "capabilitiesFileName": "AspNetCore_CSharp_CPS", 55 | "text": "You are working in an ASP.NET Core project and might find these links useful.", 56 | "links": [ 57 | { 58 | "text": "Getting started with ASP.NET Core", 59 | "url": "https://dotnet.microsoft.com/apps/aspnet" 60 | }, 61 | { 62 | "text": "ASP.NET Core tutorial", 63 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 64 | } 65 | ] 66 | }, 67 | { 68 | "capability": "DotNetCoreWeb", 69 | "capabilityExpression": "(DotNetCoreWeb & CSharp) & CPS", 70 | "capabilitiesFileName": "DotNetCoreWeb_CSharp_CPS", 71 | "text": "You are working in an ASP.NET Core Web project and might find these links useful.", 72 | "links": [ 73 | { 74 | "text": "Getting started with ASP.NET Core Web", 75 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/quickstart-aspnet-core?view=vs-2022" 76 | }, 77 | { 78 | "text": "ASP.NET Core Web tutorial", 79 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-aspnet-core?view=vs-2022" 80 | } 81 | ] 82 | }, 83 | { 84 | "capability": "DotNetCoreRazor", 85 | "capabilityExpression": "(DotNetCoreRazor & CSharp) & CPS", 86 | "capabilitiesFileName": "DotNetCoreRazor_CSharp_CPS", 87 | "text": "You are working in an .NET Core Razor project and might find these links useful.", 88 | "links": [ 89 | { 90 | "text": "Getting started with .NET Core Razor", 91 | "url": "https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-6.0&tabs=visual-studio" 92 | }, 93 | { 94 | "text": ".NET Core Razor tutorial", 95 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-6.0&tabs=visual-studio" 96 | } 97 | ] 98 | }, 99 | { 100 | "capability": "AzureFunctions", 101 | "capabilityExpression": "(AzureFunctions & CSharp) & CPS", 102 | "capabilitiesFileName": "AzureFunctions_CSharp_CPS", 103 | "text": "You are working in an AzureFunctions .NET Core project and might find these links useful.", 104 | "links": [ 105 | { 106 | "text": "Getting started with AzureFunctions", 107 | "url": "https://docs.microsoft.com/en-us/azure/azure-functions/functions-versions?tabs=in-process%2Cv4&pivots=programming-language-csharp" 108 | }, 109 | { 110 | "text": "AzureFunctions tutorial", 111 | "url": "https://kontext.tech/column/cloud-azure/794/build-azure-functions-with-net-6" 112 | } 113 | ] 114 | }, 115 | { 116 | "capability": "TeamsFx", 117 | "capabilityExpression": "(TeamsFx & CSharp) & (CPS & CrossPlatformExecutable)", 118 | "capabilitiesFileName": "TeamsFx_CSharp_CPS", 119 | "text": "You are working in an Microsoft Teams .NET Core Application project and might find these links useful.", 120 | "links": [ 121 | { 122 | "text": "Getting started with Microsoft Teams .NET Core Application", 123 | "url": "https://docs.microsoft.com/en-us/microsoftteams/platform/toolkit/visual-studio-overview" 124 | }, 125 | { 126 | "text": "Microsoft Teams .NET Core Application tutorial", 127 | "url": "https://devblogs.microsoft.com/visualstudio/build-apps-for-microsoft-teams-with-net/" 128 | } 129 | ] 130 | }, 131 | { 132 | "capability": "MauiBlazor", 133 | "capabilityExpression": "(MauiBlazor & CSharp) & CPS", 134 | "capabilitiesFileName": "MauiBlazor_CSharp_CPS", 135 | "text": "You are working in an Maui Blazor .NET Core project and might find these links useful.", 136 | "links": [ 137 | { 138 | "text": "Getting started with Maui Blazor.NET Core", 139 | "url": "https://docs.microsoft.com/en-us/shows/xamarinshow/introduction-to-net-maui-blazor--the-xamarin-show" 140 | }, 141 | { 142 | "text": "Getting started with .NET MAUI Project and Item Templates", 143 | "url": "https://marketplace.visualstudio.com/items?itemName=egvijayanand.maui-templates" 144 | }, 145 | { 146 | "text": "Razor tutorial", 147 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 148 | } 149 | ] 150 | }, 151 | { 152 | "capability": "WPF & DocFx.Console & Microsoft.Extensions.Logging", 153 | "capabilityExpression": "(WPF & CSharp) & (CPS & CrossPlatformExecutable) & (DocFx.Console & Microsoft.Extensions.Logging)", 154 | "capabilitiesFileName": "WPF_CSharp_CPS_DocFx_Logging", 155 | "text": "You are working in an WPF Application project using DocFx and Microsoft.Extensions.Logging and might find these links useful.", 156 | "links": [ 157 | { 158 | "text": "Getting started with WPF Application", 159 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 160 | }, 161 | { 162 | "text": "WPF tutorial", 163 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 164 | }, 165 | { 166 | "text": "DocFx tutorial", 167 | "url": "https://docs.microsoft.com/en-us/shows/on-net/intro-to-docfx" 168 | }, 169 | { 170 | "text": "Microsoft.Extensions.Logging tutorial", 171 | "url": "https://docs.microsoft.com/en-us/dotnet/core/extensions/logging?tabs=command-line" 172 | } 173 | ] 174 | }, 175 | { 176 | "capability": "WPF", 177 | "capabilityExpression": "(WPF & CSharp) & (CPS & CrossPlatformExecutable) & (!DocFx.Console & !Microsoft.Extensions.Logging)", 178 | "capabilitiesFileName": "WPF_CSharp_CPS", 179 | "text": "You are working in an WPF Application project and might find these links useful.", 180 | "links": [ 181 | { 182 | "text": "Getting started with WPF Application", 183 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 184 | }, 185 | { 186 | "text": "WPF tutorial", 187 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 188 | } 189 | ] 190 | }, 191 | { 192 | "capability": "WPFLibrary", 193 | "capabilityExpression": "(WPF & CSharp) & (CPS & !CrossPlatformExecutable)", 194 | "capabilitiesFileName": "WPFLibrary_CSharp_CPS", 195 | "text": "You are working in an WPF Library project and might find these links useful.", 196 | "links": [ 197 | { 198 | "text": "Getting started with WPF Library", 199 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 200 | }, 201 | { 202 | "text": "WPF library tutorial", 203 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 204 | } 205 | ] 206 | }, 207 | { 208 | "capability": "WindowsForms", 209 | "capabilityExpression": "(WindowsForms & CSharp) & (CPS & CrossPlatformExecutable)", 210 | "capabilitiesFileName": "WindowsForms_CSharp_CPS", 211 | "text": "You are working in an WindowsForms .NET Core project and might find these links useful.", 212 | "links": [ 213 | { 214 | "text": "Getting started with WindowsForms .NET Core", 215 | "url": "https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/6.0/application-bootstrap" 216 | }, 217 | { 218 | "text": "WindowsForms .NET Core tutorial", 219 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/create-csharp-winform-visual-studio?view=vs-2022" 220 | } 221 | ] 222 | }, 223 | { 224 | "capability": "WindowsForms", 225 | "capabilityExpression": "(WindowsForms & CSharp) & (CPS & !CrossPlatformExecutable)", 226 | "capabilitiesFileName": "WindowsForms_ClassLibrary_CSharp_CPS", 227 | "text": "You are working in an WindowsForms Class Library .NET Core project and might find these links useful.", 228 | "links": [ 229 | { 230 | "text": "Getting started with WindowsForms Class Library .NET Core", 231 | "url": "https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/6.0/application-bootstrap" 232 | }, 233 | { 234 | "text": "WindowsForms Class Library .NET Core tutorial", 235 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/create-csharp-winform-visual-studio?view=vs-2022" 236 | } 237 | ] 238 | }, 239 | { 240 | "capability": "WindowsXAML", 241 | "capabilityExpression": "(WindowsXAML & CSharp) & !CPS", 242 | "capabilitiesFileName": "UWP_CSharp", 243 | "text": "You are working in an UWP project and might find these links useful.", 244 | "links": [ 245 | { 246 | "text": "Getting started with UWP", 247 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 248 | }, 249 | { 250 | "text": "UWP tutorial", 251 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 252 | } 253 | ] 254 | }, 255 | { 256 | "capability": "WindowsXAML", 257 | "capabilityExpression": "(WindowsXAML & CSharp) & (!CPS & Windows.Devices.Gpio)", 258 | "capabilitiesFileName": "UWP_CSharp_Windows.Devices.Gpio", 259 | "text": "You are working in an UWP project supporting Windows.Devices.GPIO and might find these links useful.", 260 | "links": [ 261 | { 262 | "text": "Getting started with Windows.Devices.GPIO Application", 263 | "url": "https://github.com/Microsoft/Windows-universal-samples/tree/main/Samples/IoT-GPIO" 264 | }, 265 | { 266 | "text": "Windows.Devices.Gpio Namespace", 267 | "url": "https://docs.microsoft.com/en-us/uwp/api/windows.devices.gpio?view=winrt-22000" 268 | }, 269 | { 270 | "text": "Getting started with UWP", 271 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 272 | }, 273 | { 274 | "text": "UWP tutorial", 275 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 276 | } 277 | ] 278 | }, 279 | { 280 | "capability": "WinUI3", 281 | "capabilityExpression": "(WinUI & CSharp) & (CPS & WapProj) & (WindowsAppSDK & Windows.Devices.Gpio)", 282 | "capabilitiesFileName": "WinUI3_App_Msix_CSharp_CPS_GPIO", 283 | "text": "You are working in an WinUI Application Package Msix .Net Core project supporting Windows.Devices.GPIO and might find these links useful.", 284 | "links": [ 285 | { 286 | "text": "Getting started with Windows.Devices.GPIO Application", 287 | "url": "https://github.com/Microsoft/Windows-universal-samples/tree/main/Samples/IoT-GPIO" 288 | }, 289 | { 290 | "text": "Windows.Devices.Gpio Namespace", 291 | "url": "https://docs.microsoft.com/en-us/uwp/api/windows.devices.gpio?view=winrt-22000" 292 | }, 293 | { 294 | "text": "Getting started with WinUI Application Package Msix .Net Core", 295 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 296 | }, 297 | { 298 | "text": "WinUI Application Package Msix .Net Core tutorial", 299 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 300 | } 301 | ] 302 | }, 303 | { 304 | "capability": "WinUI3", 305 | "capabilityExpression": "(WinUI & CSharp) & (CPS & WapProj) & WindowsAppSDK", 306 | "capabilitiesFileName": "WinUI3_WapProj_CSharp_CPS", 307 | "text": "You are working in an WinUI WapProj .Net Core project and might find these links useful.", 308 | "links": [ 309 | { 310 | "text": "Getting started with WinUI WapProj .Net Core", 311 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 312 | }, 313 | { 314 | "text": "WinUI WapProj .Net Core tutorial", 315 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 316 | } 317 | ] 318 | }, 319 | { 320 | "capability": "WinUI3", 321 | "capabilityExpression": "(WinUI & CSharp) & (CPS & Msix) & (!WapProj & WindowsAppSDK)", 322 | "capabilitiesFileName": "WinUI3_App_Msix_CSharp_CPS", 323 | "text": "You are working in an WinUI Application Package Msix .Net Core project and might find these links useful.", 324 | "links": [ 325 | { 326 | "text": "Getting started with WinUI Application Package Msix .Net Core", 327 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 328 | }, 329 | { 330 | "text": "WinUI Application Package Msix .Net Core tutorial", 331 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 332 | } 333 | ] 334 | }, 335 | { 336 | "capability": "WinUI3ClassLibrary", 337 | "capabilityExpression": "(WinUI & CSharp) & (CPS & !WapProj) & (WindowsAppSDK & Windows.Devices.Gpio)", 338 | "capabilitiesFileName": "WinUI3_ClassLibrary_CSharp_CPS_GPIO", 339 | "text": "You are working in an WinUI Class Library .Net Core project supporting Windows.Devices.GPIO and might find these links useful.", 340 | "links": [ 341 | { 342 | "text": "Getting started with Windows.Devices.GPIO Application", 343 | "url": "https://github.com/Microsoft/Windows-universal-samples/tree/main/Samples/IoT-GPIO" 344 | }, 345 | { 346 | "text": "Windows.Devices.Gpio Namespace", 347 | "url": "https://docs.microsoft.com/en-us/uwp/api/windows.devices.gpio?view=winrt-22000" 348 | }, 349 | { 350 | "text": "Getting started with WinUI Class Library .Net Core", 351 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/" 352 | }, 353 | { 354 | "text": "WinUI Class Library .Net Core tutorial", 355 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/winui3/" 356 | } 357 | ] 358 | }, 359 | { 360 | "capability": "WinUI3ClassLibrary", 361 | "capabilityExpression": "(WinUI & CSharp) & (CPS & !WapProj) & WindowsAppSDK", 362 | "capabilitiesFileName": "WinUI3_ClassLibrary_CSharp_CPS", 363 | "text": "You are working in an WinUI Class Library .Net Core project and might find these links useful.", 364 | "links": [ 365 | { 366 | "text": "Getting started with WinUI Class Library .Net Core", 367 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/" 368 | }, 369 | { 370 | "text": "WinUI Class Library .Net Core tutorial", 371 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/winui3/" 372 | } 373 | ] 374 | }, 375 | { 376 | "capability": "VSIX", 377 | "capabilityExpression": "(VSIX & CSharp) & !CPS", 378 | "capabilitiesFileName": "VSIX_CSharp", 379 | "text": "You are working in an Visual Studio Extensibility project and might find these links useful.", 380 | "links": [ 381 | { 382 | "text": "Getting started with Visual Studio Extensibility", 383 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/getting-started-with-the-vsix-project-template?view=vs-2022" 384 | }, 385 | { 386 | "text": "Visual Studio Extensibility tutorial", 387 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/extensibility-hello-world?view=vs-2022" 388 | } 389 | ] 390 | }, 391 | { 392 | "capability": "TestContainer", 393 | "capabilityExpression": "(TestContainer & CSharp) & CPS", 394 | "capabilitiesFileName": "NUnit_CSharp_CPS", 395 | "text": "You are working in an NUnit Test .NET Core project and might find these links useful.", 396 | "links": [ 397 | { 398 | "text": "Getting started with NUnit Test in .NET Core", 399 | "url": "https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-nunit" 400 | }, 401 | { 402 | "text": "NUnit Test .NET Core tutorial", 403 | "url": "https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices" 404 | } 405 | ] 406 | }, 407 | { 408 | "capability": "CSharp", 409 | "capabilityExpression": "(CSharp & CPS)", 410 | "capabilitiesFileName": "CSharp_CPS", 411 | "text": "You are working in an C# project and might find these links useful.", 412 | "links": [ 413 | { 414 | "text": "Getting started with C#", 415 | "url": "https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/" 416 | }, 417 | { 418 | "text": "C# tutorial", 419 | "url": "https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/" 420 | } 421 | ] 422 | } 423 | ] 424 | } 425 | -------------------------------------------------------------------------------- /src/Schema/projecttypes.json.txt: -------------------------------------------------------------------------------- 1 | { 2 | "projecttypes": [ 3 | { 4 | "capability": "", 5 | "capabilityExpression": "", 6 | "capabilitiesFileName": "", 7 | "text": "No project loaded.", 8 | "links": [ 9 | { 10 | "text": "Getting started with Visual Studio", 11 | "url": "https://visualstudio.microsoft.com/vs/" 12 | }, 13 | { 14 | "text": "Visual Studio tips & tricks", 15 | "url": "https://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2022-Launch-Event/Tips-and-Tricks-Optimizing-build-performance" 16 | } 17 | ] 18 | }, 19 | { 20 | "capability": "AspNetCore", 21 | "capabilityExpression": "(AspNetCore & CSharp) & CPS", 22 | "capabilitiesFileName": "AspNetCore_CSharp_CPS", 23 | "text": "You are working in an ASP.NET Core project and might find these links useful.", 24 | "links": [ 25 | { 26 | "text": "Getting started with ASP.NET Core", 27 | "url": "https://dotnet.microsoft.com/apps/aspnet" 28 | }, 29 | { 30 | "text": "ASP.NET Core tutorial", 31 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 32 | } 33 | ] 34 | }, 35 | { 36 | "capability": "DotNetCoreWeb", 37 | "capabilityExpression": "(DotNetCoreWeb & CSharp) & CPS", 38 | "capabilitiesFileName": "DotNetCoreWeb_CSharp_CPS", 39 | "text": "You are working in an ASP.NET Core Web project and might find these links useful.", 40 | "links": [ 41 | { 42 | "text": "Getting started with ASP.NET Core Web", 43 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/quickstart-aspnet-core?view=vs-2022" 44 | }, 45 | { 46 | "text": "ASP.NET Core Web tutorial", 47 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-aspnet-core?view=vs-2022" 48 | } 49 | ] 50 | }, 51 | { 52 | "capability": "MauiBlazor", 53 | "capabilityExpression": "(MauiBlazor & CSharp) & CPS", 54 | "capabilitiesFileName": "MauiBlazor_CSharp_CPS", 55 | "text": "You are working in an Maui Blazor .NET Core project and might find these links useful.", 56 | "links": [ 57 | { 58 | "text": "Getting started with Maui Blazor.NET Core", 59 | "url": "https://docs.microsoft.com/en-us/shows/xamarinshow/introduction-to-net-maui-blazor--the-xamarin-show" 60 | }, 61 | { 62 | "text": "Getting started with .NET MAUI Project and Item Templates", 63 | "url": "https://marketplace.visualstudio.com/items?itemName=egvijayanand.maui-templates" 64 | }, 65 | { 66 | "text": "Razor tutorial", 67 | "url": "https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0" 68 | } 69 | ] 70 | }, 71 | { 72 | "capability": "WPF", 73 | "capabilityExpression": "(WPF & CSharp) & (CPS & CrossPlatformExecutable)", 74 | "capabilitiesFileName": "WPF_CSharp_CPS", 75 | "text": "You are working in an WPF Application project and might find these links useful.", 76 | "links": [ 77 | { 78 | "text": "Getting started with WPF Application", 79 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 80 | }, 81 | { 82 | "text": "WPF tutorial", 83 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 84 | } 85 | ] 86 | }, 87 | { 88 | "capability": "WPFLibrary", 89 | "capabilityExpression": "(WPF & CSharp) & (CPS & !CrossPlatformExecutable)", 90 | "capabilitiesFileName": "WPFLibrary_CSharp_CPS", 91 | "text": "You are working in an WPF Library project and might find these links useful.", 92 | "links": [ 93 | { 94 | "text": "Getting started with WPF Library", 95 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/overview/?view=netdesktop-6.0" 96 | }, 97 | { 98 | "text": "WPF library tutorial", 99 | "url": "https://docs.microsoft.com/en-us/dotnet/desktop/wpf/get-started/create-app-visual-studio?view=netdesktop-6.0" 100 | } 101 | ] 102 | }, 103 | { 104 | "capability": "WindowsForms", 105 | "capabilityExpression": "(WindowsForms & CSharp) & (CPS & CrossPlatformExecutable)", 106 | "capabilitiesFileName": "WindowsForms_CSharp_CPS", 107 | "text": "You are working in an WindowsForms .NET Core project and might find these links useful.", 108 | "links": [ 109 | { 110 | "text": "Getting started with WindowsForms .NET Core", 111 | "url": "https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/6.0/application-bootstrap" 112 | }, 113 | { 114 | "text": "WindowsForms .NET Core tutorial", 115 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/create-csharp-winform-visual-studio?view=vs-2022" 116 | } 117 | ] 118 | }, 119 | { 120 | "capability": "WindowsForms", 121 | "capabilityExpression": "(WindowsForms & CSharp) & (CPS & !CrossPlatformExecutable)", 122 | "capabilitiesFileName": "WindowsForms_ClassLibrary_CSharp_CPS", 123 | "text": "You are working in an WindowsForms Class Library .NET Core project and might find these links useful.", 124 | "links": [ 125 | { 126 | "text": "Getting started with WindowsForms Class Library .NET Core", 127 | "url": "https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/6.0/application-bootstrap" 128 | }, 129 | { 130 | "text": "WindowsForms Class Library .NET Core tutorial", 131 | "url": "https://docs.microsoft.com/en-us/visualstudio/ide/create-csharp-winform-visual-studio?view=vs-2022" 132 | } 133 | ] 134 | }, 135 | { 136 | "capability": "WindowsXAML", 137 | "capabilityExpression": "(WindowsXAML & CSharp) & !CPS", 138 | "capabilitiesFileName": "Universal_Windows_Platform_CSharp", 139 | "text": "You are working in an UWP project and might find these links useful.", 140 | "links": [ 141 | { 142 | "text": "Getting started with UWP", 143 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 144 | }, 145 | { 146 | "text": "UWP tutorial", 147 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 148 | } 149 | ] 150 | }, 151 | { 152 | "capability": "WinUI3", 153 | "capabilityExpression": "(WinUI & CSharp) & (CPS & WapProj)", 154 | "capabilitiesFileName": "WinUI_WapProj_CSharp_CPS", 155 | "text": "You are working in an WinUI WapProj .Net Core project and might find these links useful.", 156 | "links": [ 157 | { 158 | "text": "Getting started with WinUI WapProj .Net Core", 159 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 160 | }, 161 | { 162 | "text": "WinUI WapProj .Net Core tutorial", 163 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 164 | } 165 | ] 166 | }, 167 | { 168 | "capability": "WinUI3", 169 | "capabilityExpression": "(WinUI & CSharp) & (CPS & Msix) & !WapProj", 170 | "capabilitiesFileName": "WinUI_App_Msix__CSharp_CPS", 171 | "text": "You are working in an WinUI Application Package Msix .Net Core project and might find these links useful.", 172 | "links": [ 173 | { 174 | "text": "Getting started with WinUI Application Package Msix .Net Core", 175 | "url": "https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide" 176 | }, 177 | { 178 | "text": "WinUI Application Package Msix .Net Core tutorial", 179 | "url": "https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-uwp?view=vs-2022" 180 | } 181 | ] 182 | }, 183 | { 184 | "capability": "WinUI3ClassLibrary", 185 | "capabilityExpression": "(WinUI & CSharp) & (CPS & !WapProj)", 186 | "capabilitiesFileName": "WinUI_ClassLibrary_CSharp_CPS", 187 | "text": "You are working in an WinUI Class Library .Net Core project and might find these links useful.", 188 | "links": [ 189 | { 190 | "text": "Getting started with WinUI Class Library .Net Core", 191 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/" 192 | }, 193 | { 194 | "text": "WinUI Class Library .Net Core tutorial", 195 | "url": "https://docs.microsoft.com/en-us/windows/apps/winui/winui3/" 196 | } 197 | ] 198 | }, 199 | { 200 | "capability": "VSIX", 201 | "capabilityExpression": "(VSIX & CSharp) & !CPS", 202 | "capabilitiesFileName": "VSIX_CSharp", 203 | "text": "You are working in an Visual Studio Extensibility project and might find these links useful.", 204 | "links": [ 205 | { 206 | "text": "Getting started with Visual Studio Extensibility", 207 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/getting-started-with-the-vsix-project-template?view=vs-2022" 208 | }, 209 | { 210 | "text": "Visual Studio Extensibility tutorial", 211 | "url": "https://docs.microsoft.com/en-us/visualstudio/extensibility/extensibility-hello-world?view=vs-2022" 212 | } 213 | ] 214 | }, 215 | { 216 | "capability": "TestContainer", 217 | "capabilityExpression": "(TestContainer & CSharp) & CPS", 218 | "capabilitiesFileName": "NUnit_CSharp_CPS", 219 | "text": "You are working in an NUnit Test .NET Core project and might find these links useful.", 220 | "links": [ 221 | { 222 | "text": "Getting started with NUnit Test in .NET Core", 223 | "url": "https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-nunit" 224 | }, 225 | { 226 | "text": "NUnit Test .NET Core tutorial", 227 | "url": "https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices" 228 | } 229 | ] 230 | }, 231 | { 232 | "capability": "CSharp", 233 | "capabilityExpression": "(CSharp & CPS)", 234 | "capabilitiesFileName": "CSharp_CPS", 235 | "text": "You are working in an C# project and might find these links useful.", 236 | "links": [ 237 | { 238 | "text": "Getting started with C#", 239 | "url": "https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/" 240 | }, 241 | { 242 | "text": "C# tutorial", 243 | "url": "https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/tutorials/" 244 | } 245 | ] 246 | } 247 | ] 248 | } 249 | -------------------------------------------------------------------------------- /src/ToolWindowMessenger.cs: -------------------------------------------------------------------------------- 1 | namespace HelpExplorer 2 | { 3 | public class ToolWindowMessenger 4 | { 5 | public void Send(string message) 6 | { 7 | // The tooolbar button will call this method. 8 | // The tool window has added an event handler 9 | MessageReceived?.Invoke(this, message); 10 | } 11 | 12 | public event EventHandler MessageReceived; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/ToolWindows/MyToolWindow.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.Design; 2 | using System.Runtime.InteropServices; 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using System.Windows; 6 | using HelpExplorer.Schema; 7 | using Microsoft.VisualStudio.Imaging; 8 | 9 | namespace HelpExplorer 10 | { 11 | public class MyToolWindow : BaseToolWindow 12 | { 13 | public override string GetTitle(int toolWindowId) => Vsix.Name; 14 | 15 | public override Type PaneType => typeof(Pane); 16 | 17 | public override async Task CreateAsync(int toolWindowId, CancellationToken cancellationToken) 18 | { 19 | ProjectTypeCollection projectTypes = await ProjectTypeCollection.LoadAsync(); 20 | FileTypeCollection fileTypes = await FileTypeCollection.LoadAsync(); 21 | Project project = await VS.Solutions.GetActiveProjectAsync(); 22 | ToolWindowMessenger toolWindowMessenger = await Package.GetServiceAsync(); 23 | return new MyToolWindowControl(projectTypes, fileTypes, project, toolWindowMessenger); 24 | } 25 | 26 | [Guid("1948a5b4-cb3b-42c5-848c-9f1bb6167caf")] 27 | internal class Pane : ToolWindowPane 28 | { 29 | public Pane() 30 | { 31 | BitmapImageMoniker = KnownMonikers.ToolWindow; 32 | ToolBar = new CommandID(PackageGuids.HelpExplorer, PackageIds.TWindowToolbar); 33 | } 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/ToolWindows/MyToolWindowControl.xaml: -------------------------------------------------------------------------------- 1 |  16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/ToolWindows/MyToolWindowControl.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Threading; 3 | using System.Windows; 4 | using System.Windows.Controls; 5 | using System.Windows.Documents; 6 | using System.Windows.Navigation; 7 | using System.Windows.Shapes; 8 | using HelpExplorer.Schema; 9 | using Microsoft.Internal.VisualStudio.PlatformUI; 10 | using Microsoft.VisualStudio.Shell.Interop; 11 | using Microsoft.VisualStudio.Utilities; 12 | using System.Collections; 13 | using System.Collections.Generic; 14 | using System.Diagnostics; 15 | using System.Windows.Controls.Primitives; 16 | using Microsoft.Build.Framework.XamlTypes; 17 | using static System.Net.Mime.MediaTypeNames; 18 | 19 | namespace HelpExplorer 20 | { 21 | public partial class MyToolWindowControl : UserControl 22 | { 23 | private readonly ProjectTypeCollection _projectTypes; 24 | private readonly FileTypeCollection _fileTypes; 25 | public IVsHierarchy Hierarchy = null; 26 | public ToolWindowMessenger ToolWindowMessenger = null; 27 | public string CapabilityValues = null; 28 | public string fileExtension = null; 29 | public Project _activeProject; 30 | public string _activeFile; 31 | 32 | public MyToolWindowControl(ProjectTypeCollection projectTypes, FileTypeCollection fileTypes, Project activeProject, ToolWindowMessenger toolWindowMessenger) 33 | { 34 | ThreadHelper.ThrowIfNotOnUIThread(); 35 | 36 | _projectTypes = projectTypes; 37 | _fileTypes = fileTypes; 38 | _activeProject = activeProject; 39 | InitializeComponent(); 40 | if (toolWindowMessenger == null) 41 | { 42 | toolWindowMessenger = new ToolWindowMessenger(); 43 | } 44 | ToolWindowMessenger = toolWindowMessenger; 45 | toolWindowMessenger.MessageReceived += OnMessageReceived; 46 | GetActiveProjectCapabilities(activeProject); 47 | ThreadHelper.JoinableTaskFactory.RunAsync(async () => 48 | { 49 | await UpdateProjectsAsync(Hierarchy); 50 | }).FireAndForget(); 51 | 52 | VS.Events.SelectionEvents.SelectionChanged += SelectionChanged; 53 | VS.Events.DocumentEvents.BeforeDocumentWindowShow += BeforeDocumentWindowShow; 54 | VS.Events.SolutionEvents.OnAfterCloseSolution += OnAfterCloseSolution; 55 | } 56 | 57 | private void BeforeDocumentWindowShow(DocumentView docView) 58 | { 59 | ThreadHelper.JoinableTaskFactory.RunAsync(async () => 60 | { 61 | if (docView?.Document?.FilePath != _activeFile) 62 | { 63 | _activeFile = docView?.Document?.FilePath; 64 | var ext = System.IO.Path.GetExtension(docView?.Document?.FilePath); 65 | //await UpdateFilesAsync(docView.TextBuffer.ContentType, ext); 66 | fileExtension = ext; 67 | await UpdateFilesAsync(ext); 68 | } 69 | 70 | }).FireAndForget(); 71 | } 72 | 73 | private void OnMessageReceived(object sender, string e) 74 | { 75 | ThreadHelper.JoinableTaskFactory.RunAsync(async () => 76 | { 77 | switch (e) 78 | { 79 | case "Refresh HelpExplorer Project Links": 80 | await UpdateProjectsAsync(Hierarchy); 81 | break; 82 | case "Refresh HelpExplorer File Links": 83 | await UpdateFilesAsync(fileExtension); 84 | break; 85 | default: 86 | break; 87 | } 88 | }).FireAndForget(); 89 | 90 | } 91 | private void OnAfterCloseSolution() 92 | { 93 | ThreadHelper.ThrowIfNotOnUIThread(); 94 | SelectionChanged(null, null); 95 | } 96 | 97 | private void GetActiveProjectCapabilities(Project activeProject) 98 | { 99 | ThreadHelper.ThrowIfNotOnUIThread(); 100 | if (activeProject != null) 101 | { 102 | activeProject.GetItemInfo(out IVsHierarchy hierarchy, out var itemId, out IVsHierarchyItem item); 103 | HierarchyUtilities.TryGetHierarchyProperty(hierarchy, itemId, (int)__VSHPROPID5.VSHPROPID_ProjectCapabilities, out var capabilityValues); 104 | Hierarchy = hierarchy; 105 | CapabilityValues = capabilityValues; 106 | } 107 | } 108 | private void WriteCapabilitiesToFile(string capability, string fileName) 109 | { 110 | //This method only runs in debug mode 111 | var capabilities = (capability ?? "").Split(' '); 112 | var dir = General.Instance.CapabilitiesFilePathOption; 113 | var file = System.IO.Path.Combine(dir, $"{fileName}_Capabilities.txt"); 114 | if (!System.IO.Directory.Exists(dir)) 115 | { 116 | System.IO.Directory.CreateDirectory(dir); 117 | } 118 | if (System.IO.File.Exists(file)) 119 | { 120 | System.IO.File.Delete(file); 121 | System.IO.File.WriteAllLines(file, capabilities); 122 | } 123 | else 124 | { 125 | System.IO.File.WriteAllLines(file, capabilities); 126 | } 127 | } 128 | 129 | private void SelectionChanged(object sender, Community.VisualStudio.Toolkit.SelectionChangedEventArgs e) 130 | { 131 | ThreadHelper.JoinableTaskFactory.RunAsync(async () => 132 | { 133 | Project project = await VS.Solutions.GetActiveProjectAsync(); 134 | 135 | if (project != _activeProject) 136 | { 137 | _activeProject = project; 138 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 139 | GetActiveProjectCapabilities(project); 140 | await UpdateProjectsAsync(Hierarchy); 141 | } 142 | }).FireAndForget(); 143 | } 144 | 145 | private async Task UpdateFilesAsync(string fileExtension) 146 | { 147 | if (fileExtension == null) 148 | { 149 | return; 150 | } 151 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 152 | 153 | FileTypes.Children.Clear(); 154 | foreach (FileType ft in _fileTypes.FileTypes.Where(f => fileExtension.Equals(f.Name))) 155 | { 156 | var text = new TextBlock { Text = ft.Text, TextWrapping = TextWrapping.Wrap, Margin = new Thickness(0, 0, 0, 5) }; 157 | FileTypes.Children.Add(text); 158 | 159 | foreach (Link link in ft.Links) 160 | { 161 | var h = new Hyperlink 162 | { 163 | NavigateUri = new Uri(link.Url) 164 | }; 165 | 166 | h.RequestNavigate += OnRequestNavigate; 167 | FileTypes.MaxWidth = ft.Text.ToString().Length + 200; 168 | h.Inlines.Add(link.Text); 169 | var textBlock = new TextBlock { Text = "- ", Margin = new Thickness(15, 0, 0, 0) }; 170 | textBlock.Inlines.Add(h); 171 | 172 | FileTypes.Children.Add(textBlock); 173 | } 174 | 175 | var line = new Line { Margin = new Thickness(0, 0, 0, 20) }; 176 | FileTypes.Children.Add(line); 177 | // read settings 178 | if (General.Instance.MultipleFilesOption) 179 | { 180 | continue; 181 | } 182 | break; 183 | } 184 | } 185 | 186 | public async Task UpdateProjectsAsync(IVsHierarchy hierarchy) 187 | { 188 | ProjectTypes.Children.Clear(); 189 | await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); 190 | 191 | foreach (ProjectType pt in _projectTypes.ProjectTypes) 192 | { 193 | var capability = pt.CapabilityExpression; 194 | 195 | if ((_activeProject == null && !string.IsNullOrEmpty(capability)) || _activeProject != null && string.IsNullOrEmpty(capability)) 196 | { 197 | continue; 198 | } 199 | else if (!string.IsNullOrEmpty(capability) && hierarchy?.IsCapabilityMatch(capability) == false) 200 | { 201 | continue; 202 | } 203 | if (General.Instance.CreateCapabilitiesFile) 204 | { 205 | //The following capabilities line allows you to check the projects capabilities so they can be added to projectTypes.json. 206 | if (!string.IsNullOrEmpty(CapabilityValues) && !string.IsNullOrEmpty(pt.CapabilitiesFileName)) 207 | { 208 | WriteCapabilitiesToFile(CapabilityValues, pt.CapabilitiesFileName); 209 | } 210 | } 211 | 212 | var text = new TextBlock { Text = pt.Text, TextWrapping = TextWrapping.Wrap, Margin = new Thickness(0, 0, 0, 5) }; 213 | ProjectTypes.Children.Add(text); 214 | 215 | foreach (Link link in pt.Links) 216 | { 217 | var h = new Hyperlink 218 | { 219 | NavigateUri = new Uri(link.Url) 220 | }; 221 | 222 | h.RequestNavigate += OnRequestNavigate; 223 | ProjectTypes.MaxWidth = pt.Text.ToString().Length + 200; 224 | h.Inlines.Add(link.Text); 225 | var textBlock = new TextBlock { Text = "- ", Margin = new Thickness(15, 0, 0, 0) }; 226 | textBlock.Inlines.Add(h); 227 | 228 | ProjectTypes.Children.Add(textBlock); 229 | } 230 | 231 | var line = new Line { Margin = new Thickness(0, 0, 0, 20) }; 232 | ProjectTypes.Children.Add(line); 233 | // read settings 234 | if (General.Instance.MultipleProjectsOption) 235 | { 236 | continue; 237 | } 238 | break; 239 | } 240 | } 241 | private void OnRequestNavigate(object sender, RequestNavigateEventArgs e) 242 | { 243 | VsShellUtilities.OpenBrowser(e.Uri.AbsoluteUri, (int)__VSOSPFLAGS.OSP_LaunchSingleBrowser); 244 | e.Handled = true; 245 | } 246 | 247 | } 248 | } 249 | -------------------------------------------------------------------------------- /src/VSCommandTable.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------------------ 2 | // 3 | // This file was generated by VSIX Synchronizer 4 | // 5 | // ------------------------------------------------------------------------------ 6 | namespace HelpExplorer 7 | { 8 | using System; 9 | 10 | /// 11 | /// Helper class that exposes all GUIDs used across VS Package. 12 | /// 13 | internal sealed partial class PackageGuids 14 | { 15 | public const string HelpExplorerString = "3fe2213e-0041-46e6-93bb-7db123589c7e"; 16 | public static Guid HelpExplorer = new Guid(HelpExplorerString); 17 | } 18 | /// 19 | /// Helper class that encapsulates all CommandIDs uses across VS Package. 20 | /// 21 | internal sealed partial class PackageIds 22 | { 23 | public const int MyCommand = 0x0100; 24 | public const int TWindowToolbar = 0x1000; 25 | public const int TWindowToolbarGroup = 0x1050; 26 | public const int MultipleProjectTypeDisplay = 0x0111; 27 | public const int MultipleFileTypeDisplay = 0x0112; 28 | public const int CreateCapabilitiyFile = 0x0113; 29 | } 30 | } -------------------------------------------------------------------------------- /src/VSCommandTable.vsct: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | DefaultDocked 15 | 16 | Tool Window Toolbar 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 37 | 38 | 47 | 48 | 57 | 58 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /src/source.extension.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------------------ 2 | // 3 | // This file was generated by VSIX Synchronizer 4 | // 5 | // ------------------------------------------------------------------------------ 6 | namespace HelpExplorer 7 | { 8 | internal sealed partial class Vsix 9 | { 10 | public const string Id = "HelpExplorer.c8c773f3-d62f-4717-9b7d-1d3e440a7d53"; 11 | public const string Name = "Help Explorer"; 12 | public const string Description = @"Adds a Help Explorer tool window that provides contextual help and resources. Great for beginners, students, and hobby programmaers alike."; 13 | public const string Language = "en-US"; 14 | public const string Version = "21.5"; 15 | public const string Author = "Mads Kristensen"; 16 | public const string Tags = "help, tutorials"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/source.extension.vsixmanifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Help Explorer 6 | Adds a Help Explorer tool window that provides contextual help and resources. Great for beginners, students, and hobby programmaers alike. 7 | https://github.com/madskristensen/HelpExplorer 8 | Resources\LICENSE 9 | Resources\Icon.png 10 | Resources\Icon.png 11 | help, tutorials 12 | 13 | 14 | 15 | amd64 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | --------------------------------------------------------------------------------