ionide / proj-info

Parse and evaluate MsBuild project files
MIT License
64 stars 37 forks source link

getProjectInfo doesn't return framework references? #171

Closed dsyme closed 1 year ago

dsyme commented 1 year ago

For some reason I thought the results returned by ProjectLoader.getProjectInfo would include all the -r references for all the .NET DLLs, e.g. in the OtherOptions field. However I can't find these anywhere, and I don't know why

For example consider this script

crackProject.fsx:


#r "nuget: Ionide.ProjInfo, 0.60.1"

open System.IO
open Ionide.ProjInfo
open Ionide.ProjInfo.Types

let argv = fsi.CommandLineArgs

let projectFile = Path.GetFullPath(argv[1])

let cwd = System.Environment.CurrentDirectory |> System.IO.DirectoryInfo

let _toolsPath = Init.init cwd None

let opts =
    match ProjectLoader.getProjectInfo projectFile [] BinaryLogGeneration.Off [] with 
    | Result.Ok res -> res
    | Result.Error err -> failwithf "%s" err

printfn "ReferencedProjects:"
for rp in opts.ReferencedProjects do
    printfn "    %s" rp.RelativePath

printfn "PackageReferences:"
for rp in opts.PackageReferences do
    printfn "    %s" rp.FullPath

printfn "OtherOptions:"
for opt in opts.OtherOptions do
    printfn "    %s" opt

t.fsproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Program.fs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
  </ItemGroup>

</Project>

Results:

C:\misc\t>dotnet fsi c:\github\dsyme\fsharp\tests\scripts\crackProject.fsx t.fsproj
Cracking project options....
ReferencedProjects:
PackageReferences:
    C:\Users\donsy\.nuget\packages\fsharp.core\7.0.0-beta.22427.1\lib\netstandard2.1\FSharp.Core.dll
    C:\Users\donsy\.nuget\packages\newtonsoft.json\13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll
OtherOptions:
    -o:C:\misc\t\obj\Debug\net7.0\t.dll
    -g
    --debug:portable
    --noframework
    --define:TRACE
    --define:DEBUG
    --define:NET
    --define:NET7_0
    --define:NETCOREAPP
    --define:NET5_0_OR_GREATER
    --define:NET6_0_OR_GREATER
    --define:NET7_0_OR_GREATER
    --define:NETCOREAPP1_0_OR_GREATER
    --define:NETCOREAPP1_1_OR_GREATER
    --define:NETCOREAPP2_0_OR_GREATER
    --define:NETCOREAPP2_1_OR_GREATER
    --define:NETCOREAPP2_2_OR_GREATER
    --define:NETCOREAPP3_0_OR_GREATER
    --define:NETCOREAPP3_1_OR_GREATER
    --optimize-
    --tailcalls-
    --target:exe
    --nowarn:IL2121
    --warn:3
    --warnaserror:3239
    --fullpaths
    --flaterrors
    --highentropyva+
    --targetprofile:netcore
    --nocopyfsharpcore
    --deterministic+
    --simpleresolution

There are no -r: references to reference assemblies etc.

@baronfel Do you know if this should be working? Is it the case that we're not actually evaluating the full set of referenced assemblies of something?

dsyme commented 1 year ago

@baronfel From reading these docs it looks like we may need to add ResolveFrameworkReferencesDesignTime to this list???

I'd imagine this means Ionide is resolving to default framework references when doing its analysis??

TheAngryByrd commented 1 year ago

It seems to work in 6.0, this seems like a problem with 7.0 and different Microsoft.Build related stuff.

dsyme commented 1 year ago

It seems to work in 6.0

Could you send me an example? After adding a global.json for 6.0.400 I see this:

C:\misc\t>dotnet --version
6.0.400

C:\misc\t>dotnet "c:\Program Files\dotnet\sdk\6.0.400\FSharp\fsi.dll" c:\github\dsyme\fsharp\tests\scripts\crackProject.fsx t.fsproj
Cracking project options....
ReferencedProjects:
PackageReferences:
    C:\Users\donsy\.nuget\packages\fsharp.core\7.0.0-beta.22427.1\lib\netstandard2.1\FSharp.Core.dll
    C:\Users\donsy\.nuget\packages\newtonsoft.json\13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll
OtherOptions:
    -o:C:\misc\t\obj\Debug\net7.0\t.dll
    -g
    --debug:portable
    --noframework
    --define:TRACE
    --define:DEBUG
    --define:NET
    --define:NET7_0
    --define:NETCOREAPP
    --define:NET5_0_OR_GREATER
    --define:NET6_0_OR_GREATER
    --define:NETCOREAPP1_0_OR_GREATER
    --define:NETCOREAPP1_1_OR_GREATER
    --define:NETCOREAPP2_0_OR_GREATER
    --define:NETCOREAPP2_1_OR_GREATER
    --define:NETCOREAPP2_2_OR_GREATER
    --define:NETCOREAPP3_0_OR_GREATER
    --define:NETCOREAPP3_1_OR_GREATER
    --optimize-
    --tailcalls-
    -r:C:\Users\donsy\.nuget\packages\fsharp.core\7.0.0-beta.22427.1\lib\netstandard2.1\FSharp.Core.dll
    -r:C:\Users\donsy\.nuget\packages\newtonsoft.json\13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll
    --target:exe
    --warn:3
    --warnaserror:3239
    --fullpaths
    --flaterrors
    --highentropyva+
    --targetprofile:netcore
    --nocopyfsharpcore
    --deterministic+
    --simpleresolution

Same results for 6.0.302

TheAngryByrd commented 1 year ago

I don't have any of the 7.0 installed. I've seen this kind of weird behavior when a new SDK on a different major version comes out (similar to when fsi wasn't working with different beta sdks if you recall that.)

dotnet --info
.NET SDK (reflecting any global.json):
 Version:   6.0.401
 Commit:    0906eae6f8

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.22000
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\6.0.401\

global.json file:
  C:\Users\jimmy\Repositories\public\TheAngryByrd\dotnet-proj-info\global.json

Host:
  Version:      6.0.9
  Architecture: x64
  Commit:       163a63591c

.NET SDKs installed:
  5.0.404 [C:\Program Files\dotnet\sdk]
.NET runtimes installed:
  Microsoft.AspNetCore.App 5.0.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]  Microsoft.AspNetCore.App 6.0.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]  Microsoft.NETCore.App 5.0.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]  Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]  Microsoft.NETCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]  Microsoft.NETCore.App 6.0.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]  Microsoft.NETCore.App 6.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]  Microsoft.WindowsDesktop.App 5.0.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]  Microsoft.WindowsDesktop.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]  Microsoft.WindowsDesktop.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]  Microsoft.WindowsDesktop.App 6.0.8 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]  Microsoft.WindowsDesktop.App 6.0.9 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Download .NET:  https://aka.ms/dotnet-download

Learn about .NET Runtimes and SDKs:
  https://aka.ms/dotnet/runtimes-sdk-info

ReferencedProjects:
PackageReferences:
    C:\Users\jimmy\.nuget\packages\fsharp.core\6.0.6\lib\netstandard2.1\FSharp.Core.dll
    C:\Users\jimmy\.nuget\packages\newtonsoft.json\13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll
OtherOptions:
    -o:C:\Users\jimmy\Repositories\public\TheAngryByrd\dotnet-proj-info\playgroundtest\obj\Debug\net6.0\t.dll
    -g
    --debug:portable
    --noframework
    --define:TRACE
    --define:DEBUG
    --define:NET
    --define:NET6_0
    --define:NETCOREAPP
    --define:NET5_0_OR_GREATER
    --define:NET6_0_OR_GREATER
    --define:NETCOREAPP1_0_OR_GREATER
    --define:NETCOREAPP1_1_OR_GREATER
    --define:NETCOREAPP2_0_OR_GREATER
    --define:NETCOREAPP2_1_OR_GREATER
    --define:NETCOREAPP2_2_OR_GREATER
    --define:NETCOREAPP3_0_OR_GREATER
    --define:NETCOREAPP3_1_OR_GREATER
    --optimize-
    --tailcalls-
    -r:C:\Users\jimmy\.nuget\packages\fsharp.core\6.0.6\lib\netstandard2.1\FSharp.Core.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\Microsoft.CSharp.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\Microsoft.VisualBasic.Core.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\Microsoft.VisualBasic.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\Microsoft.Win32.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\Microsoft.Win32.Registry.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\mscorlib.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\netstandard.dll
    -r:C:\Users\jimmy\.nuget\packages\newtonsoft.json\13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.AppContext.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Buffers.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Collections.Concurrent.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Collections.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Collections.Immutable.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Collections.NonGeneric.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Collections.Specialized.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ComponentModel.Annotations.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ComponentModel.DataAnnotations.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ComponentModel.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ComponentModel.EventBasedAsync.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ComponentModel.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ComponentModel.TypeConverter.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Configuration.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Console.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Core.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Data.Common.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Data.DataSetExtensions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Data.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.Contracts.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.Debug.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.DiagnosticSource.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.FileVersionInfo.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.Process.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.StackTrace.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.TextWriterTraceListener.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.Tools.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.TraceSource.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Diagnostics.Tracing.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Drawing.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Drawing.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Dynamic.Runtime.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Formats.Asn1.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Globalization.Calendars.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Globalization.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Globalization.Extensions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.Compression.Brotli.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.Compression.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.Compression.FileSystem.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.Compression.ZipFile.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.FileSystem.AccessControl.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.FileSystem.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.FileSystem.DriveInfo.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.FileSystem.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.FileSystem.Watcher.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.IsolatedStorage.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.MemoryMappedFiles.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.Pipes.AccessControl.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.Pipes.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.IO.UnmanagedMemoryStream.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Linq.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Linq.Expressions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Linq.Parallel.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Linq.Queryable.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Memory.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Http.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Http.Json.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.HttpListener.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Mail.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.NameResolution.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.NetworkInformation.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Ping.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Requests.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Security.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.ServicePoint.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.Sockets.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.WebClient.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.WebHeaderCollection.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.WebProxy.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.WebSockets.Client.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Net.WebSockets.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Numerics.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Numerics.Vectors.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ObjectModel.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.DispatchProxy.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.Emit.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.Emit.ILGeneration.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.Emit.Lightweight.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.Extensions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.Metadata.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Reflection.TypeExtensions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Resources.Reader.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Resources.ResourceManager.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Resources.Writer.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.CompilerServices.Unsafe.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.CompilerServices.VisualC.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Extensions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Handles.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.InteropServices.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.InteropServices.RuntimeInformation.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Intrinsics.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Loader.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Numerics.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Serialization.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Serialization.Formatters.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Serialization.Json.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Serialization.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Runtime.Serialization.Xml.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.AccessControl.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Claims.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Cryptography.Algorithms.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Cryptography.Cng.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Cryptography.Csp.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Cryptography.Encoding.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Cryptography.OpenSsl.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Cryptography.Primitives.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Cryptography.X509Certificates.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Principal.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.Principal.Windows.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Security.SecureString.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ServiceModel.Web.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ServiceProcess.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Text.Encoding.CodePages.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Text.Encoding.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Text.Encoding.Extensions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Text.Encodings.Web.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Text.Json.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Text.RegularExpressions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Channels.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Overlapped.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Tasks.Dataflow.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Tasks.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Tasks.Extensions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Tasks.Parallel.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Thread.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.ThreadPool.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Threading.Timer.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Transactions.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Transactions.Local.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.ValueTuple.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Web.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Web.HttpUtility.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Windows.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.Linq.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.ReaderWriter.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.Serialization.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.XDocument.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.XmlDocument.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.XmlSerializer.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.XPath.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\System.Xml.XPath.XDocument.dll
    -r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.9\ref\net6.0\WindowsBase.dll
    --target:exe
    --warn:3
    --warnaserror:3239
    --fullpaths
    --flaterrors
    --highentropyva+
    --targetprofile:netcore
    --nocopyfsharpcore
    --deterministic+
    --simpleresolution
dsyme commented 1 year ago

Thanks, how did you execute the code, via 'fsi' or a new project? Maybe my use of fsi is causing drama.

TheAngryByrd commented 1 year ago

I did it via CLI and interactively, same results.

dotnet fsi playground.fsx -- "C:\Users\jimmy\Repositories\public\TheAngryByrd\dotnet-proj-info\playgroundtest\t.fsproj" 
baronfel commented 1 year ago

The curse of this entire project in a nutshell :)

WillEhrendreich commented 1 year ago

does this mean I have to uninstall vs2022 preview to get my neovim working??

baronfel commented 1 year ago

We don't know what it means as of yet. Still in the hypothesis-generation and testing phase IMO.

TheAngryByrd commented 1 year ago

After adding net7.0 to the tfm for this project, I'm getting this error when running the tests for net 6.0

System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. 
File name: 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
   at Ionide.ProjInfo.WorkspaceLoaderViaProjectGraph.Ionide.ProjInfo.IWorkspaceLoader.LoadProjects(FSharpList`1 projects, FSharpList`1 customProperties, BinaryLogGeneration binaryLogs)
   at Tests.testSample3$cont@295(ToolsPath toolsPath, FSharpFunc`2 workspaceFactory, FSharpList`1 expected, Logger logger, FileUtils fs, String projPath, String projDir, String l2Dir, String l2, String l1Dir, String l1, Unit unitVar) 

The toolpath I get for 6.0 and 7.0 is both:

 toolsPath : ToolsPath "C:\Program Files\dotnet\sdk\7.0.100-rc.2.22477.23\MSBuild.dll"

Looking at older issues, i've come across https://github.com/dotnet/msbuild/issues/5600 which feels oddly familiar to the problems that we're running into.

TheAngryByrd commented 1 year ago

I did end up building ProjInfo with FSAC. I got some "interesting" findings

TheAngryByrd commented 1 year ago

Seems this may be related to a change in FSharp.Core. I posted an issue https://github.com/dotnet/fsharp/issues/14250 for it. I'm unsure if we have to wait for an upstream fix or we there's anything we can do about it in the meantime.

TheAngryByrd commented 1 year ago

Well I just ended up following a thread https://github.com/dotnet/roslyn/pull/19146#discussion_r114613742 that talks about how to make sure that ReferencePathWithRefAssemblies is not empty. Adding FindReferenceAssembliesForReferences to ProjInfo seems to work.

I'm gonna try to see how paired down a PR I can make for this.

dsyme commented 1 year ago

Such detective work, amazing!

Resolving this will also allow us to get fsdocs support for F# 7 ready

baronfel commented 1 year ago

@TheAngryByrd you're talking about adding that target to the set of design time targets we evaluate, right?

If so, I think this change should still (eventually) be made upstream as well - using 'normal' design time targets should be all that's required to invoke this target along the way.

TheAngryByrd commented 1 year ago

Ok, so thinking CoreCompileDependsOn should have FindReferenceAssembliesForReferences ?

baronfel commented 1 year ago

I'm not 100% sure, but we should be able to mimic the Roslyn Target dependencies here as much as possible when it comes to ref assemblies - I think doing so will help F# be similarly supported in all tooling that expects Roslyn-like behavior.