{"action":"created","issue":{"url":"https://api.github.com/repos/fsprojects/Paket/issues/2317","repository_url":"https://api.github.com/repos/fsprojects/Paket","labels_url":"https://api.github.com/repos/fsprojects/Paket/issues/2317/labels{/name}","comments_url":"https://api.github.com/repos/fsprojects/Paket/issues/2317/comments","events_url":"https://api.github.com/repos/fsprojects/Paket/issues/2317/events","html_url":"https://github.com/fsprojects/Paket/issues/2317","id":226855218,"number":2317,"title":"Cleanup and Fix Framework restrictions","user":{"login":"matthid","id":1866463,"avatar_url":"https://avatars3.githubusercontent.com/u/1866463?v=3","gravatar_id":"","url":"https://api.github.com/users/matthid","html_url":"https://github.com/matthid","followers_url":"https://api.github.com/users/matthid/followers","following_url":"https://api.github.com/users/matthid/following{/other_user}","gists_url":"https://api.github.com/users/matthid/gists{/gist_id}","starred_url":"https://api.github.com/users/matthid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthid/subscriptions","organizations_url":"https://api.github.com/users/matthid/orgs","repos_url":"https://api.github.com/users/matthid/repos","events_url":"https://api.github.com/users/matthid/events{/privacy}","received_events_url":"https://api.github.com/users/matthid/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2017-05-07T12:22:09Z","updated_at":"2017-05-07T12:35:01Z","closed_at":null,"body":"### Intro\r\n\r\nFramework restrictions are a feature to handle NuGet dependency groups. That is their primary responsibility. Sadly we leak that implementation detail in the `paket.dependency` and `paket.references` files with confusing effects for the user.\r\n\r\n### Description\r\n\r\nThere is no user definition on what `>= netstandard1.3` or `<= net45` means. But both are allowed in all paket files, with a wide range of unexpected effects.\r\n\r\nPaket internally uses `>=` and `<=` to define special operations which are not easily explained and have nothing to do with \"compatible with\" (as one might assume).\r\nFor example \">= netstandard13\" currently means \"a NetStandard framework with a higher version than 1.3\" and NOT \"any target framework compatible with netstandard 1.3\", because that would include some net-frameworks, see https://github.com/fsprojects/Paket/blob/654b2393ecbc6cdb35f7f25b30d0746d21ef1f8e/src/Paket.Core/Versioning/Requirements.fs#L502-L535 \r\n\r\n### Possible actions\r\n\r\n1. We need to define `>=` and `<=` or mark them invalid\r\n1. We need to define `>` and `<` or mark them invalid\r\n1. We need to change the implementation to handle the definition accordingly\r\n1. In that process we might need to cleanup some internal data structures in paket to make this part more understandable.\r\n1. We need to ensure that we do not strongly couple any definition with the original goal of framework restrictions (of the definitions are slightly different). So we might need different operators in the lock-file or have multiple meanings of `>=`...\r\n\r\n### Disclaimer\r\n\r\nI really think stuff is working quite well. So any change in this needs to be really carefully reviewed. As we don't have any documentation on `>=` and `<=` I don't think breaking stuff there is quite as important. I know that since the early netstandard hacks some people use `>= net45` to get rid of netstandard dependencies."},"comment":{"url":"https://api.github.com/repos/fsprojects/Paket/issues/comments/299703514","html_url":"https://github.com/fsprojects/Paket/issues/2317#issuecomment-299703514","issue_url":"https://api.github.com/repos/fsprojects/Paket/issues/2317","id":299703514,"user":{"login":"matthid","id":1866463,"avatar_url":"https://avatars3.githubusercontent.com/u/1866463?v=3","gravatar_id":"","url":"https://api.github.com/users/matthid","html_url":"https://github.com/matthid","followers_url":"https://api.github.com/users/matthid/followers","following_url":"https://api.github.com/users/matthid/following{/other_user}","gists_url":"https://api.github.com/users/matthid/gists{/gist_id}","starred_url":"https://api.github.com/users/matthid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthid/subscriptions","organizations_url":"https://api.github.com/users/matthid/orgs","repos_url":"https://api.github.com/users/matthid/repos","events_url":"https://api.github.com/users/matthid/events{/privacy}","received_events_url":"https://api.github.com/users/matthid/received_events","type":"User","site_admin":false},"created_at":"2017-05-07T12:35:01Z","updated_at":"2017-05-07T12:35:01Z","body":"About the last statement: I don't think it matters if we break anything. They probably won't notice because a lot of libraries provide only a netstandard target and then netstandard packages are pulled anyway..\r\nAnd breaking changes there won't/shouldn't even affect compilation. So I think redefining `>=` and `<=` is quite safe.\r\n\r\nHere is my suggestion:\r\n\r\n - We leave the definition of framework restrictions itself untouched (they are for the TARGET framework you are compiling for). Everything else is way more confusing as it is already. You tell paket what you compile for to improve the resolution process. This is an easy definition. If you set `= netstandard13` in the deps file and compile for `net46` its a user error.\r\n - `>=` in user files means compatible with (`>` is the same but without the actual given framework). So this defines a set of frameworks. So `>=` is equivalent to listing all those frameworks.\r\n - `<=` in itself is not defined. It is only an addition to a `>=` set, to reduce it\r\n    - `<= net45` <- syntax error.\r\n    -  `>= netstandard13 <= net45` the set `>= netstandard13` without the set of `>= net45`\r\n\r\n "}}
{"actor":{"display_login":"matthid"}}