Diagram of VS/SDK component interactions#13127
Conversation
Interactive diagram showing where build components come from in different build scenarios.
We didn't get netcore-taskhost widely used for .NET 10.
There was a problem hiding this comment.
Pull request overview
Adds a self-contained diagram (previously kept externally) documenting how Visual Studio, the .NET SDK, MSBuild components, and user repos interact, with simple interactive highlighting for common scenarios.
Changes:
- Added a new HTML document containing an interactive “layer diagram” of VS/SDK/user-repo component composition.
- Implemented CSS-only highlighting via radio buttons to visualize different build/design-time scenarios.
| <div class="component user sdkbuild vsbuild vsbuild10 designtime"><tt>global.json</tt></div> | ||
| <div class="component user sdkbuild vsbuild vsbuild10 designtime"><tt>Directory.Build.props</tt></div> | ||
| <div class="component user sdkbuild vsbuild vsbuild10 designtime"><tt>Foo.csproj</tt></div> |
There was a problem hiding this comment.
<tt> is obsolete in HTML5; these filenames would be better marked up with <code> for correct semantics and more consistent rendering.
| outline:none; | ||
| } | ||
|
|
||
| #diagram div { | ||
| outline: 1px solid #c8c8c8; |
There was a problem hiding this comment.
.component { outline: none; } is effectively overridden by #diagram div { outline: ... } due to selector specificity, so the outline:none doesn’t take effect. Either remove the redundant outline:none or narrow #diagram div so it only targets the elements you intend to outline (e.g., components vs. container/header divs).
| <label for="sdkbuild">Build with <tt>dotnet build</tt></label> | ||
| <br> | ||
| <input type="radio" name="buildOption" id="designtime" value="designtime"> | ||
| <label for="designtime">VS project load/Design-time build</label> | ||
| <br> | ||
| <input type="radio" name="buildOption" id="vsbuild" value="vsbuild"> | ||
| <label for="vsbuild">Build with <tt>MSBuild.exe</tt> or VS F5</label> | ||
| <br> | ||
| <input type="radio" name="buildOption" id="vsbuild10" value="vsbuild10"> | ||
| <label for="vsbuild10">Build with <tt>MSBuild.exe</tt> or VS F5 (.NET 10+)</label><br> |
There was a problem hiding this comment.
This doc uses <tt> for inline code/filenames, but <tt> is obsolete in HTML5 and has inconsistent styling across browsers. Prefer <code> (optionally styled via CSS) for dotnet build, MSBuild.exe, filenames, etc.
| <label for="sdkbuild">Build with <tt>dotnet build</tt></label> | |
| <br> | |
| <input type="radio" name="buildOption" id="designtime" value="designtime"> | |
| <label for="designtime">VS project load/Design-time build</label> | |
| <br> | |
| <input type="radio" name="buildOption" id="vsbuild" value="vsbuild"> | |
| <label for="vsbuild">Build with <tt>MSBuild.exe</tt> or VS F5</label> | |
| <br> | |
| <input type="radio" name="buildOption" id="vsbuild10" value="vsbuild10"> | |
| <label for="vsbuild10">Build with <tt>MSBuild.exe</tt> or VS F5 (.NET 10+)</label><br> | |
| <label for="sdkbuild">Build with <code>dotnet build</code></label> | |
| <br> | |
| <input type="radio" name="buildOption" id="designtime" value="designtime"> | |
| <label for="designtime">VS project load/Design-time build</label> | |
| <br> | |
| <input type="radio" name="buildOption" id="vsbuild" value="vsbuild"> | |
| <label for="vsbuild">Build with <code>MSBuild.exe</code> or VS F5</label> | |
| <br> | |
| <input type="radio" name="buildOption" id="vsbuild10" value="vsbuild10"> | |
| <label for="vsbuild10">Build with <code>MSBuild.exe</code> or VS F5 (.NET 10+)</label><br> |
| <div class="component dual sdkbuild">MSBuild Common.targets</div> | ||
| <div class="component dual sdkbuild vsbuild10">Roslyn Compilers</div> | ||
| <div class="component dual sdkbuild">Common Analyzers</div> | ||
| <div class="component sdk sdkbuild"><tt>dotnet</tt> CLI</div> |
There was a problem hiding this comment.
<tt> is obsolete in HTML5. Prefer <code> for inline code like dotnet (and style it via CSS if you want a monospaced look).
| <div id="diagram" class="holder"> | ||
| <div class="distribution"> | ||
| <div class="header vs">Visual Studio</div> |
There was a problem hiding this comment.
GitHub doesn’t render repository .html files as pages in the normal file view, so this diagram won’t be directly viewable without using “Raw”/downloading. Consider adding a short instruction near the top (how to view), and/or adding a rendered PNG/SVG + a .md wrapper so the diagram is visible in GitHub’s documentation flow (similar to other diagrams in documentation/*.md).
| } | ||
|
|
||
| body { | ||
| font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif, sans-serif; |
There was a problem hiding this comment.
font-family list ends with ..., sans-serif, sans-serif; (duplicate fallback). Removing the extra sans-serif avoids confusion and keeps the style declaration clean.
| font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif, sans-serif; | |
| font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; |
| <head> | ||
| <meta charset="UTF-8"> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| <title>Interactive Layer Diagram</title> |
There was a problem hiding this comment.
The page <title> (“Interactive Layer Diagram”) doesn’t match the main heading (“MSBuild/.NET SDK/Visual Studio Interactions”). Aligning them makes the document easier to find/bookmark and reduces ambiguity in browser tabs/history.
| <title>Interactive Layer Diagram</title> | |
| <title>MSBuild/.NET SDK/Visual Studio Interactions</title> |
| <input type="radio" name="buildOption" id="vsbuild" value="vsbuild"> | ||
| <label for="vsbuild">Build with <tt>MSBuild.exe</tt> or VS F5</label> | ||
| <br> | ||
| <input type="radio" name="buildOption" id="vsbuild10" value="vsbuild10"> | ||
| <label for="vsbuild10">Build with <tt>MSBuild.exe</tt> or VS F5 (.NET 10+)</label><br> |
There was a problem hiding this comment.
This doc uses <tt> for inline code, which is obsolete in HTML5. Consider switching these to <code> for better semantics and accessibility.
We used this diagram a bunch during .NET 10 planning. It came up again today and it shouldn't be trapped in my corporate OneDrive.