├── .gitattributes ├── OpenInExternalBrowser ├── key.snk ├── source.extension.vsixmanifest ├── Properties │ └── AssemblyInfo.cs ├── packages.config ├── UrlCommandFilterProvider.cs ├── UrlCommandFilter.cs └── OpenInExternalBrowser.csproj ├── .gitignore ├── appveyor.yml ├── README.md ├── LICENSE └── OpenInExternalBrowser.sln /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /OpenInExternalBrowser/key.snk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tunnelvisionlabs/OpenInExternalBrowser/HEAD/OpenInExternalBrowser/key.snk -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Per-user files in Visual Studio 2 | *.suo 3 | *.user 4 | 5 | # Roslyn IntelliSense Cache 6 | .vs/ 7 | 8 | # NuGet Packages Directory 9 | /packages/ 10 | 11 | # Build output 12 | bin/ 13 | obj/ 14 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | version: 1.0.{build} 2 | image: Visual Studio 2015 3 | configuration: Release 4 | platform: Any CPU 5 | init: 6 | - git config --global core.autocrlf true 7 | install: 8 | - nuget restore 9 | build: 10 | verbosity: minimal 11 | test: off 12 | artifacts: 13 | - path: '**\*.vsix' 14 | cache: 15 | - packages -> **\packages.config 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Open in External Browser 2 | 3 | [![Build status](https://ci.appveyor.com/api/projects/status/dthi9hrosa6m1427/branch/master?svg=true)](https://ci.appveyor.com/project/sharwell/openinexternalbrowser/branch/master) 4 | 5 | This project contains a Visual Studio extension (2012+) which alters the behavior of 6 | Ctrl+Click in the editor to launch an external web browser instead of using the default 7 | in-process browser. 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Tunnel Vision Laboratories, LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /OpenInExternalBrowser.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenInExternalBrowser", "OpenInExternalBrowser\OpenInExternalBrowser.csproj", "{E6C759E8-046B-4EFF-B3E9-21E1E05016F7}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2E5F5948-39AC-4135-8853-5016C6F36E09}" 9 | ProjectSection(SolutionItems) = preProject 10 | appveyor.yml = appveyor.yml 11 | LICENSE = LICENSE 12 | README.md = README.md 13 | EndProjectSection 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Release|Any CPU = Release|Any CPU 19 | EndGlobalSection 20 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 21 | {E6C759E8-046B-4EFF-B3E9-21E1E05016F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 22 | {E6C759E8-046B-4EFF-B3E9-21E1E05016F7}.Debug|Any CPU.Build.0 = Debug|Any CPU 23 | {E6C759E8-046B-4EFF-B3E9-21E1E05016F7}.Release|Any CPU.ActiveCfg = Release|Any CPU 24 | {E6C759E8-046B-4EFF-B3E9-21E1E05016F7}.Release|Any CPU.Build.0 = Release|Any CPU 25 | EndGlobalSection 26 | GlobalSection(SolutionProperties) = preSolution 27 | HideSolutionNode = FALSE 28 | EndGlobalSection 29 | EndGlobal 30 | -------------------------------------------------------------------------------- /OpenInExternalBrowser/source.extension.vsixmanifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Open in External Browser 6 | Alters the behavior of Ctrl+Click in the editor to open links in the default external browser 7 | https://github.com/tunnelvisionlabs/OpenInExternalBrowser 8 | LICENSE 9 | 10 | 11 | https://github.com/tunnelvisionlabs/OpenInExternalBrowser/releases/tag/2.2.0 12 | 13 | 14 | browser, editor, hyperlink, url 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /OpenInExternalBrowser/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved. 2 | // Licensed under the MIT license. See LICENSE file in the project root for full license information. 3 | 4 | using System.Reflection; 5 | using System.Runtime.InteropServices; 6 | using Microsoft.VisualStudio.Shell; 7 | 8 | // General Information about an assembly is controlled through the following 9 | // set of attributes. Change these attribute values to modify the information 10 | // associated with an assembly. 11 | [assembly: AssemblyTitle("Tvl.VisualStudio.OpenInExternalBrowser")] 12 | [assembly: AssemblyDescription("")] 13 | [assembly: AssemblyConfiguration("")] 14 | [assembly: AssemblyCompany("Tunnel Vision Laboratories, LLC")] 15 | [assembly: AssemblyProduct("Tvl.VisualStudio.OpenInExternalBrowser")] 16 | [assembly: AssemblyCopyright("Copyright © Sam Harwell 2015")] 17 | [assembly: AssemblyTrademark("")] 18 | [assembly: AssemblyCulture("")] 19 | 20 | // Setting ComVisible to false makes the types in this assembly not visible 21 | // to COM components. If you need to access a type in this assembly from 22 | // COM, set the ComVisible attribute to true on that type. 23 | [assembly: ComVisible(false)] 24 | 25 | // The following GUID is for the ID of the typelib if this project is exposed to COM 26 | [assembly: Guid("c8478eb2-9f48-49fe-8ef2-61d198e01bfc")] 27 | 28 | // Version information for an assembly consists of the following four values: 29 | // 30 | // Major Version 31 | // Minor Version 32 | // Build Number 33 | // Revision 34 | // 35 | // You can specify all the values or you can default the Build and Revision Numbers 36 | // by using the '*' as shown below: 37 | // [assembly: AssemblyVersion("1.0.*")] 38 | [assembly: AssemblyVersion("2.2.0.0")] 39 | [assembly: AssemblyFileVersion("2.2.0.0")] 40 | [assembly: AssemblyInformationalVersion("2.2.0-dev")] 41 | 42 | [assembly: ProvideCodeBase( 43 | AssemblyName = "Tvl.VisualStudio.Shell.Utility.10", 44 | Version = "1.0.0.0", 45 | CodeBase = "$PackageFolder$\\Tvl.VisualStudio.Shell.Utility.10.dll")] 46 | [assembly: ProvideCodeBase( 47 | AssemblyName = "Tvl.VisualStudio.Text.Utility.10", 48 | Version = "1.0.0.0", 49 | CodeBase = "$PackageFolder$\\Tvl.VisualStudio.Text.Utility.10.dll")] 50 | -------------------------------------------------------------------------------- /OpenInExternalBrowser/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /OpenInExternalBrowser/UrlCommandFilterProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved. 2 | // Licensed under the MIT license. See LICENSE file in the project root for full license information. 3 | 4 | namespace Tvl.VisualStudio.OpenInExternalBrowser 5 | { 6 | using System.ComponentModel.Composition; 7 | using Microsoft.VisualStudio.Editor; 8 | using Microsoft.VisualStudio.Shell; 9 | using Microsoft.VisualStudio.Text.Editor; 10 | using Microsoft.VisualStudio.Text.Tagging; 11 | using Microsoft.VisualStudio.TextManager.Interop; 12 | using Microsoft.VisualStudio.Utilities; 13 | using Tvl.VisualStudio.Text; 14 | 15 | [Export(typeof(IVsTextViewCreationListener))] 16 | [ContentType("text")] 17 | [TextViewRole(PredefinedTextViewRoles.Interactive)] 18 | internal class UrlCommandFilterProvider : IVsTextViewCreationListener 19 | { 20 | [ImportingConstructor] 21 | public UrlCommandFilterProvider(SVsServiceProvider serviceProvider, IVsEditorAdaptersFactoryService editorAdaptersFactoryService, IViewTagAggregatorFactoryService viewTagAggregatorFactoryService) 22 | { 23 | this.ServiceProvider = serviceProvider; 24 | this.EditorAdaptersFactoryService = editorAdaptersFactoryService; 25 | this.ViewTagAggregatorFactoryService = viewTagAggregatorFactoryService; 26 | } 27 | 28 | public SVsServiceProvider ServiceProvider 29 | { 30 | get; 31 | private set; 32 | } 33 | 34 | public IVsEditorAdaptersFactoryService EditorAdaptersFactoryService 35 | { 36 | get; 37 | private set; 38 | } 39 | 40 | public IViewTagAggregatorFactoryService ViewTagAggregatorFactoryService 41 | { 42 | get; 43 | private set; 44 | } 45 | 46 | public void VsTextViewCreated(IVsTextView textViewAdapter) 47 | { 48 | ITextView textView = EditorAdaptersFactoryService.GetWpfTextView(textViewAdapter); 49 | if (textView == null) 50 | return; 51 | 52 | UrlCommandFilter commandFilter = new UrlCommandFilter(textViewAdapter, textView, this); 53 | commandFilter.Enabled = true; 54 | textView.Properties.AddProperty(typeof(UrlCommandFilter), commandFilter); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /OpenInExternalBrowser/UrlCommandFilter.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved. 2 | // Licensed under the MIT license. See LICENSE file in the project root for full license information. 3 | 4 | namespace Tvl.VisualStudio.OpenInExternalBrowser 5 | { 6 | using System; 7 | using System.ComponentModel; 8 | using System.Runtime.InteropServices; 9 | using Microsoft.VisualStudio; 10 | using Microsoft.VisualStudio.Shell; 11 | using Microsoft.VisualStudio.Shell.Interop; 12 | using Microsoft.VisualStudio.Text; 13 | using Microsoft.VisualStudio.Text.Editor; 14 | using Microsoft.VisualStudio.Text.Tagging; 15 | using Microsoft.VisualStudio.TextManager.Interop; 16 | using Tvl.VisualStudio.Text; 17 | using FileNotFoundException = System.IO.FileNotFoundException; 18 | using OLECMDEXECOPT = Microsoft.VisualStudio.OLE.Interop.OLECMDEXECOPT; 19 | using Process = System.Diagnostics.Process; 20 | 21 | internal class UrlCommandFilter : TextViewCommandFilter 22 | { 23 | private readonly ITextView _textView; 24 | 25 | private readonly SVsServiceProvider _serviceProvider; 26 | 27 | private readonly ITagAggregator _urlTagAggregator; 28 | 29 | public UrlCommandFilter(IVsTextView textViewAdapter, ITextView textView, UrlCommandFilterProvider provider) 30 | : base(textViewAdapter) 31 | { 32 | if (textView == null) 33 | throw new ArgumentNullException("textView"); 34 | if (provider == null) 35 | throw new ArgumentNullException("provider"); 36 | 37 | _textView = textView; 38 | _serviceProvider = provider.ServiceProvider; 39 | _urlTagAggregator = provider.ViewTagAggregatorFactoryService.CreateTagAggregator(textView); 40 | } 41 | 42 | protected ITextView TextView 43 | { 44 | get 45 | { 46 | return _textView; 47 | } 48 | } 49 | 50 | protected override bool HandlePreExec(ref Guid commandGroup, uint commandId, OLECMDEXECOPT executionOptions, IntPtr pvaIn, IntPtr pvaOut) 51 | { 52 | if (commandGroup == typeof(VSConstants.VSStd2KCmdID).GUID) 53 | { 54 | switch ((VSConstants.VSStd2KCmdID)commandId) 55 | { 56 | case VSConstants.VSStd2KCmdID.OPENURL: 57 | if (pvaIn != IntPtr.Zero) 58 | { 59 | int line = (int)Marshal.GetObjectForNativeVariant(pvaIn); 60 | int column = (int)Marshal.GetObjectForNativeVariant(new IntPtr(pvaIn.ToInt32() + 16)); 61 | return TryOpenUrlAtPoint(line, column); 62 | } 63 | 64 | return TryOpenUrlAtCaret(); 65 | 66 | default: 67 | break; 68 | } 69 | } 70 | 71 | return base.HandlePreExec(ref commandGroup, commandId, executionOptions, pvaIn, pvaOut); 72 | } 73 | 74 | private bool TryOpenUrlAtCaret() 75 | { 76 | SnapshotPoint bufferPosition = TextView.Caret.Position.BufferPosition; 77 | ITextSnapshotLine containingLine = bufferPosition.GetContainingLine(); 78 | int line = containingLine.LineNumber; 79 | int column = bufferPosition - containingLine.Start; 80 | return TryOpenUrlAtPoint(line, column); 81 | } 82 | 83 | private bool TryOpenUrlAtPoint(int line, int column) 84 | { 85 | ITagSpan tagSpan; 86 | if (!TryGetUrlSpan(line, column, out tagSpan)) 87 | return false; 88 | 89 | if (!IsUrlSpanValid(tagSpan)) 90 | return false; 91 | 92 | return OpenUri(tagSpan.Tag.Url); 93 | } 94 | 95 | private bool TryGetUrlSpan(int line, int column, out ITagSpan urlSpan) 96 | { 97 | urlSpan = null; 98 | 99 | SnapshotPoint point; 100 | if (!TryToSnapshotPoint(TextView.TextSnapshot, line, column, out point)) 101 | return false; 102 | 103 | SnapshotSpan span = new SnapshotSpan(point, 0); 104 | foreach (IMappingTagSpan current in _urlTagAggregator.GetTags(span)) 105 | { 106 | NormalizedSnapshotSpanCollection spans = current.Span.GetSpans(TextView.TextSnapshot); 107 | if (spans.Count == 1 && spans[0].Length == current.Span.GetSpans(current.Span.AnchorBuffer)[0].Length && spans[0].Contains(span.Start)) 108 | { 109 | urlSpan = new TagSpan(spans[0], current.Tag); 110 | return true; 111 | } 112 | } 113 | 114 | return false; 115 | } 116 | 117 | private static bool TryToSnapshotPoint(ITextSnapshot snapshot, int startLine, int startIndex, out SnapshotPoint result) 118 | { 119 | if (snapshot == null) 120 | throw new ArgumentNullException("snapshot"); 121 | 122 | result = default(SnapshotPoint); 123 | if (snapshot == null || startLine < 0 || startLine >= snapshot.LineCount || startIndex < 0) 124 | return false; 125 | 126 | ITextSnapshotLine startSnapshotLine = snapshot.GetLineFromLineNumber(startLine); 127 | if (startIndex > startSnapshotLine.Length) 128 | return false; 129 | 130 | result = startSnapshotLine.Start + startIndex; 131 | return true; 132 | } 133 | 134 | private static bool IsUrlSpanValid(ITagSpan urlTagSpan) 135 | { 136 | return urlTagSpan != null 137 | && urlTagSpan.Tag != null 138 | && urlTagSpan.Tag.Url != null 139 | && urlTagSpan.Tag.Url.IsAbsoluteUri; 140 | } 141 | 142 | private bool OpenUri(Uri uri) 143 | { 144 | if (uri == null) 145 | throw new ArgumentNullException("uri"); 146 | 147 | if (!uri.IsAbsoluteUri) 148 | return false; 149 | 150 | /* First try to use the Web Browsing Service. This is not known to work because the 151 | * CreateExternalWebBrowser method always returns E_NOTIMPL. However, it is presumably 152 | * safer than a Shell Execute for arbitrary URIs. 153 | */ 154 | IVsWebBrowsingService service = _serviceProvider.GetService(typeof(SVsWebBrowsingService)) as IVsWebBrowsingService; 155 | if (service != null) 156 | { 157 | __VSCREATEWEBBROWSER createFlags = __VSCREATEWEBBROWSER.VSCWB_AutoShow; 158 | VSPREVIEWRESOLUTION resolution = VSPREVIEWRESOLUTION.PR_Default; 159 | int result = ErrorHandler.CallWithCOMConvention(() => service.CreateExternalWebBrowser((uint)createFlags, resolution, uri.AbsoluteUri)); 160 | if (ErrorHandler.Succeeded(result)) 161 | return true; 162 | } 163 | 164 | // Fall back to Shell Execute, but only for http or https URIs 165 | if (uri.Scheme != "http" && uri.Scheme != "https") 166 | return false; 167 | 168 | try 169 | { 170 | Process.Start(uri.AbsoluteUri); 171 | return true; 172 | } 173 | catch (Win32Exception) 174 | { 175 | } 176 | catch (FileNotFoundException) 177 | { 178 | } 179 | 180 | return false; 181 | } 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /OpenInExternalBrowser/OpenInExternalBrowser.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Debug 7 | AnyCPU 8 | {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 9 | {E6C759E8-046B-4EFF-B3E9-21E1E05016F7} 10 | Library 11 | Properties 12 | Tvl.VisualStudio.OpenInExternalBrowser 13 | Tvl.VisualStudio.OpenInExternalBrowser 14 | v4.5 15 | 512 16 | 17 | false 18 | true 19 | false 20 | false 21 | true 22 | false 23 | ..\ 24 | v3 25 | 26 | 27 | 28 | Program 29 | $(DevEnvDir)\devenv.exe 30 | /rootSuffix Exp 31 | 32 | 33 | 34 | $(VisualStudioVersion) 35 | 36 | 37 | 38 | False 39 | 40 | 41 | true 42 | full 43 | false 44 | bin\Debug\ 45 | DEBUG;TRACE 46 | prompt 47 | 4 48 | 49 | 50 | pdbonly 51 | true 52 | bin\Release\ 53 | TRACE 54 | prompt 55 | 4 56 | 57 | 58 | true 59 | 60 | 61 | key.snk 62 | 63 | 64 | 65 | False 66 | False 67 | ..\packages\VSSDK.DTE.7.0.4\lib\net20\envdte.dll 68 | 69 | 70 | False 71 | ..\packages\VSSDK.CoreUtility.11.0.4\lib\net45\Microsoft.VisualStudio.CoreUtility.dll 72 | 73 | 74 | False 75 | ..\packages\VSSDK.Editor.11.0.4\lib\net45\Microsoft.VisualStudio.Editor.dll 76 | 77 | 78 | False 79 | ..\packages\VSSDK.GraphModel.11.0.4\lib\net45\Microsoft.VisualStudio.GraphModel.dll 80 | 81 | 82 | False 83 | ..\packages\VSSDK.OLE.Interop.7.0.4\lib\net20\Microsoft.VisualStudio.OLE.Interop.dll 84 | 85 | 86 | False 87 | ..\packages\VSSDK.Shell.11.11.0.4\lib\net45\Microsoft.VisualStudio.Shell.11.0.dll 88 | 89 | 90 | False 91 | ..\packages\VSSDK.Shell.Immutable.10.10.0.4\lib\net40\Microsoft.VisualStudio.Shell.Immutable.10.0.dll 92 | 93 | 94 | False 95 | ..\packages\VSSDK.Shell.Immutable.11.11.0.4\lib\net45\Microsoft.VisualStudio.Shell.Immutable.11.0.dll 96 | 97 | 98 | False 99 | ..\packages\VSSDK.Shell.Interop.7.0.4\lib\net20\Microsoft.VisualStudio.Shell.Interop.dll 100 | 101 | 102 | False 103 | False 104 | ..\packages\VSSDK.Shell.Interop.10.10.0.4\lib\net20\Microsoft.VisualStudio.Shell.Interop.10.0.dll 105 | 106 | 107 | False 108 | False 109 | ..\packages\VSSDK.Shell.Interop.11.11.0.4\lib\net20\Microsoft.VisualStudio.Shell.Interop.11.0.dll 110 | 111 | 112 | False 113 | ..\packages\VSSDK.Shell.Interop.8.8.0.4\lib\net20\Microsoft.VisualStudio.Shell.Interop.8.0.dll 114 | 115 | 116 | False 117 | ..\packages\VSSDK.Shell.Interop.9.9.0.4\lib\net20\Microsoft.VisualStudio.Shell.Interop.9.0.dll 118 | 119 | 120 | False 121 | ..\packages\VSSDK.Text.11.0.4\lib\net45\Microsoft.VisualStudio.Text.Data.dll 122 | 123 | 124 | False 125 | ..\packages\VSSDK.Text.11.0.4\lib\net45\Microsoft.VisualStudio.Text.Logic.dll 126 | 127 | 128 | False 129 | ..\packages\VSSDK.Text.11.0.4\lib\net45\Microsoft.VisualStudio.Text.UI.dll 130 | 131 | 132 | False 133 | ..\packages\VSSDK.Text.11.0.4\lib\net45\Microsoft.VisualStudio.Text.UI.Wpf.dll 134 | 135 | 136 | False 137 | ..\packages\VSSDK.TextManager.Interop.7.0.4\lib\net20\Microsoft.VisualStudio.TextManager.Interop.dll 138 | 139 | 140 | False 141 | ..\packages\VSSDK.TextManager.Interop.8.8.0.4\lib\net20\Microsoft.VisualStudio.TextManager.Interop.8.0.dll 142 | 143 | 144 | 145 | 146 | False 147 | False 148 | ..\packages\VSSDK.DTE.7.0.4\lib\net20\stdole.dll 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | ..\packages\Tvl.VisualStudio.Shell.Utility.10.1.0.0\lib\net40\Tvl.VisualStudio.Shell.Utility.10.dll 161 | True 162 | 163 | 164 | ..\packages\Tvl.VisualStudio.Text.Utility.10.1.0.0\lib\net40\Tvl.VisualStudio.Text.Utility.10.dll 165 | True 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | LICENSE 178 | true 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 189 | 190 | 191 | 192 | 193 | 194 | 201 | --------------------------------------------------------------------------------