fsprojects-archive / zzarchive-VisualFSharpPowerTools

[ARCHIVED] Power commands for F# in Visual Studio
http://fsprojects.github.io/VisualFSharpPowerTools/
Apache License 2.0
310 stars 77 forks source link

Plan ahead for F# Roslyn integration not to break VFPT #1449

Closed OmarTawfik closed 7 years ago

OmarTawfik commented 7 years ago

@dungpa

With the changes being done in roslyn branch of F# repository, we need to be aware of breaking changes that might impact VFPT in Visual Studio 15. Is there active development now on VFPT that is targeting VS 15?

vasily-kirichenko commented 7 years ago

No. We haven't even planned any special vs 15 support yet.

cloudRoutine commented 7 years ago

@otawfik-ms it's kind of hard to do anything with VS 15 when you can't open F# projects in it, so testing out VFPT features isn't really feasible.

We have VFPT in VS 15, but no F# to use it with :laughing:

cloudRoutine commented 7 years ago

whoops I didn't realize when I upgraded to preview 3 it was going to leave preview 2 side by side on my machine, I just saw that preview 3 will let me install F# support for it! :tada:

cloudRoutine commented 7 years ago

After enabling diagnostics and starting up VS 15 again the first thing to greet me was -

[VFPT][Error 02:39:50 AM] Exception Message: No exports were found that match the constraint: 
    ContractName    FSharpVSPowerTools.TaskList.CrossSolutionTaskListCommentManager
    RequiredTypeIdentity    FSharpVSPowerTools.TaskList.CrossSolutionTaskListCommentManager
Stack Trace:    at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ExportProvider.GetExportsCore(Type type, Type metadataViewType, String contractName, ImportCardinality cardinality)
   at System.ComponentModel.Composition.Hosting.ExportProvider.GetExportedValueCore[T](String contractName, ImportCardinality cardinality)
   at FSharpVSPowerTools.PowerToolsCommandsPackage.PerformRegistrations(IGeneralOptions generalOptions)

Tried enabling all of VFPT's features, but almost none of them work

The only diagnostic message I could get to appear the output while working in an F# solution was

[VFPT][Information 02:41:45 AM] Checking projects after build done...
dungpa commented 7 years ago

Hi @otawfik-ms,

Thanks for informing. We have enabled VS15 support for existing features.

VFPT have two implicit dependencies on Visual F# Tools:

  1. The use of sourcesAndFlags internal field of F# project systems' OAProject in order to retrieve resolved compiler options: https://github.com/fsprojects/VisualFSharpPowerTools/blob/eafdd518e464b241449efa2923dc66208edb23a8/src/FSharp.Editing.VisualStudio/ProjectSystem/ProjectProvider.fs#L49-L62. I hope this hasn't been changed yet.
  2. The use of Microsoft.VisualStudio.FSharp.LanguageService.VsTextColorState.GetColorStateAtStartOfLine and Microsoft.VisualStudio.FSharp.LanguageService.ColorStateLookup.LexStateOfColorState to retrieve current lexer states of a position. We have fallback paths but they're really slow https://github.com/fsprojects/VisualFSharpPowerTools/blob/db3617bd2cf2babafa8c404c5c403c545e65c39c/src/FSharp.Editing.VisualStudio/ProjectSystem/VSLanguageService.fs#L72-L82. This most likely changes in F# Roslyn integration. Do you have an alternative in the new implementation? Or do you have suggestions for us to reimplement this functionality in VFPT?

Other than that, if there is overlap of functionalities, we could put checks to disable those in VFPT.

OmarTawfik commented 7 years ago

@dungpa I'll try to leave the compiler server unchanged as much as possible, but the LanguageService and Editor projects are going to change. About # 1, I don't think we will change the project system. About # 2, we will forward the color handling to Roslyn. However, we need to plan when the branch is ready that any APIs that VFPT depend on are either there, or an alternative exists.

OmarTawfik commented 7 years ago

@cloudRoutine did you try to sync up and launch roslyn branch in VS 15?

cloudRoutine commented 7 years ago

@otawfik-ms I just gave it a shot, but kept running into build errors both in VS 15 and from the commandline.

I haven't been following the roslyn workspace integration too closely since I've been focusing on the internal restructuring of VFPT. I hadn't planned on looking into VS 15 compatibility until that was finished and the visualfsharp intergration was complete.

OmarTawfik commented 7 years ago

Alright. Let me know if you needed a closer look for integration and you needed help with setup. Maybe the DEVGUIDE can be updated to reflect any needed dev changes.

cloudRoutine commented 7 years ago

@otawfik-ms I uninstalled everything related to VS 15 and reinstalled it again and added the F# tools built off of master (i couldn't get the roslyn branch to build on my machine. I think something may have gone wrong with the template installation (or maybe i needed to uninstall the templates extension before installing the VSIX?) but afterward I could create F# projects and some of VFPT was working.

Although I wasn't able to specify the FSharp.Core version in the project settings.

After my first restart I started getting these error message in the activity log

 <entry>
    <record>167</record>
    <time>2016/07/26 18:19:07.764</time>
    <type>Error</type>
    <source>VisualStudio</source>
    <description>LegacySitePackage failed for package [FSharpProjectPackage]Source: &apos;FSharp.ProjectSystem.FSharp&apos; Description: Could not load file or assembly &apos;Microsoft.VisualStudio.Text.Data, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&apos; or one of its dependencies. The system cannot find the file specified.&#x000D;&#x000A;System.IO.FileNotFoundException: Could not load file or assembly &apos;Microsoft.VisualStudio.Text.Data, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&apos; or one of its dependencies. The system cannot find the file specified.&#x000D;&#x000A;File name: &apos;Microsoft.VisualStudio.Text.Data, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&apos;&#x000D;&#x000A;   at Microsoft.VisualStudio.FSharp.ProjectSystem.FSharpProjectPackage.Initialize()&#x000D;&#x000A;   at Microsoft.VisualStudio.Shell.Package.Microsoft.VisualStudio.Shell.Interop.IVsPackage.SetSite(IServiceProvider sp)&#x000D;&#x000A;&#x000D;&#x000A;WRN: Assembly binding logging is turned OFF.&#x000D;&#x000A;To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.&#x000D;&#x000A;Note: There is some performance penalty associated with assembly bind failure logging.&#x000D;&#x000A;To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].&#x000D;&#x000A;</description>
    <guid>{91A04A73-4F2C-4E7C-AD38-C1A68E7DA05C}</guid>
    <hr>80070002</hr>
    <errorinfo></errorinfo>
  </entry>

 <entry>
    <record>551</record>
    <time>2016/07/26 18:21:59.363</time>
    <type>Error</type>
    <source>VisualStudio</source>
    <description>CreateInstance failed for package [Microsoft.VisualStudio.Editor.Implementation.EditorPackage]Source: &apos;mscorlib&apos; Description: Could not load file or assembly &apos;Microsoft.VisualStudio.Editor.Implementation, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&apos; or one of its dependencies. The system cannot find the file specified.&#x000D;&#x000A;System.IO.FileNotFoundException: Could not load file or assembly &apos;Microsoft.VisualStudio.Editor.Implementation, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&apos; or one of its dependencies. The system cannot find the file specified.&#x000D;&#x000A;File name: &apos;Microsoft.VisualStudio.Editor.Implementation, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&apos;&#x000D;&#x000A;   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark&amp; stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)&#x000D;&#x000A;   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark&amp; stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)&#x000D;&#x000A;   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark&amp; stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)&#x000D;&#x000A;   at System.Activator.CreateInstance(String assemblyString, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark&amp; stackMark)&#x000D;&#x000A;   at System.Activator.CreateInstance(String assemblyName, String typeName)&#x000D;&#x000A;   at System.AppDomain.CreateInstance(String assemblyName, String typeName)&#x000D;&#x000A;&#x000D;&#x000A;WRN: Assembly binding logging is turned OFF.&#x000D;&#x000A;To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.&#x000D;&#x000A;Note: There is some performance penalty associated with assembly bind failure logging.&#x000D;&#x000A;To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].&#x000D;&#x000A;</description>
    <guid>{E269B994-EF71-4CE0-8BCD-581C217372E8}</guid>
    <hr>80004005 - E_FAIL</hr>
    <errorinfo></errorinfo>
  </entry>

I'll investigate further later

OmarTawfik commented 7 years ago

@cloudRoutine it appears to be a Roslyn dependency. What preview # of VS were you trying?

cloudRoutine commented 7 years ago
Microsoft Visual Studio Enterprise 15 Preview 3
Version 15.0.25428.1 PREVIEW
Microsoft .NET Framework
Version 4.6.01532

Installed Version: Enterprise

Architecture and Modeling Tools   00369-50000-00000-AA689
Microsoft Architecture and Modeling Tools

UML® and Unified Modeling Language™ are trademarks or registered trademarks of the Object Management Group, Inc. in the United States and other countries.

Visual Basic 15 Preview 3   00369-50000-00000-AA689
Microsoft Visual Basic 15 Preview 3

Visual C# 15 Preview 3   00369-50000-00000-AA689
Microsoft Visual C# 15 Preview 3

Visual C++ 15 Preview 3   00369-50000-00000-AA689
Microsoft Visual C++ 15 Preview 3

Visual F# $(VSGeneralBrandVersion)$(VSGeneralBrandRelease)   00369-50000-00000-AA689
Microsoft Visual F# $(VSGeneralBrandVersion)$(VSGeneralBrandRelease)

Common Azure Tools   1.7
Provides common services for use by Azure Mobile Services and Microsoft Azure Tools.

Extensibility Tools   1.8.175
Contains numerous tools and helpers that makes it easier than ever to build Visual Studio extensions.

Indent Guides   15
Indent Guides

Adds visual guides at each indentation level.

JavaScript Language Service   2.0
JavaScript Language Service

JavaScript Project System   2.0
JavaScript Project System

NuGet Package Manager   3.4.2
NuGet Package Manager in Visual Studio. For more information about NuGet, visit http://docs.nuget.org/.

Parallel Debugger   1.0
Concurrency debugging

SQL Server Data Tools   15.0.60611.0
Microsoft SQL Server Data Tools

TypeScript   1.9.0.0
TypeScript tools for Visual Studio

Visual F# Power Tools   2.5.0
A collection of additional commands for F# in Visual Studio

Visual Studio Tools for Unity   2.2.0.0
Visual Studio Tools for Unity

VSColorOutput   2.4
Color output for build and debug windows - http://mike-ward.net/vscoloroutput
vasily-kirichenko commented 7 years ago

We are not going to support VS 2017.