-
Notifications
You must be signed in to change notification settings - Fork 356
Move NetCore project to use .NET SDK #380
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
Conversation
|
This PR is pretty big and complicated. I recommend going through the commits individually and concentrating on areas you're at least slightly familiar with. @phenning, I included you because I'm removing some comments you added. Note we already have a @stephentoub and @GrabYourPitchforks, you're likely most interested in the first two of the three commits mentioning |
|
To help track which commits have been thoroughly checked, please tick those you are signing off on:
|
|
/ping reviewers |
wtgodbe
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Approving for the subset of commits I checked off, largely based off of the changes seeming reasonable/consistent, and the CI passing
- Formatting.NetCore now targets `netstandard1.3` - was `Profile259` aka `portable-net45+wp80+win8+wpa81`, approximately `netstandard1.0` - but Newtonsoft.Json.Bson supports `netstandard1.3` and up - use Newtonsoft.Json.Bson in NetCore projects - can now multi-target NetCore.Test as well nits: - align src/ Formatting projects as much as possible - align test/ Formatting projects as much as possible - clean up the Microsoft.TestCommon project slightly Notes: - NetCore project names make no sense but I'm leaving them alone for this PR - Formatting.NetCore does not build at this point due to `netstandard1.3` / `Profile259` differences
- remove deprecated `BsonWriter` mentions entirely - remove legacy BSON writer test workaround
- was not available in `Profile259` - leave tests to confirm correct operation w/ "real" class
- leave test to confirm `WebUtility` continues to behave about the same - handle `WebUtility` being a `public` class - change other tests to handle `WebUtility.UrlEncode(...)` encoding to uppercase - unlike `UriQueryUtility.UrlEncode(...)`
- use `ICloneable` copy to get more classes compiling - helps NetCore in similar way to existing `MediaTypeHeaderValueExtensions` - use `InvalidEnumArgumentException` copy to simplify code and testing - both not available in `netstandard1.3` (or available packages) but easily duplicated
- available (but not serializable) in `netstandard1.3`
- remove an unnecessary suppression about `MaxDepth` in `BaseJsonMediaTypeFormatter`
- `XsdDataContractExporter` remains unavailable - update XML DCS tests to handle this (previously not in NetCore assembly) - try various workarounds - `ReadOnlyStreamWithEncodingPreamble` causes tests to hit dotnet/runtime#80160 - restriction to UTF8 when writing is a significant issue
- my runtime clone was at 88868b7a781f4e5b9037b8721f30440207a7aa42
- add conditions to avoid references to version-specific API - remove references to internal dotnet/runtime code - rewrite some code more generically if performance impact likely minor - use Microsoft.TestCommon instead of directly relying on Xunit in tests - use C# 9.0
- remove `ReadOnlyStreamWithEncodingPreamble` and its tests - was insufficient in general and doesn't work correctly in `netstandard1.3` - see dotnet/runtime#80160 Now support a much broader set of encodings in JSON and XML formatters - not just UTF8, UTF16BE, and UTF16LE - JSON formatter already supported every encoding when `UseDataContractJsonSerializer` was `false` - no longer have this downside when property is `true` - however, quotas remain unsupported in `netstandard1.3` version of this formatter when property is `true` - XML formatter requirement for an XML declaration in non-UTF8 content was general and is no longer an issue
- use `DefaultContractResolver`, `GuidAttribute`, `TypeDescriptor`, `XmlElement`, `XmlNode` classes - use `IRequiredMemberSelector` interface - use `RequestMessage.CreateResponse()` extension method - all available in `netstandard1.3` - `JsonContractResolver` use is something of a late Newtonsoft.Json version reaction - was held back by missing `IRequiredMemberSelector`
- get classes now included in NetCore assembly compiling - `SerializationAttribute` is not available - therefore `Exception` is not serializable - therefore `DefaultContractResolver.IgnoreSerializableAttribute` is not available - `Stream.(Begin|End)(Read|Write)` and `Stream.Close()` are not available nit: clean up `MultipartFormDataStreamProvider` whitespace
- don't seem to be copied into test folder in CI builds
- new `[MethodImpl(...)]` attributes have downsides - also don't match `[StackTraceHidden]` semantics
|
Rebased and addressed @stephentoub's comments. @stephentoub any other thoughts❔ If none, please check the non- Other reviewers: Please look at the |
I don't have rights to click those checkmarks. I only reviewed the "Adjust TranscodingStream and related code to compile and run here" commit and it looked fine other than my feedback you addressed. |
That's a bit odd but thanks for letting me know where you'd focused. Much appreciated. |
|
To other reviewers: I also ticked the checkboxes for "Copy |
test/System.Net.Http.Formatting.Test/System.Net.Http.Formatting.Test.csproj
Show resolved
Hide resolved
wtgodbe
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Approving again for the last few commits I just looked at
Tratcher
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These TFM changes are breaking. Will this be a new major version?
I didn't review the tests.
src/System.Net.Http.Formatting/Formatting/JsonMediaTypeFormatter.cs
Outdated
Show resolved
Hide resolved
- mention `XmlDictionaryReader` instead
|
I've reviewed everything but the tests. |
Move NetCore project to use .NET SDK
netstandard1.3Profile259akaportable-net45+wp80+win8+wpa81, approximatelynetstandard1.0netstandard1.3and upReact to using Newtonsoft.Json.Bson everywhere
BsonWritermentions entirelyRemove unnecessary
ConcurrentDictionaryclassProfile259Remove
UriQueryUtilitybecauseWebUtilityis available everywhereWebUtilitycontinues to behave about the sameWebUtilitybeing apublicclassWebUtility.UrlEncode(...)encoding to uppercaseUriQueryUtility.UrlEncode(...)Add simple classes to NetCore project
ICloneablecopy to get more classes compilingMediaTypeHeaderValueExtensionsInvalidEnumArgumentExceptioncopy to simplify code and testingnetstandard1.3(or available packages) but easily duplicatedRemove unnecessary NetCore-specific GlobalSuppressions.cs file
Use
NameValueCollectioneverywherenetstandard1.3Add
MaxDepthsupport in NetCore assemblyMaxDepthinBaseJsonMediaTypeFormatterAdd
UseDataContractJsonSerializersupport in NetCore assemblyXsdDataContractExporterremains unavailableReadOnlyStreamWithEncodingPreamblecauses tests to hitJsonEncodingStreamWrappercannot handle UTF16 BOMs dotnet/runtime#80160Copy
TranscodingStreamand related files from dotnet/runtimeAdjust
TranscodingStreamand related code to compile and run hereUse
TranscodingStreamin JSON and XML formattersReadOnlyStreamWithEncodingPreambleand its testsnetstandard1.3JsonEncodingStreamWrappercannot handle UTF16 BOMs dotnet/runtime#80160UseDataContractJsonSerializerwasfalsetruenetstandard1.3version of this formatter when property istrueAdd
MediaTypeMappingssupport in NetCore assemblyAdd
IRequiredMemberSelectorsupport in NetCore assemblyRemove unnecessary NETFX_CORE workarounds
DefaultContractResolver,GuidAttribute,TypeDescriptor,XmlElement,XmlNodeclassesIRequiredMemberSelectorinterfaceRequestMessage.CreateResponse()extension methodnetstandard1.3JsonContractResolveruse is something of a late Newtonsoft.Json version reactionIRequiredMemberSelectorWork around missing features in
netstandard1.3SerializationAttributeis not availableExceptionis not serializableDefaultContractResolver.IgnoreSerializableAttributeis not availableStream.(Begin|End)(Read|Write)andStream.Close()are not availableMultipartFormDataStreamProviderwhitespaceEnsure a couple more assemblies are available