Fix ASP.NET WebSite projects to copy netstandard.dll facade when required#13058
Conversation
I am unsure if this has undesirable performace implications
…solve-projects-that-depend-on-netstandard
ASP.NET WebSite projects (legacy, no .csproj) that reference netstandard2.0 libraries fail at runtime because netstandard.dll is not copied to the bin folder. This extends PR dotnet#12980 by: 1. Capturing RAR's DependsOnNETStandard output property 2. Copying netstandard.dll from the Facades folder when needed The fix only applies to .NET Framework 4.7.1+ where netstandard facades are available in the Reference Assemblies Facades folder. Fixes dotnet#12933 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
|
We probably want to add SkipUnchangedFiles to this copy, as this current implementation will copy the facades folder for every project reference that depends on netstandard |
…ard fix - Wrap all new behavior behind ChangeWave 18.5 for safe opt-out - Only pass TargetFrameworkVersion for .NET Framework 4.7.1+ (which has netstandard facades) - Preserve existing MSB3268 warnings for older frameworks (<4.7.1) - Add WebConfigFileName property for AppConfigFile parameter - Add SkipUnchangedFiles to Copy tasks for efficiency - Add -errorstack to AspNetCompiler when Debug=true - Update ChangeWaves.md documentation Tested scenarios: - 4.8.1 target: ClassLib.dll + netstandard.dll copied, no warnings - 4.6.2 target: Warnings preserved (no facade available) Fixes dotnet#12933
Pass Clean=true to AspNetCompiler when building with Rebuild target, enabling the -c flag for full recompilation of previously compiled components.
Required for the ASP.NET netstandard fix feature gate.
There was a problem hiding this comment.
Pull request overview
This PR extends PR #12980 to complete the fix for issue #12933, which addresses ASP.NET Framework 4.8 WebSite projects' inability to resolve assembly references for projects with dependencies on netstandard2.0.
Changes:
- Captures RAR's DependsOnNETStandard output property to detect when project dependencies require netstandard.dll
- Adds conditional copying of netstandard.dll from the .NET Framework Facades folder when the project depends on netstandard and targets .NET Framework 4.7.1+
- Adds -errorstack flag to AspNetCompiler debug mode for enhanced error diagnostics
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/Tasks/AspNetCompiler.cs | Adds -errorstack switch to debug mode for enhanced error reporting |
| src/Build/Construction/Solution/SolutionProjectGenerator.cs | Implements netstandard.dll facade copying logic with ChangeWave gating, captures DependsOnNETStandard property, and adds web.config path support |
| documentation/wiki/ChangeWaves.md | Documents the Wave18_5 change for ASP.NET WebSite netstandard dependency resolution |
- Add try-catch around FrameworkName constructor to handle malformed monikers - Remove unrelated -errorstack switch from AspNetCompiler
|
I played with it a bunch and converged on this @johnazule .would you be happy if this was merged? Or is there more that's not working with your Solution? The |
|
@JanProvaznik sorry about the delay, got caught up at work. This looks good! I am happy for it to merge |
johnazule
left a comment
There was a problem hiding this comment.
Looks good! I think this will do everything I need it to
|
@JanProvaznik is the review you requested an internal team I don't have access to? All links to the reviewer seem invalid |
|
yes, it's internal, sorry for delays |
Updated [Microsoft.Build](https://github.com/dotnet/msbuild) from 18.6.3 to 18.7.1. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Build's releases](https://github.com/dotnet/msbuild/releases)._ ## 18.7.1 ## What's Changed * Fix TraceEngine file contention deadlock in multithreaded mode by @JanProvaznik in dotnet/msbuild#13446 * Remove duplicate test cases in MultithreadableTaskAnalyzer by @Youssef1313 in dotnet/msbuild#13483 * Ensure ThreadSafeTaskAnalyzer.Tests is considered as a unit test project by @Youssef1313 in dotnet/msbuild#13481 * Fix MSBuildTask0002 analyzer warnings in already-migrated tasks by @JanProvaznik in dotnet/msbuild#13466 * Fix race conditions in task host path resolution by @AR-May in dotnet/msbuild#13485 * Migrate ToolTask and Al task to TaskEnvironment API by @OvesN in dotnet/msbuild#13423 * Bump main to 18.7, add vs18.6 to merge flow by @MichalPavlik in dotnet/msbuild#13472 * Avoid allocations in GetHashCode implementations by @DustinCampbell in dotnet/msbuild#13475 * Add PATs rotation to agentic workflow(s) by @JanKrivanek in dotnet/msbuild#13496 * Fix ASP.NET WebSite projects to copy netstandard.dll facade when required by @JanProvaznik in dotnet/msbuild#13058 * Migrate AspNetCompiler to TaskEnvironment API by @OvesN in dotnet/msbuild#13424 * Add review workflow by @JanKrivanek in dotnet/msbuild#13503 * Strengthen reviewer skill: add step-back analysis dimensions by @JanProvaznik in dotnet/msbuild#13504 * Add 'Request Speedometer Perf Run' to VS experimental insertion build policies by @Copilot in dotnet/msbuild#13505 * Remove duplicate @ prefix from issueAuthor in GitOps by @akoeplinger in dotnet/msbuild#13492 * Improve review aw by @JanKrivanek in dotnet/msbuild#13510 * Migrates unit tests to use RoslynCodeTaskFactory to enable running tests under .NET Core by @jankratochvilcz in dotnet/msbuild#13500 * Fix cross-AppDomain TaskItem modifier cache regression by @DustinCampbell in dotnet/msbuild#13493 * Discourage review agent from approving PRs by @JanKrivanek in dotnet/msbuild#13512 * Stop trying to deploy ValueTuple by @rainersigwald in dotnet/msbuild#13507 * Ad-hoc re-sign bootstrap dotnet on macOS to prevent SIGKILL by @jankratochvilcz in dotnet/msbuild#13513 * RoslynCodeTaskFactory: Log MSB3753 when task class does not implement ITask by @jankratochvilcz in dotnet/msbuild#13517 * Update gh-aw (upon mcp policy changes) by @JanKrivanek in dotnet/msbuild#13526 * Eliminate XmlChildNodes allocations in GetXmlNodeInnerContents by @nareshjo in dotnet/msbuild#13509 * Fix telemetry allocation regression: per-engine collector ownership by @JanProvaznik in dotnet/msbuild#13516 * Migrate to xunit.v3 by @Youssef1313 in dotnet/msbuild#13482 * Fix stray brace in HandleBuildCancel trace string causing MSB1025 by @Copilot in dotnet/msbuild#13535 * Bumping to 10.0.4 runtime packages by @MichalPavlik in dotnet/msbuild#13533 * Remove early return in GetCanonicalForm, always call System.IO.Path by @OvesN in dotnet/msbuild#13532 * Do not overwrite GetCopyToOutputDirectoryItemsDependsOn, just add new… by @snechaev in dotnet/msbuild#13474 * Migrate GetReferenceAssemblyPaths task to TaskEnvironment API by @OvesN in dotnet/msbuild#13495 * Stabilize ToolTaskThatTimeoutAndRetry test by @rainersigwald in dotnet/msbuild#13489 * [automated] Merge branch 'vs18.6' => 'main' by @github-actions[bot] in dotnet/msbuild#13506 * Add extra test assertions around tests by @Youssef1313 in dotnet/msbuild#13536 * Add static eval for repo skills/agents via skill-validator by @JanKrivanek in dotnet/msbuild#13537 * Migrate SGen task to Task environment API by @OvesN in dotnet/msbuild#13457 * Fix TerminalLogger assert failure for metaproj files and cached project eval ID by @OvesN in dotnet/msbuild#13480 * Filter out approving review from pr-reviewer agent by @JanKrivanek in dotnet/msbuild#13553 * Use a unique task name per invocation to tabilize RoslynCodeTaskFactory_ReuseCompilation test by @huulinhnguyen-dev in dotnet/msbuild#13551 * Brief doc on feedback/logging/data systems by @rainersigwald in dotnet/msbuild#13554 * Localized file check-in by OneLocBuild Task: Build definition ID 9434: Build ID 13881982 by @dotnet-bot in dotnet/msbuild#13437 * Stage 3: Forward BuildProjectFile* callbacks from OOP TaskHost to worker node by @JanProvaznik in dotnet/msbuild#13350 * Enable TaskHost Callbacks by default by @JanProvaznik in dotnet/msbuild#13579 * Remove unactionable info from reviewer agent by @JanKrivanek in dotnet/msbuild#13578 * Enlighten RequiresFramework35SP1Assembly task for multithreaded mode by @jankratochvilcz in dotnet/msbuild#13575 * Make SdkResolver-provided environment variables take precedence over ambient environment by @Copilot in dotnet/msbuild#12655 * Add dotnet/skills marketplace and enable plugins by @Evangelink in dotnet/msbuild#13582 * The skills/agents check filters-in only touched files by @JanKrivanek in dotnet/msbuild#13586 * Fix skill-validation workflow failing when agents directory is deleted by @JeremyKuhne in dotnet/msbuild#13592 ... (truncated) Commits viewable in [compare view](dotnet/msbuild@v18.6.3...v18.7.1). </details> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Summary
This is a minimal extension to PR #12980 that completes the fix for issue #12933.
Test plan