├── .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 | [](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 |
--------------------------------------------------------------------------------