Commit Graph

86 Commits

Author SHA1 Message Date
Pranav K b34c5ddd5f
Prevent dotnet-watch script injection staleness (#27778)
The browser refresh mechansim used by dotnet-watch and VS modifies HTML content. The modified content includes
a script block that has a WebSocket url that changes for each new execution of dotnet watch run (not rebuilds, but watch itself).
HTML content can come from views or static html files on disk. For the latter, ASP.NET Core participates in browser caching by sending (and invalidating) etag headers.

One way to fix this problem is remove or modify the etag headers. The risk here is that might cause differences in behavior in development users may come to rely on that are unavailable in production. This change instead modifies the HTML content so the output is always consistent and consequently safe to cache. The dynamic content is served separately by the injected middleware.

This change fixes the issue of multiple instances of dotnet-watch. While this issue may crop up if you alternate between dotnet run and dotnet watch run but we haven't seen this being an issue as yet.

Fixes #27548

Summary
Running dotnet watch run multiple times in Blazor WASM apps (or any app that serves static html files) can produce console errors and prevent the browser refresh feature from working. Given that we've been telling our users to use dotnet watch run as their primary way to work outside of VS, it's likely more users would run in this.

Customer impact
A hard browser refresh (Ctrl + R) is needed to get the refresh behavior to work.

Regression
No. This has existed since the feature was introduced we did not get reports of it

Risk
Low. The fix is isolated to dotnet-watch and VS's browser refresh mechanism which is in preview. The change was tested locally, but if there's a regression or if the change interferes with user's workflow, users have the ability to disable this feature.
2020-11-13 14:25:47 -08:00
Pranav K da3f97b0ad
Fix client validation for record types (#26159)
* Fix client validation for record types

Server validation for record types uses metadata from parameters
when validating record type properties. However client validation
does not use the parameter to harvest client validation attributes.

In the absence of this change, validation on parameters would require server
round trips which is unexcepted and not at parity with validation applied
to properties on regular classes or record types.

Validation experience with record types is subpar and requires server
round trips.

No. This feature is new to 5.0.

Low. The change is isolated to record types and does not affect other code paths. We have
unit and functional test coverage to verify this change.

* Correctly dispose app after use
2020-09-22 22:02:49 -07:00
Pranav K 140f177d9e
Converge implementations of AwaitableProcess and ProcessEx (#26069)
* Converge implementations of AwaitableProcess and ProcessEx

* dotnet-watch tests are running in to the same issue as GRPC tests (https://github.com/dotnet/aspnetcore/pull/20341/files).
This change carries over some of the patterns from the other type to remedy this issue.

* Revive dotnet-watch tests on OSX

* Remove build artifacts that were accidentally commited to source.
2020-09-18 16:32:06 -07:00
Pranav K 611ee61e0e
Quarantine tests (#26062) 2020-09-18 13:08:30 -07:00
Pranav K 2921f5514a
dotnet-watch: continue printing output to console after the app is ready (#25984)
dotnet-watch redirects standard out to detect when the app is launched and
prints these redirected messages to the console. Unfortunately once the app
is launched, redirected messages are no longer printed. This wasn't caught earlier
since ASP.NET Core is very quiet by default.

ASP.NET Core apps launched via dotnet watch do not print output to the console.

Yes. This was introduced as part of changes to dotnet-watch to launch a browser in 5.0-preview8.

Low.
2020-09-16 18:53:59 -07:00
Doug Bunting 6c29f44a0b
Reduce references to Microsoft.AspNetCore.App.Runtime.csproj (#25836)
- dotnet-watch builds against runtime in the SDK
- other projects build after runtime project due to Ref.csproj reference
  - but, when the targeting packs aren't building, there's no reason to use Ref.csproj
- followup on 76fbd1a283 and 84962660a3, reducing parallelism in build
2020-09-14 11:34:07 -07:00
Zachary Becknell fa2a5076e4
Add option to specify hostname in BrowserRefreshServer (#25572)
* Add option to specify hostName for refresh server

* Update env variable name per suggestion

Co-authored-by: Pranav K <prkrishn@hotmail.com>

Co-authored-by: Pranav K <prkrishn@hotmail.com>
2020-09-10 15:10:47 -07:00
Doug Bunting 1f84e28882
Use `$(TargetFrameworkIdentifier)` and `$(TargetFrameworkVersion)` consistently (#25428)
- always use `$([MSBuild]::VersionXYZ(...))` for version checks
- use `$(NETCoreAppFrameworkIdentifier)` where it's available
- move `$(KnownAppHostPackOrFrameworkReferenceTfm)` setting to Directory.Build.props
  - use it to correct `@(KnownFrameworkReference)` updates
  - metadata of those items still uses `netcoreapp5.0`
  - see also https://github.com/dotnet/efcore/pull/22279#discussion_r478674176

nits:
- do not assume `$(TargetFrameworkVersion)` starts with a 'v'; valid w/o it
- add `$(_IsMicrosoftNETCoreApp20OrOlder)` property in OpenAPI targets file
  - evaluate the `Condition` once instead of three times
2020-08-31 11:36:19 -07:00
Artak f891c2b15d
Merge pull request #25256 from dotnet/prkrishn/dotnet-watch
Allow dotnet watch to refresh on changes to .razor files in reference…
2020-08-28 20:23:59 -07:00
Pranav K c4dde35e37
Remove test 2020-08-26 13:48:19 -07:00
Pranav K 28e18c3058
Allow dotnet watch to refresh on changes to .razor files in referenced projects
dotnet-watch expects full paths to files to watch in all added items. For files in the current project, this
happens to work. However this does not work very well for files in referenced projects. Using the FullPath metadata
does not work during global evaluation, but we're able to do this in a target.

This change adds extensibility to the dotnet-watch tool that allows calling a target as part of "watch" evaluation.

Fixes https://github.com/dotnet/aspnetcore/issues/22219
2020-08-25 16:03:32 -07:00
Pranav K b0530a68c0
Do not include the shared framework in the packages (#24816)
* Do not include the shared framework in the packages

DevServer and dotnet-watch include binaries from the ASP.NET Core shared framework
as part of the package. This change compiles these projects against the most recently built
version of the shared framework which ensures build and publish work as normals. Individual
projects from the runtime can be referenced to pick up new runtime features when necessary

* More hacks!

* Ensure shared runtime is built before running tests

* Delete dotnet-watch.nuspec
2020-08-25 10:03:58 -07:00
Javier Calvarro Nelson 402dc41d33
[Blazor] Render Blazor Webassembly components from MVC (#25203)
* Server pieces

* Changes for prerendering

* Discover client components

* tmp

* Cleanup

* Cleanups

* Undo changes

* Remove unwanted changes

* Move interop class to its own file

* Cleanup unwanted changes

* Add test rendering multiple client-side components

* Unit tests and E2E tests

* Cleanups

* Addressed feedback

* Rename Client to WebAssembly in RenderMode

* Update generated js files

* Cleaned up JS and addressed feedback

* Client->WebAssembly and other feedback

* Unify component discovery code and use webassembly instead of 'client'

* Update js files

* Fix tests
2020-08-25 09:30:24 -07:00
Brennan 08bd3d7d5a
Fix #24846 by using ConditionalFact (#25041) 2020-08-19 12:31:18 -07:00
Chris Ross a9026f1e0f
Skip dotnet watch tests on ARM (#24846) 2020-08-14 22:39:33 -07:00
Pranav K 6e006e3e2a
Merge remote-tracking branch 'origin/release/5.0-preview8' 2020-08-10 11:39:18 -07:00
Pranav K 146d316bc5
Add a middleware for browser refresh. (#24574)
* Add a middleware for browser refresh.

* Introduce a middleware that can connect to the dotnet-watch change server
* dotnet-watch: Inject the middleware in 3.1 or apps using start hooks \ hosting startup

https://github.com/dotnet/aspnetcore/issues/23412

* Update src/Tools/dotnet-watch/BrowserRefresh/src/StartupHook.cs

* Changes per PR comments

* Add a test for reading the script

* Changes per PR comments

* Updates docs

* Fixup test

* Add project ref
2020-08-06 17:20:51 -07:00
Tanay Parikh 4aa5e03207
Unquarantine Tests (#24295)
* Unquarantine Tests
2020-07-28 11:21:33 -07:00
Tanay Parikh 3ea1fc7aac
Merge pull request #24258 from dotnet-maestro-bot/merge/release/5.0-preview8-to-master
[automated] Merge branch 'release/5.0-preview8' => 'master'
2020-07-24 11:11:33 -07:00
Pranav K 11835cf768
Add support for launching a browser on file change (#24220) 2020-07-23 17:04:31 -07:00
Stephen Halter 30c33aad11
Quarantine flaky tests (#23995) 2020-07-16 11:47:47 -07:00
Stephen Halter 7f4af095f7
Add timeout to all awaits in GlobbingAppTests (#23938) 2020-07-15 18:52:37 -07:00
Brennan aee40dbd36
Quarantine flaky Watch tests (#23855) 2020-07-10 15:34:10 -07:00
Pranav K 763a18ee56
Avoid running restores for dotnet-watch run (#23421)
* Tweaks to make dotnet-watch run faster

* Previously dotnet-watch calculated the watch file list on every run by invoking MSBuild. This
  changes the tool to only calculate it if an MSBuild file (.targets, .props, .csproj etc) file changed
* For dotnet watch run and dotnet watch test command, use --no-restore if changed file is not an MSBuild file.

* Add opt-out switch

* Update src/Tools/dotnet-watch/README.md

* Fixup typo

* Update src/Tools/dotnet-watch/README.md
2020-07-08 18:56:25 +00:00
Justin Kotalik 73555970ee
Quarantine dotnet-watch test (#23395)
* Quarantine dotnet-watch test

* Update ProgramTests.cs
2020-06-27 01:16:29 +00:00
Justin Kotalik 4ee3644166
Skip dotnet watch tests on arm (#23361) 2020-06-25 20:24:34 -07:00
Tanay Parikh 26cc3b43a2
Unquarantine Tests (#23098)
Found a bunch of tests running for 30+ days with 100% pass rate.
2020-06-22 17:54:52 -07:00
John Luo 675fd1413c
Quarantine test (#22981) 2020-06-15 19:48:33 -07:00
Matt Mitchell d8733c2a55
Build time changes (#22362)
* Build time changes
A few changes for build time
- Don't build tests with SkipTestBuild=true and use that for official
  build legs. This cuts 40%-50% off the msbuild invocations for build.
  The longest build leg drops by about 30 mins.
- Skip logging of some task parameters and their metadata.
  This reduces overall binlog size, which is a major contributor to
  build time.

Unfortunately, this does not mean we can yet turn binlogs back on. This
change can actually increase the overall binlog size due to logging of
more project started arguments. There is another optimization for this
in progress.

Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com>
2020-06-03 07:14:38 -07:00
Doug Bunting 256045729a
Add `SuccessfulTests` to ensure something runs in every non-Helix run (#22406)
* Remove extra `[SkipOnHelix]` attribute
- only need the one compiled into Microsoft.AspNetCore.Testing
- update the documentation to reflect this
  - nit: address Markdown warnings that VS Code showed

* Add `SuccessfulTests` to ensure something runs in every non-Helix runs
- #22241
- cleans up hundreds of warnings but leaves a couple for the Blazor tests assembly
  - see comments about xUnit runner command line in the new class
2020-06-02 12:19:28 -07:00
dotnet-maestro[bot] d5849f3534
[master] Update dependencies from dotnet/arcade dotnet/aspnetcore-tooling (#21630)
* Update dependencies from https://github.com/dotnet/arcade build 20200511.9
- Microsoft.DotNet.Arcade.Sdk: 5.0.0-beta.20228.4 => 5.0.0-beta.20261.9
- Microsoft.DotNet.GenAPI: 5.0.0-beta.20228.4 => 5.0.0-beta.20261.9
- Microsoft.DotNet.Helix.Sdk: 5.0.0-beta.20228.4 => 5.0.0-beta.20261.9

* Update dependencies from https://github.com/dotnet/aspnetcore-tooling build 20200514.6

Microsoft.AspNetCore.Mvc.Razor.Extensions , Microsoft.AspNetCore.Razor.Language , Microsoft.CodeAnalysis.Razor , Microsoft.NET.Sdk.Razor
 From Version 5.0.0-preview.5.20261.4 -> To Version 5.0.0-preview.6.20264.6

* Pre-emptively take -nobl change

* Disable binlogs in CI

* Fix build.sh to know about -nobl

* Align build.ps1|sh with latest Arcade parameters
- do not enable binary logs by default in CI builds
- leave `-binaryLog` and `-excludeCIBinaryLog` handling to eng/common/tools.ps1|sh
  - was unnecessary since `-bl /bl:{some name}` worked fine, ignoring OOMs

nit: document `-excludeCIBinarylog` a bit more

* Do not pass unknown options into CodeCheck.ps1

* Pass `-ci -nobl` into remaining CI build jobs

* Switch default TFM to `net5.0`

* Update missing project templates tfms

* Add more `-ci -nobl`
- needed because _all_ builds in the pipeline are implicitly CI builds
  - default-build.yml adds `-ci` when script wasn't explicit

* Default templates to net5.0

* PR feedback

* Update TFMs in explicit .nuspec files

* Update TFMs in test projects

* Update TFMs in test C# code

* Update TFMs in infrastructure files

* Future-proof a check for `net5.0` or later
- avoid comparisons involving `$(TargetFramework)` in .targets files
  - fine to compare it with `''` or `$(DefaultNetCoreTargetFramework)`

* !fixup! Undo a couple of earlier fixes
- remove a duplicate `$()` setting
- correct the one remaining versioned `#if` define
  - did not make it `#if NETCOREAPP` because benchmarks test numerous .NET Core TFMs

* Disable binary logs in CodeCheck.ps1

* Specify `-ci -nobl` just once when using `parameters.buildArgs`

* Restore `$binaryLog` default logic

Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com>
Co-authored-by: Will Godbe <wigodbe@microsoft.com>
Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>
2020-05-15 00:17:02 +00:00
Brennan 5fd4f87977
Avoid crashing in PollingFileWatcher (#21544) 2020-05-06 15:47:50 -07:00
John Luo 84a04c9df1
Quarantining tests (#20631)
* Quarantining tests

* Namespace collision
2020-04-08 12:53:53 -07:00
Ryan Nowak 2c1de1621e Social distancing for tests that are symptomatic
These tests failed in official builds last night.
2020-04-02 12:52:51 -07:00
Brennan 2a1cc04a32
Ignore bad restore sources (dotnet-watch tests) (#19893) 2020-03-16 12:59:50 -07:00
Brennan 56fb4b4d2f
Rename Flaky attribute (#19469) 2020-03-04 08:10:18 -08:00
Andrew Stanton-Nurse e65408a36c
unquarantine a pile of long-passing tests (#19440) 2020-02-28 19:02:58 +00:00
Brennan 169f07c667
Capture test output for tools tests (#19240) 2020-02-25 09:35:29 -08:00
John Luo 5f9f1ce183 Merge branch 'master' into johluo/migrating-extensions 2020-02-20 16:44:06 -08:00
Brennan b125c76d5f
Fix watch tests again (#19155) 2020-02-20 16:03:48 -08:00
John Luo 7d1f5d8c0b Updates for extensions migrations
- Multi-target ObjectPool
- Move Embedded.Manifest.Task.Internal.Entry to the public namespace
- Remove ref assemblies from AspNetCore.Testing
- Skip TestPathUtilitiesTest since it's a pattern we want to migrate away from
- Fix FileProviders.Abstractions version in Embedded.*.nuspec
- Add workarounds for project references to FileProviders.Embedded
2020-02-20 14:00:29 -08:00
Brennan 50ef4faf14
Fix dotnet watch tests on Helix (#19021) 2020-02-14 11:34:11 -08:00
Andrew Stanton-Nurse 36267e8baf
More quarantining (#18698)
* quarantine more

* actually quarantine signalr test

* more quarantining
2020-02-03 21:51:26 +00:00
Kevin Pilch 91d17f6c2d
Update links from aspnet/AspNetCore-Internal -> dotnet/aspnetcore-internal (#18540) 2020-01-23 12:21:06 -08:00
Kevin Pilch 0517745c08 aspnet/AspNetCore -> dotnet/aspnet
Except aspnet/AspNetCore-Internal.
2020-01-08 16:40:11 -08:00
Brennan Conroy f8ed1185e4 Re-enable tests 2019-11-11 10:07:02 -08:00
Brennan Conroy 6caada9c14 Merge branch 'merge/release/3.1-to-master' of https://github.com/dotnet-maestro-bot/AspNetCore into merge/release/3.1-to-master 2019-11-11 10:04:23 -08:00
Brennan 77afd21e90 Change how we resolve dotnet in tests (#16934) 2019-11-09 17:17:58 -08:00
Justin Kotalik 845e6d5512
Add rest of MsQuic transport. (#16812) 2019-11-07 20:53:33 -08:00
Doug Bunting 794365b340
Bring in more changes from 'release/3.1'
- skip failing `OpenApiFileTests` methods
  - #14021
- use `TestTFM`
- do not use `$(ExperimentalVersionPrefix)`
2019-09-19 08:04:30 -07:00