-
Notifications
You must be signed in to change notification settings - Fork 352
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:
|
77a9a81
to
327f780
Compare
/ping reviewers |
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
327f780
to
8d057eb
Compare
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
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
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.3
Profile259
akaportable-net45+wp80+win8+wpa81
, approximatelynetstandard1.0
netstandard1.3
and upReact to using Newtonsoft.Json.Bson everywhere
BsonWriter
mentions entirelyRemove unnecessary
ConcurrentDictionary
classProfile259
Remove
UriQueryUtility
becauseWebUtility
is available everywhereWebUtility
continues to behave about the sameWebUtility
being apublic
classWebUtility.UrlEncode(...)
encoding to uppercaseUriQueryUtility.UrlEncode(...)
Add simple classes to NetCore project
ICloneable
copy to get more classes compilingMediaTypeHeaderValueExtensions
InvalidEnumArgumentException
copy to simplify code and testingnetstandard1.3
(or available packages) but easily duplicatedRemove unnecessary NetCore-specific GlobalSuppressions.cs file
Use
NameValueCollection
everywherenetstandard1.3
Add
MaxDepth
support in NetCore assemblyMaxDepth
inBaseJsonMediaTypeFormatter
Add
UseDataContractJsonSerializer
support in NetCore assemblyXsdDataContractExporter
remains unavailableReadOnlyStreamWithEncodingPreamble
causes tests to hitJsonEncodingStreamWrapper
cannot handle UTF16 BOMs dotnet/runtime#80160Copy
TranscodingStream
and related files from dotnet/runtimeAdjust
TranscodingStream
and related code to compile and run hereUse
TranscodingStream
in JSON and XML formattersReadOnlyStreamWithEncodingPreamble
and its testsnetstandard1.3
JsonEncodingStreamWrapper
cannot handle UTF16 BOMs dotnet/runtime#80160UseDataContractJsonSerializer
wasfalse
true
netstandard1.3
version of this formatter when property istrue
Add
MediaTypeMappings
support in NetCore assemblyAdd
IRequiredMemberSelector
support in NetCore assemblyRemove unnecessary NETFX_CORE workarounds
DefaultContractResolver
,GuidAttribute
,TypeDescriptor
,XmlElement
,XmlNode
classesIRequiredMemberSelector
interfaceRequestMessage.CreateResponse()
extension methodnetstandard1.3
JsonContractResolver
use is something of a late Newtonsoft.Json version reactionIRequiredMemberSelector
Work around missing features in
netstandard1.3
SerializationAttribute
is not availableException
is not serializableDefaultContractResolver.IgnoreSerializableAttribute
is not availableStream.(Begin|End)(Read|Write)
andStream.Close()
are not availableMultipartFormDataStreamProvider
whitespaceEnsure a couple more assemblies are available