Commit Graph

181 Commits

Author SHA1 Message Date
Pranav K fbdf5c5b1c
Stop building dotnet-watch in AspNetCore (#29722)
* Stop building dotnet-watch in AspNetCore

* PR feedback
2021-02-09 18:43:18 -08:00
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
Doug Bunting ca8cc104f4
[release/5.0] Target 5.0.0 shared framework in global tools (#27599)
- #19108
- ensure the packaged runtimeconfig.json file uses the 5.0.0 shared framework
  - disable `$(TargetLatestDotNetRuntime)` in tool projects
  - skip `@(FrameworkReference)` item update if `$(TargetLatestDotNetRuntime)` is disabled

nit: Move `$(PackAsTool)` settings together
2020-11-10 09:46:06 -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
Kevin Pilch e3a52ee3de
Merge pull request #25881 from dotnet-maestro-bot/merge/release/5.0-to-release/5.0-rc2
[automated] Merge branch 'release/5.0' => 'release/5.0-rc2'
2020-09-14 15:24:14 -07:00
Martin Costello a0ede85a61
Fix MSB4109 (#25880)
Fix MSB4109 error when the Microsoft.Extensions.ApiDescription.Server NuGet package is installed.
2020-09-14 12:07:15 -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
Doug Bunting 31bd4d4b1d
[release/5.0] Correct baseline checks (#25227)
- mostly duplicates #25217
- update `BaselineGenerator` to produce baselines useful in 6.0 (too)
- update Baseline.Designer.props using new generator (matching 3.1.7 release)
- always suppress references expressed only in `*.nuspec` files
  - needed even in servicing builds
- restore warning and errors about removed references (new for 5.0)
  - adjust exclusions to handle `@(_ProjectReferenceByAssemblyName)` removal

nit: do not generate empty `<ItemGroup />` elements

* Correct `@(SuppressBaselineReference)` items
  - remove out-of-date `@(SuppressBaselineReference)` items
    - either 3.1.7 baselines we're using don't include reference or still using package
    - fix some comments and `Condition` attributes to make remainder easy to find
  - add missing `@(SuppressBaselineReference)` items
2020-08-28 09:53:20 -07:00
William Godbe ce058f639c
Add net461 TFM to netstandard2.0 projects (#25094)
* Add net461 TFM to netstandard2.0 projects

* Fix a couple of errors

* Fix some errors

* Get rid of Sockets reference

* Respond to feedback

* net461 -> property

* Fixup clientSample

* Remove net461 from analyzers/razor

* Remove net461 from test projects

* Feedback

* Add net461 test configs

* Remove some incompatible test configs

* Fix test
2020-08-27 16:05:40 -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
Javier Calvarro Nelson 3c34c3ab0d
[Https] Various improvements to the dev-certs tool (#25037)
* Add support for the trust option on Linux on the command-line tool and print a message when it's used pointing to docs.
* Bump the certificate version to 2 to ensure that the certificate gets updated for 5.0 on Mac OS.
* Ensure we always select the certificate with the highest available version to ensure that when we change the certificate in the future older runtimes pick up the new certificate.
* Support exporting the certificate without key on PEM format.
2020-08-20 09:55:56 -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
Doug Bunting 7efec87a14
Fix fetch of package version in eng/Publishing.props (#24777)
- target project is a test project; need to undo `$(SkipTestBuild)` impact in these jobs

nit: remove a comment from DeveloperCertificates project that's irrelevant now
2020-08-11 10:10:24 -07:00
Pranav K 059e2fdc49
Remove Internal.AspNetCore.Analyzers (#24693)
* Remove Internal.AspNetCore.Analyzers

This resolves build flakiness caused by referencing the analyzer:

```
2020-08-07T21:22:39.1149296Z ##[error].dotnet\sdk\5.0.100-rc.1.20379.10\Microsoft.Common.CurrentVersion.targets(4188,5): error MSB3026: (NETCORE_ENGINEERING_TELEMETRY=Build)
Could not copy "F:\workspace\_work\1\s\artifacts\obj\Internal.AspNetCore.Analyzers\Release\netstandard1.3\Internal.AspNetCore.Analyzers.dll"
to "F:\workspace\_work\1\s\artifacts\bin\Internal.AspNetCore.Analyzers\Release\netstandard1.3\Internal.AspNetCore.Analyzers.dll". Beginning retry 1 in 1000ms.
The process cannot access the file 'F:\workspace\_work\1\s\artifacts\bin\Internal.AspNetCore.Analyzers\Release\netstandard1.3\Internal.AspNetCore.Analyzers.dll' because it is being used by another process.
```

The analyzer checks if pubternal types are being exposed in public APIs. We no longer author pubternal types, so this is no longer a concern.

* Remove DisablePubternalApiCheck
2020-08-11 03:08:55 +00:00
Pranav K fd1a5c5a9c
Merge pull request #24641 from dotnet-maestro-bot/merge/release/5.0-preview8-to-master
[automated] Merge branch 'release/5.0-preview8' => 'master'
2020-08-10 17:13:51 -07:00
Levi Broderick bbf7c8780c
Clean up some usage of SHA1 and SHA256 in the code base (#24696)
* AntiForgery: Use SHA256 one-shot

* AuthN: Use SHA256 one-shot APIs

* MVC/Razor: Cleanup SHA256 references

* WebSockets: Use SHA1 one-shots

* dotnet-openapi: Use preferred SHA256 factory

* SignalR: Prefer RNG.Fill over RNG.GetBytes
2020-08-10 14:26:41 -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
Doug Bunting e13368391b
Keep `@(Reference)` metadata when creating `@(ProjectReference)` items (#21567)
- #20818, fix e.g. references to Microsoft.Web.Xdt.Extensions in our packages
- make `@(Reference)` items much more broadly applicable
- emit an error when `@(ProjectReference)` is used instead of `@(Reference)`
    - then get rid of the errors (!!)
- rename a couple of projects to match their assembly names
    - then regenerate the `@(ProjectReferenceProvider)` items
- switch intersection approach from Exclude / Exclude to Copy / Update / Copy

Projects of particular interest:
- src/DefaultBuilder/src/Microsoft.AspNetCore.csproj
    - honouring metadata left e.g. Microsoft.AspNetCore.Components.WebAssembly.DevServer package unchanged
    - removed redundant metadata after that confirmation
- src/Razor/tools/Microsoft.AspNetCore.Razor.Internal.Transport/
    - content of this package unchanged but metadata avoids extra work
    - add a comment about the extra work
- src/SiteExtensions/LoggingAggregate/src/Microsoft.AspNetCore.AzureAppServices.SiteExtension/
    - success! removes Microsoft.Web.Xdt.Extensions dependency from the package
- src/SiteExtensions/Runtime/Microsoft.AspNetCore.Runtime.SiteExtension.pkgproj
    - add a `Condition` to avoid an ordering issue I hit here
- src/Tools/Extensions.ApiDescription.Server/src/
    - avoid errors the new build ordering and timing caused

Separately, up the timeout in the `<DownloadFile />` task
- hit repeated timeouts downloading dotnet-runtime-5.0.0-rc.1.20370.4-win-x64.zip

nits:
- remove dupe `@(Reference)` item in Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj
- remove useless `%(ProjectReference.IsImplicitlyDefined)` metadata as well as its misspellings
- remove extra spaces from ProjectReferences.props
- clean up a few comments in ResolveReferences.targets

* !fixup! Correct other references to renamed projects
2020-08-04 10:05:55 -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 506a856d47
Unquarantine passing tests (#23915) 2020-07-13 16:27:00 -07:00
Brennan aee40dbd36
Quarantine flaky Watch tests (#23855) 2020-07-10 15:34:10 -07:00
Javier Calvarro Nelson 0c5c1771ef
[Https] Export the certificate in PEM format too (#23803)
* Changed `--key-format` to `--format`.
* Changed the format of the certificate to PEM when `--format pem` is indicated.
2020-07-09 10:04:12 -07:00
Kevin Pilch 3117f43c33
Migrate to single sln file + slnf files (#23581) 2020-07-08 15:27:22 -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
Javier Calvarro Nelson 156023d3f9
[HTTPS] Support exporting the dev-cert in PEM format and support importing an existing dev-cert in PFX (#23567)
* Support exporting the certificate key into PEM format
* Support importing an existing https dev certificate into the certificate store
2020-07-07 08:26:08 -07: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
Doug Bunting c4c6e25a06
Add missing doc files and cleanup nits (#22931)
* nit: Remove useless `$(HasReferenceAssembly)` settings
  - set in /Directory.Build.targets
    - `true` only in `$(IsAspNetCoreApp)` projects
* nit: Remove useless `$(CompileUsingReferenceAssemblies)` settings
  - no current versioning differences between ref/ and src/ assemblies when targeting default TFM
* Add more `$(GenerateDocumentationFile)` settings
  - increases the number of generated doc files, mostly without problems
- !fixup! correct typo in `DebugProxyHost` doc comments
    - was not generating a doc file before
  - remove previous (ineffective) src/Components/Directory.Build.targets setting
  - nit: remove a duplicate `$(GenerateDocumentationFile)` setting
* nit: Remove useless `$(IsPackable)` settings
  - only analyzers and implementation projects are packable by default
    - main use case for explicit setting is projects shipping only in shared framework
  - conditional setting in src/Mvc/Directory.Build.props just subset logic in /Directory.Build.targets
* nit: Remove useless `$(IsProjectReferenceProvider)` settings
  - only implementation projects are providers by default
* nit: Remove useless `$(IsTestAssetProject)` settings
  - set in src/Mvc/test/WebSites/Directory.Build.props
* !fixup! Looks like `InProcessNewShimWebSite` must compile w/o ref/ assemblies
  - restore `$(CompileUsingReferenceAssemblies)` in this one project
2020-06-17 13:04:45 -07:00
Safia Abdalla 51f977db2f
Unquarantine tests that have passed for 30+ days (#23011) 2020-06-16 16:23:50 -07:00
John Luo 675fd1413c
Quarantine test (#22981) 2020-06-15 19:48:33 -07:00
John Luo b284229790
Consume host resolver source package from dotnet/runtime (#22962) 2020-06-15 15:21:58 -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
Doug Bunting fef33ad4a2 Quarantine tests based on recent failures 2020-05-22 11:13:07 -07:00