Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build-everything.proj
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@
<ProjectsWithNet40 Include="vsintegration/fsharp-vsintegration-vsix-build.proj" />
</ItemGroup>

<ItemGroup Condition="'$(BUILD_FCS)'=='1'">
<ProjectsWithNet40 Include="fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj" />
</ItemGroup>

<ItemGroup Condition="'$(BUILD_SETUP)'=='1'">
<SetupProjects Include="setup/fsharp-setup-build.proj" />
</ItemGroup>
Expand Down
10 changes: 10 additions & 0 deletions build.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ set BUILD_NET40=0
set BUILD_NET40_FSHARP_CORE=0
set BUILD_CORECLR=0
set BUILD_VS=0
set BUILD_FCS=0
set BUILD_CONFIG=release
set BUILD_CONFIG_LOWERCASE=release
set BUILD_DIAG=
Expand Down Expand Up @@ -152,6 +153,11 @@ if /i "%ARG%" == "vs" (
set BUILD_VS=1
)

if /i "%ARG%" == "fcs" (
set _autoselect=0
set BUILD_FCS=1
)

if /i "%ARG%" == "vstest" (
set TEST_VS_IDEUNIT_SUITE=1
)
Expand All @@ -166,6 +172,7 @@ if /i "%ARG%" == "all" (
set BUILD_NET40=1
set BUILD_CORECLR=1
set BUILD_VS=1
set BUILD_FCS=1
set BUILD_SETUP=%FSC_BUILD_SETUP%
set BUILD_NUGET=1
set CI=1
Expand Down Expand Up @@ -216,6 +223,7 @@ if /i "%ARG%" == "ci_part1" (
set BUILD_NET40=1
set BUILD_NET40_FSHARP_CORE=1
set BUILD_VS=1
set BUILD_FCS=1
set TEST_VS_IDEUNIT_SUITE=1
set CI=1
)
Expand Down Expand Up @@ -287,6 +295,7 @@ if /i "%ARG%" == "test-all" (
set BUILD_NET40_FSHARP_CORE=1
set BUILD_CORECLR=1
set BUILD_VS=1
set BUILD_FCS=1
set BUILD_SETUP=%FSC_BUILD_SETUP%
set BUILD_NUGET=1

Expand Down Expand Up @@ -379,6 +388,7 @@ echo BUILD_NET40=%BUILD_NET40%
echo BUILD_NET40_FSHARP_CORE=%BUILD_NET40_FSHARP_CORE%
echo BUILD_CORECLR=%BUILD_CORECLR%
echo BUILD_VS=%BUILD_VS%
echo BUILD_FCS=%BUILD_FCS%
echo BUILD_SETUP=%BUILD_SETUP%
echo BUILD_NUGET=%BUILD_NUGET%
echo BUILD_CONFIG=%BUILD_CONFIG%
Expand Down
3 changes: 3 additions & 0 deletions packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@
<!-- FSharp.Data is used in some of the scripts ued for the coreclr build -->
<package id="FSharp.Data" version="2.2.5" />

<!-- FSharp.Configuration is one type provider used in testing -->
<package id="FSharp.Configuration" version="1.3.0" />

<!-- Perl is used for the fsharpqa test suite -->
<package id="StrawberryPerl64" version="5.22.2.1" />

Expand Down
29 changes: 17 additions & 12 deletions src/fsharp/CompileOps.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5163,12 +5163,15 @@ type TcState =
tcsNiceNameGen: NiceNameGenerator
tcsTcSigEnv: TcEnv
tcsTcImplEnv: TcEnv
tcsCreatesGeneratedProvidedTypes: bool
/// The accumulated results of type checking for this assembly
tcsRootSigsAndImpls : TypecheckerSigsAndImpls }
member x.NiceNameGenerator = x.tcsNiceNameGen
member x.TcEnvFromSignatures = x.tcsTcSigEnv
member x.TcEnvFromImpls = x.tcsTcImplEnv
member x.Ccu = x.tcsCcu
member x.CreatesGeneratedProvidedTypes = x.tcsCreatesGeneratedProvidedTypes

member x.PartialAssemblySignature =
let (RootSigsAndImpls(_rootSigs,_rootImpls,_allSigModulTyp,allImplementedSigModulTyp)) = x.tcsRootSigsAndImpls
allImplementedSigModulTyp
Expand Down Expand Up @@ -5217,6 +5220,7 @@ let GetInitialTcState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImports,
tcsNiceNameGen=niceNameGen
tcsTcSigEnv=tcEnv0
tcsTcImplEnv=tcEnv0
tcsCreatesGeneratedProvidedTypes=false
tcsRootSigsAndImpls = RootSigsAndImpls (rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp) }


Expand All @@ -5233,7 +5237,7 @@ let TypeCheckOneInputEventually
let (RootSigsAndImpls(rootSigs,rootImpls,allSigModulTyp,allImplementedSigModulTyp)) = tcState.tcsRootSigsAndImpls
let m = inp.Range
let amap = tcImports.GetImportMap()
let! (topAttrs, mimpls,tcEnvAtEnd,tcSigEnv,tcImplEnv,topSigsAndImpls,ccuType) =
let! (topAttrs, implFiles,tcEnvAtEnd,tcSigEnv,tcImplEnv,topSigsAndImpls,ccuType,createsGeneratedProvidedTypes) =
eventually {
match inp with
| ParsedInput.SigFile (ParsedSigFileInput(_, qualNameOfFile, _, _, _) as file) ->
Expand All @@ -5247,10 +5251,10 @@ let TypeCheckOneInputEventually
errorR(Error(FSComp.SR.buildImplementationAlreadyGivenDetail(qualNameOfFile.Text),m))

// Typecheck the signature file
let! (tcEnvAtEnd,tcEnv,smodulTypeRoot) =
let! (tcEnv,sigFileType,createsGeneratedProvidedTypes) =
TypeCheckOneSigFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcState.tcsTcSigEnv file

let rootSigs = Zmap.add qualNameOfFile smodulTypeRoot rootSigs
let rootSigs = Zmap.add qualNameOfFile sigFileType rootSigs

// Open the prefixPath for fsi.exe
let tcEnv =
Expand All @@ -5260,7 +5264,7 @@ let TypeCheckOneInputEventually
let m = qualNameOfFile.Range
TcOpenDecl tcSink tcGlobals amap m m tcEnv prefixPath

let res = (EmptyTopAttrs, [], tcEnvAtEnd, tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls(rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType)
let res = (EmptyTopAttrs, [], tcEnv, tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls(rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType, createsGeneratedProvidedTypes)
return res

| ParsedInput.ImplFile (ParsedImplFileInput(filename,_,qualNameOfFile,_,_,_,_) as file) ->
Expand All @@ -5277,7 +5281,7 @@ let TypeCheckOneInputEventually
let tcImplEnv = tcState.tcsTcImplEnv

// Typecheck the implementation file
let! topAttrs,implFile,tcEnvAtEnd =
let! topAttrs, implFile, tcEnvAtEnd, createsGeneratedProvidedTypes =
TypeCheckOneImplFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcImplEnv rootSigOpt file

let hadSig = Option.isSome rootSigOpt
Expand Down Expand Up @@ -5320,14 +5324,15 @@ let TypeCheckOneInputEventually
if verbose then dprintf "done TypeCheckOneInputEventually...\n"

let topSigsAndImpls = RootSigsAndImpls(rootSigs,rootImpls,allSigModulTyp,allImplementedSigModulTyp)
let res = (topAttrs,[implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType)
let res = (topAttrs,[implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType, createsGeneratedProvidedTypes)
return res }

return (tcEnvAtEnd,topAttrs,mimpls),
return (tcEnvAtEnd,topAttrs,implFiles),
{ tcState with
tcsCcuType=ccuType
tcsTcSigEnv=tcSigEnv
tcsTcImplEnv=tcImplEnv
tcsCreatesGeneratedProvidedTypes=tcState.tcsCreatesGeneratedProvidedTypes || createsGeneratedProvidedTypes
tcsRootSigsAndImpls = topSigsAndImpls }
with e ->
errorRecovery e range0
Expand All @@ -5344,14 +5349,14 @@ let TypeCheckOneInput (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, pre

/// Finish checking multiple files (or one interactive entry into F# Interactive)
let TypeCheckMultipleInputsFinish(results,tcState: TcState) =
let tcEnvsAtEndFile,topAttrs,mimpls = List.unzip3 results
let tcEnvsAtEndFile,topAttrs,implFiles = List.unzip3 results

let topAttrs = List.foldBack CombineTopAttrs topAttrs EmptyTopAttrs
let mimpls = List.concat mimpls
let implFiles = List.concat implFiles
// This is the environment required by fsi.exe when incrementally adding definitions
let tcEnvAtEndOfLastFile = (match tcEnvsAtEndFile with h :: _ -> h | _ -> tcState.TcEnvFromSignatures)

(tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState
(tcEnvAtEndOfLastFile,topAttrs,implFiles),tcState

/// Check multiple files (or one interactive entry into F# Interactive)
let TypeCheckMultipleInputs (ctok, checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) =
Expand All @@ -5378,7 +5383,7 @@ let TypeCheckClosedInputSetFinish (declaredImpls: TypedImplFile list, tcState) =

let TypeCheckClosedInputSet (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) =
// tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions
let (tcEnvAtEndOfLastFile, topAttrs, mimpls),tcState = TypeCheckMultipleInputs (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs)
let tcState, declaredImpls = TypeCheckClosedInputSetFinish (mimpls, tcState)
let (tcEnvAtEndOfLastFile, topAttrs, implFiles),tcState = TypeCheckMultipleInputs (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs)
let tcState, declaredImpls = TypeCheckClosedInputSetFinish (implFiles, tcState)
tcState, topAttrs, declaredImpls, tcEnvAtEndOfLastFile

2 changes: 2 additions & 0 deletions src/fsharp/CompileOps.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,8 @@ type TcState =

member NextStateAfterIncrementalFragment : TcEnv -> TcState

member CreatesGeneratedProvidedTypes : bool

/// Get the initial type checking state for a set of inputs
val GetInitialTcState :
range * string * TcConfig * TcGlobals * TcImports * Ast.NiceNameGenerator * TcEnv -> TcState
Expand Down
16 changes: 11 additions & 5 deletions src/fsharp/TypeChecker.fs
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ let AddDeclaredTypars check typars env =
let env = ModifyNameResEnv (fun nenv -> AddDeclaredTyparsToNameEnv check nenv typars) env
RegisterDeclaredTypars typars env

/// Compilation environment for typechecking a compilation unit. Contains the
/// Compilation environment for typechecking a single file in an assembly. Contains the
/// F# and .NET modules loaded from disk, the search path, a table indicating
/// how to List.map F# modules to assembly names, and some nasty globals
/// related to type inference. These are:
Expand All @@ -534,6 +534,9 @@ type cenv =
/// Checks to run after all inference is complete.
mutable postInferenceChecks: ResizeArray<unit -> unit>

/// Set to true if this file causes the creation of generated provided types.
mutable createsGeneratedProvidedTypes: bool

/// Are we in a script? if so relax the reporting of discarded-expression warnings at the top level
isScript: bool

Expand Down Expand Up @@ -573,6 +576,7 @@ type cenv =
amap = amap
recUses = ValMultiMap<_>.Empty
postInferenceChecks = ResizeArray()
createsGeneratedProvidedTypes = false
topCcu = topCcu
isScript = isScript
css = ConstraintSolverState.New(g,amap,infoReader,tcVal)
Expand Down Expand Up @@ -14686,6 +14690,8 @@ module EstablishTypeDefinitionCores =
let nm = theRootTypeWithRemapping.PUntaint((fun st -> st.FullName),m)
error(Error(FSComp.SR.etErasedTypeUsedInGeneration(desig,nm),m))

cenv.createsGeneratedProvidedTypes <- true

// In compiled code, all types in the set of generated types end up being both generated and relocated, unless relocation is suppressed
let isForcedSuppressRelocate = theRootTypeWithRemapping.PUntaint((fun st -> st.IsSuppressRelocate),m)
if isForcedSuppressRelocate && canAccessFromEverywhere tycon.Accessibility && not cenv.isScript then
Expand Down Expand Up @@ -17014,14 +17020,14 @@ let TypeCheckOneImplFile
conditionallySuppressErrorReporting (checkForErrors()) (fun () ->
try
let reportErrors = not (checkForErrors())
Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland)
PostTypeCheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland)
with e ->
errorRecovery e m
false)

let implFile = TImplFile(qualNameOfFile,scopedPragmas, implFileExprAfterSig, hasExplicitEntryPoint,isScript)
let implFile = TImplFile(qualNameOfFile, scopedPragmas, implFileExprAfterSig, hasExplicitEntryPoint, isScript)

return (topAttrs,implFile,envAtEnd)
return (topAttrs,implFile,envAtEnd,cenv.createsGeneratedProvidedTypes)
}


Expand All @@ -17041,5 +17047,5 @@ let TypeCheckOneSigFile (g,niceNameGen,amap,topCcu,checkForErrors,conditionalDe
try sigFileType |> IterTyconsOfModuleOrNamespaceType (FinalTypeDefinitionChecksAtEndOfInferenceScope(cenv.infoReader, tcEnv.NameEnv, cenv.tcSink, false, tcEnv.DisplayEnv))
with e -> errorRecovery e qualNameOfFile.Range

return (tcEnv,tcEnv,sigFileType)
return (tcEnv,sigFileType,cenv.createsGeneratedProvidedTypes)
}
4 changes: 2 additions & 2 deletions src/fsharp/TypeChecker.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ val TypeCheckOneImplFile :
-> TcEnv
-> Tast.ModuleOrNamespaceType option
-> ParsedImplFileInput
-> Eventually<TopAttribs * Tast.TypedImplFile * TcEnv>
-> Eventually<TopAttribs * Tast.TypedImplFile * TcEnv * bool>

val TypeCheckOneSigFile :
TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines * NameResolution.TcResultsSink
-> TcEnv
-> ParsedSigFileInput
-> Eventually<TcEnv * TcEnv * ModuleOrNamespaceType >
-> Eventually<TcEnv * ModuleOrNamespaceType * bool>

//-------------------------------------------------------------------------
// Some of the exceptions arising from type checking. These should be moved to
Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/vs/IncrementalBuild.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1442,7 +1442,7 @@ type IncrementalBuilder(tcGlobals,frameworkTcImports, nonFrameworkAssemblyInputs
// We return 'None' for the assembly portion of the cross-assembly reference
let hasTypeProviderAssemblyAttrib =
topAttrs.assemblyAttrs |> List.exists (fun (Attrib(tcref,_,_,_,_,_,_)) -> tcref.CompiledRepresentationForNamedType.BasicQualifiedName = typeof<Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute>.FullName)
if hasTypeProviderAssemblyAttrib then
if tcState.CreatesGeneratedProvidedTypes || hasTypeProviderAssemblyAttrib then
None
else
Some (RawFSharpAssemblyDataBackedByLanguageService (tcConfig,tcGlobals,tcState,outfile,topAttrs,assemblyName,ilAssemRef) :> IRawFSharpAssemblyData)
Expand Down
2 changes: 1 addition & 1 deletion tests/service/CSharpProjectAnalysis.fs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#if INTERACTIVE
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll"
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll" // note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
#r "../../bin/v4.5/CSharp_Analysis.dll"
#r "../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
#load "FsUnit.fs"
Expand Down
30 changes: 14 additions & 16 deletions tests/service/Common.fs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,18 @@ let fsCoreDefaultReference() =
sysLib "FSharp.Core"
*)

let mkStandardProjectReferences () =
#if DOTNETCORE
let file = "Sample_NETCoreSDK_FSharp_Library_netstandard1.6.fsproj"
let projDir = Path.Combine(__SOURCE_DIRECTORY__, "../projects/Sample_NETCoreSDK_FSharp_Library_netstandard1.6")
readRefs projDir file
#else
[ yield sysLib "mscorlib"
yield sysLib "System"
yield sysLib "System.Core"
yield fsCoreDefaultReference() ]
#endif

let mkProjectCommandLineArgs (dllName, fileNames) =
let args =
[| yield "--simpleresolution"
Expand All @@ -117,17 +129,7 @@ let mkProjectCommandLineArgs (dllName, fileNames) =
yield "--target:library"
for x in fileNames do
yield x
let references =
#if DOTNETCORE
let file = "Sample_NETCoreSDK_FSharp_Library_netstandard1.6.fsproj"
let projDir = Path.Combine(__SOURCE_DIRECTORY__, "../projects/Sample_NETCoreSDK_FSharp_Library_netstandard1.6")
readRefs projDir file
#else
[ yield sysLib "mscorlib"
yield sysLib "System"
yield sysLib "System.Core"
yield fsCoreDefaultReference() ]
#endif
let references = mkStandardProjectReferences ()
for r in references do
yield "-r:" + r
|]
Expand All @@ -152,11 +154,7 @@ let mkProjectCommandLineArgsForScript (dllName, fileNames) =
yield "--target:library"
for x in fileNames do
yield x
// let implDir = Path.GetDirectoryName(typeof<System.Object>.Assembly.Location)
let references =
let file = "Sample_NETCoreSDK_FSharp_Library_netstandard1.6.fsproj"
let projDir = Path.Combine(__SOURCE_DIRECTORY__, "../projects/Sample_NETCoreSDK_FSharp_Library_netstandard1.6")
readRefs projDir file
let references = mkStandardProjectReferences ()
for r in references do
yield "-r:" + r
|]
Expand Down
2 changes: 1 addition & 1 deletion tests/service/EditorTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
// Use F# Interactive. This only works for FSHarp.Compiler.Service.dll which has a public API

#if INTERACTIVE
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll"
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll" // note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
#r "../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
#load "FsUnit.fs"
#load "Common.fs"
Expand Down
4 changes: 2 additions & 2 deletions tests/service/ExprTests.fs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#if INTERACTIVE
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll"
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll" // note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
#r "../../Debug/net40/bin/FSharp.Compiler.Service.ProjectCracker.dll"
#r "../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
#load "FsUnit.fs"
Expand Down Expand Up @@ -866,7 +866,7 @@ let ``Test expressions of declarations stress big expressions`` () =
// This should not stack overflow
printDeclarations None (List.ofSeq file1.Declarations) |> Seq.toList |> ignore

#if FX_ATLEAST_45 && !DOTNETCORE
#if !NO_PROJECTCRACKER && !DOTNETCORE

[<Test>]
let ``Check use of type provider that provides calls to F# code`` () =
Expand Down
2 changes: 1 addition & 1 deletion tests/service/FileSystemTests.fs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#if INTERACTIVE
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll"
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll" // note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
#r "../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
#load "FsUnit.fs"
#load "Common.fs"
Expand Down
2 changes: 1 addition & 1 deletion tests/service/FscTests.fs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#if INTERACTIVE
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll"
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll" // note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
#r "../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
#load "FsUnit.fs"
#load "Common.fs"
Expand Down
2 changes: 1 addition & 1 deletion tests/service/FsiTests.fs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#if INTERACTIVE
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll"
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll" // note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
#r "../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
#load "FsUnit.fs"
#load "Common.fs"
Expand Down
2 changes: 1 addition & 1 deletion tests/service/InteractiveCheckerTests.fs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#if INTERACTIVE
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll"
#r "../../Debug/net40/bin/FSharp.Compiler.Service.dll" // note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
#r "../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
#load "FsUnit.fs"
#load "Common.fs"
Expand Down
Loading