Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core clr support. #57

Merged
merged 46 commits into from
Aug 29, 2016
Merged
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
db5dfee
exec `dotnet new --lang f#` to create the .net cli project
enricosada Feb 25, 2016
70dfbb9
remove generated main
enricosada Feb 25, 2016
aa1d1e8
it's a library, so remove emitEntryPoint from project.json
enricosada Feb 25, 2016
355d853
add source files
enricosada Feb 25, 2016
28f94cd
remove netcore deps
enricosada Feb 25, 2016
a650509
use framework net46 instead of netcore (dnxcore50)
enricosada Feb 25, 2016
240f9b8
add framework Assemblies
enricosada Feb 25, 2016
3474d62
add nuget packages
enricosada Feb 25, 2016
ea78150
ignore project.lock.son
enricosada Feb 25, 2016
db5fa67
dotnet new the test project and use net46
enricosada Feb 25, 2016
27cf645
reference the project
enricosada Feb 25, 2016
3a05b52
add Argu specific smoke test
enricosada Feb 25, 2016
6e5cc65
add .NET core target
enricosada Feb 25, 2016
42f01a7
[netcore] use xmldocument package
enricosada Feb 25, 2016
c80f99b
[netcore] it's System.Xml.XDocument the right package
enricosada Feb 25, 2016
a141135
add dnxcore50 framework to test project
enricosada Feb 25, 2016
50e4167
build .net cli in appveyor
enricosada Feb 25, 2016
c757405
upgrade from dnxcore50 to netstandard1.5
enricosada Apr 12, 2016
6e7d717
fix appveyor
enricosada Apr 12, 2016
23a8560
fix the build.
matthid Jul 1, 2016
46b3046
increase version
matthid Jul 1, 2016
18a9373
make it compile again
matthid Jul 1, 2016
e5759cc
fix appveyor path
matthid Jul 2, 2016
4a6e356
update to preview2
matthid Jul 2, 2016
9abb5ab
update to preview2
matthid Jul 2, 2016
1d7d009
fix appveyor file
matthid Jul 2, 2016
60f5bf4
appveyor again
matthid Jul 2, 2016
66c43a1
update test project.json
matthid Jul 2, 2016
df0c1fc
feedback from @enricosada
matthid Jul 7, 2016
a7959dd
add env
matthid Jul 9, 2016
1dc959a
use netcoreapp1.0
matthid Jul 9, 2016
9b8ebc1
fix project.json
matthid Jul 9, 2016
64fb3a3
.NET Core sdk preview2 is installed by default in Visual Studio 2015 …
enricosada Jul 19, 2016
28036b1
create Release package with netcore
enricosada Jul 19, 2016
065b67c
move .net core tests under tests directory
enricosada Jul 19, 2016
ed08e6b
restore should restore both src and tests directory
enricosada Jul 19, 2016
858e8cd
no need for net40 in project.json, used only for netstandard1.6
enricosada Jul 19, 2016
ce21901
add .net core build/test/mergepackage to fake script
enricosada Jul 19, 2016
77495a3
fix nuget error when fsproj and project.json exists in same directory
enricosada Jul 19, 2016
8474c23
remove netcore build from appveyor
enricosada Jul 20, 2016
019ea75
Merge pull request #1 from enricosada/fix_argu_preview2
matthid Jul 20, 2016
4ff2ab8
Use FAKE dotnet CLI helpers
forki Jul 21, 2016
19a4b8e
Use proper FSharp.Core package
forki Jul 21, 2016
aa1b190
Merge pull request #2 from forki/core_clr
matthid Jul 21, 2016
0c0c8c1
add .netcore sdk to travis
enricosada Jul 27, 2016
a1a7dc1
Merge pull request #3 from enricosada/add_netcoresdk_to_travis
matthid Aug 25, 2016
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# dotnet cli
project.lock.json

# User-specific files
*.suo
*.user
Expand Down
2 changes: 2 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
os: Visual Studio 2015

configuration: Release
test:
assemblies:
Expand Down
25 changes: 25 additions & 0 deletions build.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,28 @@ Target "ReleaseGitHub" (fun _ ->
|> Async.RunSynchronously
)

// .NET Core SDK and .NET Core

let assertExitCodeZero x = if x = 0 then () else failwithf "Command failed with exit code %i" x

Target "Build.NetCore" (fun _ ->
Shell.Exec("dotnet", "restore") |> assertExitCodeZero
Shell.Exec("dotnet", "--verbose pack --configuration Release", "src/Argu") |> assertExitCodeZero
)

Target "RunTests.NetCore" (fun _ ->
Shell.Exec("dotnet", "--verbose run --configuration Release", "tests/Argu.NetCore.Tests") |> assertExitCodeZero
)

let isDotnetSDKInstalled = try Shell.Exec("dotnet", "--version") = 0 with _ -> false

Target "Nuget.AddNetCore" (fun _ ->
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do the packages need to be merged after creation? Can this not be handled by paket.template?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eventually it will

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@forki can't we just manually specify the CoreCLR bits in the files section? Or is there more to it?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we can, but lets use merge for now and do that when paket is ready.
it's all a bit of bootstrapping problem. Argu needs FAKE/Paket featrues and paket needs argu...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not atm, afaik, it's up to paket team, i'd like an helper cmd too.
That's the minimal flow (maintenance, easy to test) afaik to add support for .net core.
Also like that you dont need to redefine the dependencies inside paket.template (paket doesnt manage project.json), and are always aligned with project.json (used for build)

Are merged only:

  • lib/netstandard1.6 (the .net core assemblies)
  • the dependencies for .netstandard1.6, used only for that profile (no issue with others)

not the metadata like authors, etc, that's defined in paket.template already.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eiriktsarpalis @forki files is ok, problem are dependencies becasue doesnt support deps by conditional fw ( ref fsprojects/Paket#913 ).

propose by me workaround fsprojects/Paket#1539
and .net core discussion (the one we are having there) fsprojects/Paket#1793

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as note: i have written the dotnet mergenupkg tool for project without paket, just to make it easier the integration, but works where paket is used too. i see that as a temporary solution to an issue (until project.json => msbuild )

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm already creating a dnc helper in fake. Will send pull request to Enricos fork of argu soon

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@forki can we use argu or better chessie as the example for fake new dnc helpers?

In another pr if possibile, so we can iterate the design.

Atm this workflow work really well, checklist of steps, i'd like to make people use that atm, and update to fake helpers later.
i think that can speedup a little .net core adoption.

Also i think current one is not too bad, because make easy to see dotnet command, so can be run locally, no magic (atm people see dnc sdk as magic)

let nupkg = sprintf "../../bin/Argu.%s.nupkg" (release.NugetVersion)
let netcoreNupkg = sprintf "bin/Release/Argu.%s.nupkg" (release.NugetVersion)

Shell.Exec("dotnet", sprintf """mergenupkg --source "%s" --other "%s" --framework netstandard1.6 """ nupkg netcoreNupkg, "src/Argu/") |> assertExitCodeZero
)


Target "Release" DoNothing

Expand All @@ -191,7 +213,10 @@ Target "Default" DoNothing
"Default"
==> "PrepareRelease"
==> "Build.Net35"
=?> ("Build.NetCore", isDotnetSDKInstalled)
=?> ("RunTests.NetCore", isDotnetSDKInstalled)
==> "NuGet"
=?> ("Nuget.AddNetCore", isDotnetSDKInstalled)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This target should probably fail if CoreCLR is not installed, otherwise we risk pushing bad packages from machines that may lack it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, I'd be in favor of renaming the "NuGet" target to "NuGet.Paket" so that "NuGet" builds a complete package.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eiriktsarpalis it's easy with fake to make the conditional as you wish or change it based on env var, etc.

it's written like that so doesnt break the build when someones doesnt have that installed, that's my main fear.

Np about renaming Nuget, good 😄

==> "GenerateDocs"
==> "ReleaseDocs"
==> "NuGetPush"
Expand Down
3 changes: 3 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"projects":[ "src", "tests" ]
}
1 change: 1 addition & 0 deletions src/Argu/Argu.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<AssemblyName>Argu</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<Name>Argu</Name>
<ResolveNuGetPackages>false</ResolveNuGetPackages>
<TargetFrameworkProfile />
<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion>
</PropertyGroup>
Expand Down
15 changes: 12 additions & 3 deletions src/Argu/ArgumentParser.fs
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ and [<Sealed; NoEquality; NoComparison; AutoSerializable(false)>]
let ignoreUnrecognized = defaultArg ignoreUnrecognized false
let raiseOnUsage = defaultArg raiseOnUsage true
let inputs = match inputs with None -> getEnvironmentCommandLineArgs () | Some args -> args
let configurationReader = match configurationReader with Some c -> c | None -> ConfigurationReader.FromAppSettings()
let configurationReader = match configurationReader with Some c -> c | None -> ConfigurationReader.DefaultReader()

try
let appSettingsResults = parseKeyValueConfig configurationReader argInfo
Expand All @@ -171,8 +171,13 @@ and [<Sealed; NoEquality; NoComparison; AutoSerializable(false)>]
member __.ParseAppSettings (?xmlConfigurationFile : string, ?ignoreMissing : bool) : ParseResults<'Template> =
let configurationReader =
match xmlConfigurationFile with
| None -> ConfigurationReader.FromAppSettings()
| Some f -> ConfigurationReader.FromAppSettingsFile(f)
| None -> ConfigurationReader.DefaultReader()
| Some f ->
#if CORE_CLR
raise <| NotImplementedException "App.Config is not supported."
#else
ConfigurationReader.FromAppSettingsFile(f)
#endif

__.ParseConfiguration(configurationReader, ?ignoreMissing = ignoreMissing)

Expand All @@ -181,8 +186,12 @@ and [<Sealed; NoEquality; NoComparison; AutoSerializable(false)>]
/// <param name="ignoreMissing">Ignore errors caused by the Mandatory attribute. Defaults to false.</param>
[<Obsolete("Use ArgumentParser.ParseConfiguration method instead")>]
member __.ParseAppSettings(assembly : Assembly, ?ignoreMissing : bool) =
#if CORE_CLR
raise <| NotImplementedException "App.Config is not supported."
#else
let configurationReader = ConfigurationReader.FromAppSettings(assembly)
__.ParseConfiguration(configurationReader, ?ignoreMissing = ignoreMissing)
#endif

/// <summary>
/// Converts a sequence of template argument inputs into a ParseResults instance
Expand Down
14 changes: 13 additions & 1 deletion src/Argu/ConfigReaders.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
open System
open System.IO
open System.Collections.Generic

#if !CORE_CLR
open System.Configuration
open System.Reflection

Expand Down Expand Up @@ -68,4 +70,14 @@ type ConfigurationReader =

/// Create a configuration reader instance using an F# function
static member FromFunction(reader : string -> string option, ?name : string) =
new FunctionConfigurationReader(reader, ?name = name) :> IConfigurationReader
new FunctionConfigurationReader(reader, ?name = name) :> IConfigurationReader

static member DefaultReader () = ConfigurationReader.FromAppSettings()
#else
/// Configuration reader implementations
type ConfigurationReader =
static member DefaultReader () =
{ new IConfigurationReader with
member x.Name = "Default - Empty Configuration Reader"
member x.GetValue k = null }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather this failed with a NotSupportedException

#endif
22 changes: 17 additions & 5 deletions src/Argu/PreCompute.fs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ let tryExtractUnionParameterLabel (p : PropertyInfo) =
else Some(p.Name.Replace('_',' '))

let (|NestedParseResults|Optional|List|Other|) (t : Type) =
#if CORE_CLR
if t.GetTypeInfo().IsGenericType then
#else
if t.IsGenericType then
#endif
let gt = t.GetGenericTypeDefinition()
if typeof<IParseResult>.IsAssignableFrom t then NestedParseResults(t.GetGenericArguments().[0])
elif gt = typedefof<_ option> then Optional(t.GetGenericArguments().[0])
Expand Down Expand Up @@ -95,7 +99,11 @@ let primitiveParsers =

/// Creates a primitive parser from an enumeration
let tryGetEnumerationParser label (t : Type) =
#if CORE_CLR
if not (t.GetTypeInfo().IsEnum) then None else
#else
if not t.IsEnum then None else
#endif
let names = Enum.GetNames(t) |> Seq.map generateEnumName
let values = Enum.GetValues(t) |> Seq.cast<obj>
let index = Seq.zip names values |> Seq.toArray
Expand Down Expand Up @@ -211,7 +219,7 @@ let rec private preComputeUnionCaseArgInfo (stack : Type list) (helpParam : Help
let fields = uci.GetFields()
let types = fields |> Array.map (fun f -> f.PropertyType)

let caseCtor = FSharpValue.PreComputeUnionConstructor(uci, bindingFlags = allBindings)
let caseCtor = FSharpValue.PreComputeUnionConstructor(uci, allBindings)

// create a dummy instance for given union case
let dummyFields = types |> Array.map Unchecked.UntypedDefaultOf
Expand Down Expand Up @@ -386,7 +394,7 @@ let rec private preComputeUnionCaseArgInfo (stack : Type list) (helpParam : Help
let tupleType = FSharpType.MakeTupleType types
FSharpValue.PreComputeTupleConstructor tupleType)

let fieldReader = lazy(FSharpValue.PreComputeUnionReader(uci, bindingFlags = allBindings))
let fieldReader = lazy(FSharpValue.PreComputeUnionReader(uci, allBindings))

let assignParser = lazy(
match customAssignmentSeparator with
Expand Down Expand Up @@ -439,11 +447,15 @@ let rec private preComputeUnionCaseArgInfo (stack : Type list) (helpParam : Help
uai

and private preComputeUnionArgInfoInner (stack : Type list) (helpParam : HelpParam option) (tryGetParent : unit -> UnionCaseArgInfo option) (t : Type) : UnionArgInfo =
if not <| FSharpType.IsUnion(t, bindingFlags = allBindings) then
if not <| FSharpType.IsUnion(t, allBindings) then
arguExn "template type '%O' is not an F# union." t
elif stack |> List.exists ((=) t) then
arguExn "template type '%O' implements unsupported recursive pattern." t
#if CORE_CLR
elif t.GetTypeInfo().IsGenericType then
#else
elif t.IsGenericType then
#endif
arguExn "template type '%O' is generic; this is not supported." t

let helpParam =
Expand All @@ -469,7 +481,7 @@ and private preComputeUnionArgInfoInner (stack : Type list) (helpParam : HelpPar
let getCurrent = fun () -> !current

let caseInfo =
FSharpType.GetUnionCases(t, bindingFlags = allBindings)
FSharpType.GetUnionCases(t, allBindings)
|> Seq.map (preComputeUnionCaseArgInfo (t :: stack) (Some helpParam) getCurrent)
|> Seq.sortBy (fun a -> a.Tag)
|> Seq.toArray
Expand Down Expand Up @@ -511,7 +523,7 @@ and private preComputeUnionArgInfoInner (stack : Type list) (helpParam : HelpPar
if not <| regex.IsMatch arg then [||]
else Array.init (arg.Length - 1) (fun i -> sprintf "-%c" arg.[i + 1]))

let tagReader = lazy(FSharpValue.PreComputeUnionTagReader(t, bindingFlags = allBindings))
let tagReader = lazy(FSharpValue.PreComputeUnionTagReader(t, allBindings))

let cliIndex = lazy(
caseInfo
Expand Down
2 changes: 2 additions & 0 deletions src/Argu/UnionArgInfo.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ module internal Argu.UnionArgInfo

open System
open System.IO
#if !CORE_CLR
open System.Configuration
#endif
open System.Collections.Generic
open System.Reflection

Expand Down
38 changes: 29 additions & 9 deletions src/Argu/Utils.fs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ open FSharp.Reflection
open FSharp.Quotations
open FSharp.Quotations.Patterns

#if NETSTANDARD1_6
let allBindings = true
#else
let allBindings = BindingFlags.NonPublic ||| BindingFlags.Public ||| BindingFlags.Static ||| BindingFlags.Instance
#endif

let inline arguExn fmt = Printf.ksprintf(fun msg -> raise <| new ArguException(msg)) fmt

Expand Down Expand Up @@ -115,14 +119,24 @@ type Unchecked =
}

type MemberInfo with
member m.ContainsAttribute<'T when 'T :> Attribute> () =
m.GetCustomAttributes(typeof<'T>, true) |> Array.isEmpty |> not
member m.ContainsAttribute<'T when 'T :> Attribute> () : bool=
m.GetCustomAttributes(typeof<'T>, true) |> Seq.isEmpty |> not

member m.TryGetAttribute<'T when 'T :> Attribute> () =
match m.GetCustomAttributes(typeof<'T>, true) with
member m.TryGetAttribute<'T when 'T :> Attribute> () : 'T option =
match m.GetCustomAttributes(typeof<'T>, true) |> Seq.toArray with
| [||] -> None
| attrs -> attrs |> Array.last |> unbox<'T> |> Some
| attrs -> attrs |> Array.last :?> 'T |> Some

#if CORE_CLR
type Type with
member x.GetCustomAttributes(t, b : bool) = x.GetTypeInfo().GetCustomAttributes(t, b)

member m.ContainsAttribute<'T when 'T :> Attribute> () : bool=
m.GetTypeInfo().ContainsAttribute<'T>()

member m.TryGetAttribute<'T when 'T :> Attribute> () : 'T option =
m.GetTypeInfo().TryGetAttribute<'T>()
#endif

type IDictionary<'K,'V> with
member d.TryFind k =
Expand All @@ -131,19 +145,25 @@ type IDictionary<'K,'V> with
else None


#if !CORE_CLR
let currentProgramName = lazy(System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName)
#else
// error FS0039: The value, constructor, namespace or type 'Process' is not defined
let currentProgramName = lazy("wtf")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surely, there must be a way to get the process name here

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can look again, but I couldn't make if work at the time. But you are right it shouldn't stay this way :)

#endif

type UnionCaseInfo with
member uci.GetAttributes<'T when 'T :> Attribute> (?includeDeclaringTypeAttrs : bool) =
let includeDeclaringTypeAttrs = defaultArg includeDeclaringTypeAttrs false

let caseAttrs = uci.GetCustomAttributes typeof<'T>
let caseAttrs = uci.GetCustomAttributes typeof<'T> |> Seq.cast<Attribute>
let attrs =
if includeDeclaringTypeAttrs then
uci.DeclaringType.GetCustomAttributes(typeof<'T>, false)
|> Seq.cast<Attribute>
|> Seq.append caseAttrs
else
caseAttrs :> _
caseAttrs

attrs |> Seq.map (fun o -> o :?> 'T)

Expand All @@ -152,7 +172,7 @@ type UnionCaseInfo with

match uci.GetCustomAttributes typeof<'T> with
| [||] when includeDeclaringTypeAttrs ->
match uci.DeclaringType.GetCustomAttributes(typeof<'T>, false) with
match uci.DeclaringType.GetCustomAttributes(typeof<'T>, false) |> Seq.toArray with
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the change here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On dotnetcore the GetCustomAttributes returns a sequence instead of an array. With this change no #if is required (and shouldn't be too bad as toArray should check if it's already an array internally).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wow, the coreclr team has taken breaking compatibility really seriously 👎

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's good to see the CoreCLR/CoreFx teams taking this opportunity to fix up some poor APIs in the original BCL.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eiriktsarpalis that's because .net core started as minimal with a cleanup of api. Instead of do like Directoy.GetFiles (array) vs Directoy.EnumerateFiles (ienumerable) in .net full, the fixed the api.

i think, ihmo, is better to evolve the api, if updating the code is easy, instead of adding duplicated functions.

But they got the issue about compatibility (drop in replacement), so each version of netstandard bring the api surface near the current one (netstandard1.3 -> 1.5 -> 1.6), so for netstandard2.0 is pratically overlapping with net45 and mono.

Copy link
Member

@eiriktsarpalis eiriktsarpalis Jul 21, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@enricosada I see your point, my feeling though is that such superficial changes cause more problems than what they allegedly solve. It's good that the coreclr team has come to terms with this.

| [||] -> None
| attrs -> Some (attrs.[0] :?> 'T)
| [||] -> None
Expand All @@ -162,7 +182,7 @@ type UnionCaseInfo with
let includeDeclaringTypeAttrs = defaultArg includeDeclaringTypeAttrs false
if uci.GetCustomAttributes typeof<'T> |> Array.isEmpty |> not then true
elif includeDeclaringTypeAttrs then
uci.DeclaringType.GetCustomAttributes(typeof<'T>, false) |> Array.isEmpty |> not
uci.DeclaringType.GetCustomAttributes(typeof<'T>, false) |> Seq.isEmpty |> not
else
false

Expand Down
49 changes: 49 additions & 0 deletions src/Argu/project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"version": "3.1.0",
"buildOptions": {
"debugType": "portable",
"compilerName": "fsc",
"define": [
"CORE_CLR"
],
"compile": {
"includeFiles": [
"AssemblyInfo.fs",
"Types.fs",
"Attributes.fs",
"Utils.fs",
"ConfigReaders.fs",
"UnionArgInfo.fs",
"PreCompute.fs",
"UnParsers.fs",
"ParseResults.fs",
"Parsers/Common.fs",
"Parsers/Cli.fs",
"Parsers/KeyValue.fs",
"ArgumentParser.fs"
]
}
},
"tools": {
"dotnet-mergenupkg": "1.0.*",
"dotnet-compile-fsc": {
"version": "1.0.0-preview2-*",
"imports": "dnxcore50"
}
},
"frameworks": {
"netstandard1.6": {
"buildOptions": {
"define": [
"NETSTANDARD1_5",
"NETSTANDARD1_6"
]
},
"dependencies": {
"System.Xml.XDocument": "4.0.11",
"Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be removed and https://www.nuget.org/packages/FSharp.Core/4.0.1.7-alpha used instead below instead of 4.0.0.1?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the FSharp.Core is really new, i'd like to wait one or two days until is tested.
And it's the same as Microsoft.FSharp.Core.netcore for netstandard (is merged inside).
I think when ready the Microsoft.FSharp.Core.netcore will become an alias (as metapackage) for FSharp.Core.

@ctaggart my pr i remove the .net 40 version from project.json, so no problem about that.

"NETStandard.Library": "1.6.0"
}
}
}
}
Loading