Compare commits

...

3 Commits

Author SHA1 Message Date
2839a96c05 save 2026-01-23 11:26:58 +07:00
f0d9695815 save 2026-01-23 11:23:16 +07:00
61b1b39b46 save 2026-01-23 11:20:08 +07:00
812 changed files with 188432 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
################################################################################
# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
################################################################################
/.vs/CanRead.slnx/FileContentIndex/7fbc8a87-186b-4af6-b660-f4260ef6eeff.vsidx

BIN
.vs/CanRead.slnx/v18/.wsuo Normal file

Binary file not shown.

View File

@ -0,0 +1,31 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\Admin\\source\\repos\\CanRead\\",
"Documents": [],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
}
]
}
]
}
]
}

View File

@ -0,0 +1,31 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\Admin\\source\\repos\\CanRead\\",
"Documents": [],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
}
]
}
]
}
]
}

Binary file not shown.

View File

@ -0,0 +1,8 @@
{
"ExpandedNodes": [
"",
"\\BlazorApp",
"\\BlazorApp\\bin\\Release\\net10.0"
],
"PreviewInSolutionExplorer": false
}

BIN
.vs/slnx.sqlite Normal file

Binary file not shown.

3
BlazorApp.slnx Normal file
View File

@ -0,0 +1,3 @@
<Solution>
<Project Path="BlazorApp/BlazorApp.csproj" />
</Solution>

View File

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Peak.PCANBasic.NET" Version="4.10.1.968" />
<PackageReference Include="SocketCANSharp" Version="0.13.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>https</ActiveDebugProfile>
<NameOfLastUsedPublishProfile>D:\CanRead\BlazorApp\BlazorApp\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<base href="/" />
<ResourcePreloader />
<link rel="stylesheet" href="@Assets["lib/bootstrap/dist/css/bootstrap.min.css"]" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet">
<link rel="stylesheet" href="@Assets["app.css"]" />
<link rel="stylesheet" href="@Assets["BlazorApp.styles.css"]" />
<ImportMap />
<link rel="icon" type="image/png" href="favicon.png" />
<HeadOutlet @rendermode="InteractiveServer" />
</head>
<body>
<Routes @rendermode="InteractiveServer" />
<ReconnectModal />
<script src="@Assets["_framework/blazor.web.js"]"></script>
</body>
</html>

View File

@ -0,0 +1,23 @@
@inherits LayoutComponentBase
<div class="page">
<div class="sidebar">
<NavMenu />
</div>
<main>
<div class="top-row px-4">
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
</div>
<article class="content px-4">
@Body
</article>
</main>
</div>
<div id="blazor-error-ui" data-nosnippet>
An unhandled error has occurred.
<a href="." class="reload">Reload</a>
<span class="dismiss">🗙</span>
</div>

View File

@ -0,0 +1,98 @@
.page {
position: relative;
display: flex;
flex-direction: column;
}
main {
flex: 1;
}
.sidebar {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
}
.top-row {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
height: 3.5rem;
display: flex;
align-items: center;
}
.top-row ::deep a, .top-row ::deep .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
text-decoration: none;
}
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
text-decoration: underline;
}
.top-row ::deep a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row {
justify-content: space-between;
}
.top-row ::deep a, .top-row ::deep .btn-link {
margin-left: 0;
}
}
@media (min-width: 641px) {
.page {
flex-direction: row;
}
.sidebar {
width: 250px;
height: 100vh;
position: sticky;
top: 0;
}
.top-row {
position: sticky;
top: 0;
z-index: 1;
}
.top-row.auth ::deep a:first-child {
flex: 1;
text-align: right;
width: 0;
}
.top-row, article {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}
#blazor-error-ui {
color-scheme: light only;
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
box-sizing: border-box;
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}

View File

@ -0,0 +1,24 @@
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="">BlazorApp</a>
</div>
</div>
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
<nav class="nav flex-column">
<div class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link d-flex align-items-center" href="can">
<span class="bi bi-book-half nav-icon"></span>
<span>Can Read</span>
</NavLink>
</div>
</nav>
</div>

View File

@ -0,0 +1,105 @@
.navbar-toggler {
appearance: none;
cursor: pointer;
width: 3.5rem;
height: 2.5rem;
color: white;
position: absolute;
top: 0.5rem;
right: 1rem;
border: 1px solid rgba(255, 255, 255, 0.1);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
}
.navbar-toggler:checked {
background-color: rgba(255, 255, 255, 0.5);
}
.top-row {
min-height: 3.5rem;
background-color: rgba(0,0,0,0.4);
}
.navbar-brand {
font-size: 1.1rem;
}
.bi {
display: inline-block;
position: relative;
width: 1.25rem;
height: 1.25rem;
margin-right: 0.75rem;
top: -1px;
background-size: cover;
}
.bi-house-door-fill-nav-menu {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
}
.bi-plus-square-fill-nav-menu {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
}
.bi-list-nested-nav-menu {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
}
.nav-item {
font-size: 0.9rem;
padding-bottom: 0.5rem;
}
.nav-item:first-of-type {
padding-top: 1rem;
}
.nav-item:last-of-type {
padding-bottom: 1rem;
}
.nav-item ::deep .nav-link {
color: #d7d7d7;
background: none;
border: none;
border-radius: 4px;
height: 3rem;
display: flex;
align-items: center;
line-height: 3rem;
width: 100%;
}
.nav-item ::deep a.active {
background-color: rgba(255,255,255,0.37);
color: white;
}
.nav-item ::deep .nav-link:hover {
background-color: rgba(255,255,255,0.1);
color: white;
}
.nav-scrollable {
display: none;
}
.navbar-toggler:checked ~ .nav-scrollable {
display: block;
}
@media (min-width: 641px) {
.navbar-toggler {
display: none;
}
.nav-scrollable {
/* Never collapse the sidebar for wide screens */
display: block;
/* Allow sidebar to scroll for tall menus */
height: calc(100vh - 3.5rem);
overflow-y: auto;
}
}

View File

@ -0,0 +1,31 @@
<script type="module" src="@Assets["Components/Layout/ReconnectModal.razor.js"]"></script>
<dialog id="components-reconnect-modal" data-nosnippet>
<div class="components-reconnect-container">
<div class="components-rejoining-animation" aria-hidden="true">
<div></div>
<div></div>
</div>
<p class="components-reconnect-first-attempt-visible">
Rejoining the server...
</p>
<p class="components-reconnect-repeated-attempt-visible">
Rejoin failed... trying again in <span id="components-seconds-to-next-attempt"></span> seconds.
</p>
<p class="components-reconnect-failed-visible">
Failed to rejoin.<br />Please retry or reload the page.
</p>
<button id="components-reconnect-button" class="components-reconnect-failed-visible">
Retry
</button>
<p class="components-pause-visible">
The session has been paused by the server.
</p>
<button id="components-resume-button" class="components-pause-visible">
Resume
</button>
<p class="components-resume-failed-visible">
Failed to resume the session.<br />Please reload the page.
</p>
</div>
</dialog>

View File

@ -0,0 +1,157 @@
.components-reconnect-first-attempt-visible,
.components-reconnect-repeated-attempt-visible,
.components-reconnect-failed-visible,
.components-pause-visible,
.components-resume-failed-visible,
.components-rejoining-animation {
display: none;
}
#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible,
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation,
#components-reconnect-modal.components-reconnect-paused .components-pause-visible,
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible,
#components-reconnect-modal.components-reconnect-retrying,
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible,
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation,
#components-reconnect-modal.components-reconnect-failed,
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible {
display: block;
}
#components-reconnect-modal {
background-color: white;
width: 20rem;
margin: 20vh auto;
padding: 2rem;
border: 0;
border-radius: 0.5rem;
box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
opacity: 0;
transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
animation: components-reconnect-modal-fadeOutOpacity 0.5s both;
&[open]
{
animation: components-reconnect-modal-slideUp 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity 0.5s ease-in-out 0.3s;
animation-fill-mode: both;
}
}
#components-reconnect-modal::backdrop {
background-color: rgba(0, 0, 0, 0.4);
animation: components-reconnect-modal-fadeInOpacity 0.5s ease-in-out;
opacity: 1;
}
@keyframes components-reconnect-modal-slideUp {
0% {
transform: translateY(30px) scale(0.95);
}
100% {
transform: translateY(0);
}
}
@keyframes components-reconnect-modal-fadeInOpacity {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes components-reconnect-modal-fadeOutOpacity {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.components-reconnect-container {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
}
#components-reconnect-modal p {
margin: 0;
text-align: center;
}
#components-reconnect-modal button {
border: 0;
background-color: #6b9ed2;
color: white;
padding: 4px 24px;
border-radius: 4px;
}
#components-reconnect-modal button:hover {
background-color: #3b6ea2;
}
#components-reconnect-modal button:active {
background-color: #6b9ed2;
}
.components-rejoining-animation {
position: relative;
width: 80px;
height: 80px;
}
.components-rejoining-animation div {
position: absolute;
border: 3px solid #0087ff;
opacity: 1;
border-radius: 50%;
animation: components-rejoining-animation 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
}
.components-rejoining-animation div:nth-child(2) {
animation-delay: -0.5s;
}
@keyframes components-rejoining-animation {
0% {
top: 40px;
left: 40px;
width: 0;
height: 0;
opacity: 0;
}
4.9% {
top: 40px;
left: 40px;
width: 0;
height: 0;
opacity: 0;
}
5% {
top: 40px;
left: 40px;
width: 0;
height: 0;
opacity: 1;
}
100% {
top: 0px;
left: 0px;
width: 80px;
height: 80px;
opacity: 0;
}
}

View File

@ -0,0 +1,63 @@
// Set up event handlers
const reconnectModal = document.getElementById("components-reconnect-modal");
reconnectModal.addEventListener("components-reconnect-state-changed", handleReconnectStateChanged);
const retryButton = document.getElementById("components-reconnect-button");
retryButton.addEventListener("click", retry);
const resumeButton = document.getElementById("components-resume-button");
resumeButton.addEventListener("click", resume);
function handleReconnectStateChanged(event) {
if (event.detail.state === "show") {
reconnectModal.showModal();
} else if (event.detail.state === "hide") {
reconnectModal.close();
} else if (event.detail.state === "failed") {
document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
} else if (event.detail.state === "rejected") {
location.reload();
}
}
async function retry() {
document.removeEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
try {
// Reconnect will asynchronously return:
// - true to mean success
// - false to mean we reached the server, but it rejected the connection (e.g., unknown circuit ID)
// - exception to mean we didn't reach the server (this can be sync or async)
const successful = await Blazor.reconnect();
if (!successful) {
// We have been able to reach the server, but the circuit is no longer available.
// We'll reload the page so the user can continue using the app as quickly as possible.
const resumeSuccessful = await Blazor.resumeCircuit();
if (!resumeSuccessful) {
location.reload();
} else {
reconnectModal.close();
}
}
} catch (err) {
// We got an exception, server is currently unavailable
document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
}
}
async function resume() {
try {
const successful = await Blazor.resumeCircuit();
if (!successful) {
location.reload();
}
} catch {
location.reload();
}
}
async function retryWhenDocumentBecomesVisible() {
if (document.visibilityState === "visible") {
await retry();
}
}

View File

@ -0,0 +1,127 @@
@page "/can"
@inject ICanService CanService
@implements IDisposable
<div class="container mt-4">
<div class="card shadow-sm">
<!-- HEADER -->
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">CAN Monitor (Live View)</h5>
<div>
<button class="btn btn-success btn-sm me-2"
@onclick="Start"
disabled="@isRunning">
▶ Start
</button>
<button class="btn btn-danger btn-sm"
@onclick="Stop"
disabled="@(!isRunning)">
■ Stop
</button>
</div>
</div>
<!-- TABLE -->
<div class="card-body p-0" style="max-height: 420px; overflow-y: auto;">
<table class="table table-striped table-hover table-sm mb-0">
<thead class="table-dark sticky-top">
<tr>
<th style="width:140px">Time</th>
<th style="width:80px">CAN-ID</th>
<th style="width:120px">Meaning</th>
<th style="width:60px">Length</th>
<th>Raw Data</th>
<th style="width:200px">Result</th>
</tr>
</thead>
<tbody>
@foreach (var msg in messages.Values.OrderBy(m => m.Id))
{
<tr>
<td>@msg.Timestamp.ToString("HH:mm:ss.fff")</td>
<td class="fw-bold text-primary">
@msg.Id.ToString("X3")
</td>
<td>@msg.Meaning</td>
<td>@msg.Length</td>
<td class="font-monospace">
@BitConverter.ToString(
msg.Data.Take(msg.Length).ToArray())
</td>
<td class="fw-semibold">
@msg.ValueText
</td>
</tr>
}
</tbody>
</table>
</div>
<!-- FOOTER -->
<div class="card-footer text-muted small d-flex justify-content-between">
<span>Total CAN IDs: <b>@messages.Count</b></span>
<span>Status: <b>@status</b></span>
</div>
</div>
</div>
@code {
// DATA STORAGE (1 ID = 1 ROW)
private Dictionary<uint, CanMessage> messages = new();
private bool isRunning = false;
private string status = "STOPPED";
// INIT
protected override void OnInitialized()
{
CanService.OnMessageReceived += OnCanMessage;
}
// RECEIVE CAN FRAME
private void OnCanMessage(CanMessage msg)
{
InvokeAsync(() =>
{
// 🔴 Update data on the SAME row by CAN-ID
messages[msg.Id] = msg;
StateHasChanged();
});
}
// START
private async Task Start()
{
if (isRunning) return;
status = "INITIALIZING...";
StateHasChanged();
await CanService.InitAsync(); // BẮT BUỘC
CanService.StartStream();
isRunning = true;
status = "RUNNING";
}
// STOP
private void Stop()
{
if (!isRunning) return;
CanService.StopStream();
isRunning = false;
status = "STOPPED";
}
// CLEANUP
public void Dispose()
{
CanService.OnMessageReceived -= OnCanMessage;
CanService.StopStream();
}
}

View File

@ -0,0 +1,18 @@
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}

View File

@ -0,0 +1,36 @@
@page "/Error"
@using System.Diagnostics
<PageTitle>Error</PageTitle>
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@code{
[CascadingParameter]
private HttpContext? HttpContext { get; set; }
private string? RequestId { get; set; }
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
protected override void OnInitialized() =>
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
}

View File

@ -0,0 +1,7 @@
@page "/"
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.

View File

@ -0,0 +1,5 @@
@page "/not-found"
@layout MainLayout
<h3>Not Found</h3>
<p>Sorry, the content you are looking for does not exist.</p>

View File

@ -0,0 +1,63 @@
@page "/weather"
<PageTitle>Weather</PageTitle>
<h1>Weather</h1>
<p>This component demonstrates showing data.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th aria-label="Temperature in Celsius">Temp. (C)</th>
<th aria-label="Temperature in Fahrenheit">Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
// Simulate asynchronous loading to demonstrate a loading indicator
await Task.Delay(500);
var startDate = DateOnly.FromDateTime(DateTime.Now);
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = startDate.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
}).ToArray();
}
private class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
}

View File

@ -0,0 +1,6 @@
<Router AppAssembly="typeof(Program).Assembly" NotFoundPage="typeof(Pages.NotFound)">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
<FocusOnNavigate RouteData="routeData" Selector="h1" />
</Found>
</Router>

View File

@ -0,0 +1,15 @@
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using BlazorApp
@using BlazorApp.Components
@using BlazorApp.Components.Layout
@using BlazorApp.Models
@using BlazorApp.Services
@using BlazorApp.Services.Interfaces
@using BlazorApp.Services.Windows

View File

@ -0,0 +1,15 @@
namespace BlazorApp.Models
{
public class CanMessage
{
public uint Id { get; set; }
public byte Length { get; set; }
public byte[] Data { get; set; } = new byte[8];
public DateTime Timestamp { get; set; }
// ===== CANopen Info =====
public string Meaning => CanopenDecoder.GetMeaning(Id);
public string ValueText => CanopenDecoder.GetValue(Id, Data, Length);
}
}

View File

@ -0,0 +1,50 @@
using BlazorApp.Models.Canopen.Eds;
namespace BlazorApp.Models.Canopen
{
public static class CanopenDeviceRegistry
{
private static readonly Dictionary<int, ICanopenDeviceDecoder> _decoders
= new();
static CanopenDeviceRegistry()
{
// 🔹 Ví dụ cấu hình từ EDS
var encoderEds = new EdsDevice
{
NodeId = 5,
DeviceName = "Encoder GXMMW",
Tpdos =
{
[1] = new EdsTpdo
{
PdoIndex = 1,
Objects =
{
new EdsObject
{
Index = 0x6004,
Name = "Position",
BitOffset = 0,
BitLength = 32,
Factor = 0.094,
Unit = "mm"
}
}
}
}
};
Register(new EdsDeviceDecoder(encoderEds));
}
public static void Register(ICanopenDeviceDecoder decoder)
{
_decoders[decoder.NodeId] = decoder;
}
public static ICanopenDeviceDecoder? GetDecoder(int nodeId)
{
return _decoders.TryGetValue(nodeId, out var d) ? d : null;
}
}
}

View File

@ -0,0 +1,10 @@
namespace BlazorApp.Models.Canopen.Eds
{
public class EdsDevice
{
public int NodeId { get; set; }
public string DeviceName { get; set; } = "";
public Dictionary<int, EdsTpdo> Tpdos { get; set; } = new();
}
}

View File

@ -0,0 +1,47 @@
using BlazorApp.Models.Canopen;
using BlazorApp.Models.Canopen.Eds;
namespace BlazorApp.Models.Canopen.Eds
{
public class EdsDeviceDecoder : ICanopenDeviceDecoder
{
private readonly EdsDevice _device;
public int NodeId => _device.NodeId;
public EdsDeviceDecoder(EdsDevice device)
{
_device = device;
}
public string DecodeTpdo(int pdoIndex, byte[] data, byte length)
{
if (!_device.Tpdos.TryGetValue(pdoIndex, out var tpdo))
return "-";
var results = new List<string>();
foreach (var obj in tpdo.Objects)
{
ulong raw = ReadBits(data, obj.BitOffset, obj.BitLength);
double value = raw * obj.Factor;
results.Add($"{obj.Name}: {value:F2} {obj.Unit}");
}
return string.Join(" | ", results);
}
private static ulong ReadBits(byte[] data, int bitOffset, int bitLength)
{
ulong value = 0;
int byteOffset = bitOffset / 8;
for (int i = 0; i < bitLength / 8; i++)
{
value |= (ulong)data[byteOffset + i] << (8 * i);
}
return value;
}
}
}

View File

@ -0,0 +1,13 @@
namespace BlazorApp.Models.Canopen.Eds
{
public class EdsObject
{
public ushort Index { get; set; }
public byte SubIndex { get; set; }
public string Name { get; set; } = "";
public double Factor { get; set; } = 1.0;
public string Unit { get; set; } = "";
public int BitOffset { get; set; }
public int BitLength { get; set; }
}
}

View File

@ -0,0 +1,8 @@
namespace BlazorApp.Models.Canopen.Eds
{
public class EdsTpdo
{
public int PdoIndex { get; set; }
public List<EdsObject> Objects { get; set; } = new();
}
}

View File

@ -0,0 +1,10 @@
using BlazorApp.Models;
namespace BlazorApp.Models.Canopen
{
public interface ICanopenDeviceDecoder
{
int NodeId { get; }
string DecodeTpdo(int pdoIndex, byte[] data, byte length);
}
}

View File

@ -0,0 +1,56 @@
using BlazorApp.Models.Canopen;
namespace BlazorApp.Models
{
public class CanopenDecoder
{
public static string GetMeaning(uint id)
{
if (id == 0x080) return "SYNC";
if (id >= 0x081 && id <= 0x0FF)
return $"EMCY (Node {id - 0x080})";
if (id >= 0x700 && id <= 0x77F)
return $"Heartbeat (Node {id - 0x700})";
if (id >= 0x180 && id <= 0x4FF)
{
int pdoIndex = (int)((id - 0x180) / 0x100) + 1;
int nodeId = (int)(id - (0x180 + (pdoIndex - 1) * 0x100));
return $"TPDO{pdoIndex} (Node {nodeId})";
}
return "Unknown";
}
public static string GetValue(uint id, byte[] data, byte length)
{
if (id >= 0x180 && id <= 0x4FF)
{
int pdoIndex = (int)((id - 0x180) / 0x100) + 1;
int nodeId = (int)(id - (0x180 + (pdoIndex - 1) * 0x100));
var decoder = CanopenDeviceRegistry.GetDecoder(nodeId);
if (decoder != null)
return decoder.DecodeTpdo(pdoIndex, data, length);
}
if (id >= 0x700 && id <= 0x77F && length >= 1)
return DecodeNmtState(data[0]);
return "No Error";
}
private static string DecodeNmtState(byte value)
{
return value switch
{
0x00 => "Boot-up",
0x04 => "Stopped",
0x05 => "Operational",
0x7F => "Pre-operational",
_ => $"Unknown (0x{value:X2})"
};
}
}
}

33
BlazorApp/Program.cs Normal file
View File

@ -0,0 +1,33 @@
using BlazorApp.Components;
using BlazorApp.Services.Interfaces;
using BlazorApp.Services.Windows;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
if (OperatingSystem.IsWindows())
{
builder.Services.AddSingleton<ICanService, PcanCanService>();
}
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);
app.UseHttpsRedirection();
app.UseAntiforgery();
app.MapStaticAssets();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.Run();

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<DeleteExistingFiles>false</DeleteExistingFiles>
<ExcludeApp_Data>false</ExcludeApp_Data>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>D:\CanRead\BlazorApp\publish\</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<_TargetId>Folder</_TargetId>
<SiteUrlToLaunchAfterPublish />
<TargetFramework>net10.0</TargetFramework>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<ProjectGuid>d120649d-2906-09dd-7896-0626a755fff4</ProjectGuid>
<SelfContained>false</SelfContained>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<_PublishTargetUrl>D:\CanRead\BlazorApp\publish\</_PublishTargetUrl>
<History>True|2026-01-14T02:29:51.0511608Z||;True|2026-01-13T14:26:13.6767019+07:00||;True|2026-01-13T09:37:31.0751103+07:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

View File

@ -0,0 +1,23 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5119",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7122;http://localhost:5119",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -0,0 +1,15 @@
using BlazorApp.Models;
namespace BlazorApp.Services.Interfaces
{
public interface ICanService
{
Task InitAsync();
Task<List<CanMessage>> ReadAsync();
// STREAM
event Action<CanMessage>? OnMessageReceived;
void StartStream();
void StopStream();
}
}

View File

@ -0,0 +1,94 @@
using BlazorApp.Models;
using BlazorApp.Services.Interfaces;
using Peak.Can.Basic.BackwardCompatibility;
namespace BlazorApp.Services.Windows
{
public class PcanCanService : ICanService, IDisposable
{
private const ushort PCAN_USBBUS1 = 0x51;
private CancellationTokenSource? _cts;
private bool _initialized;
public event Action<CanMessage>? OnMessageReceived;
public Task InitAsync()
{
if (_initialized) return Task.CompletedTask;
var status = PCANBasic.Initialize(
PCAN_USBBUS1,
TPCANBaudrate.PCAN_BAUD_250K
);
if (status != TPCANStatus.PCAN_ERROR_OK)
throw new Exception($"PCAN init failed: {status}");
_initialized = true;
return Task.CompletedTask;
}
public Task<List<CanMessage>> ReadAsync()
{
var list = new List<CanMessage>();
TPCANMsg msg;
TPCANTimestamp ts;
if (PCANBasic.Read(PCAN_USBBUS1, out msg, out ts)
== TPCANStatus.PCAN_ERROR_OK)
{
list.Add(Map(msg));
}
return Task.FromResult(list);
}
public void StartStream()
{
if (_cts != null) return;
_cts = new CancellationTokenSource();
Task.Run(() =>
{
while (!_cts.IsCancellationRequested)
{
TPCANMsg msg;
TPCANTimestamp ts;
var result = PCANBasic.Read(
PCAN_USBBUS1,
out msg,
out ts
);
if (result == TPCANStatus.PCAN_ERROR_OK)
OnMessageReceived?.Invoke(Map(msg));
else
Thread.Sleep(1);
}
});
}
public void StopStream()
{
_cts?.Cancel();
_cts = null;
if (_initialized)
{
PCANBasic.Uninitialize(PCAN_USBBUS1);
_initialized = false;
}
}
private static CanMessage Map(TPCANMsg msg) => new()
{
Id = msg.ID,
Length = msg.LEN,
Data = msg.DATA,
Timestamp = DateTime.Now
};
public void Dispose() => StopStream();
}
}

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -0,0 +1,57 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v10.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v10.0": {
"BlazorApp/1.0.0": {
"dependencies": {
"Peak.PCANBasic.NET": "4.10.1.968",
"SocketCANSharp": "0.13.0"
},
"runtime": {
"BlazorApp.dll": {}
}
},
"Peak.PCANBasic.NET/4.10.1.968": {
"runtime": {
"lib/netstandard2.0/PCANBasic.NET.dll": {
"assemblyVersion": "4.10.1.968",
"fileVersion": "4.10.1.968"
}
}
},
"SocketCANSharp/0.13.0": {
"runtime": {
"lib/netstandard2.0/SocketCANSharp.dll": {
"assemblyVersion": "0.13.0.0",
"fileVersion": "0.13.0.0"
}
}
}
}
},
"libraries": {
"BlazorApp/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Peak.PCANBasic.NET/4.10.1.968": {
"type": "package",
"serviceable": true,
"sha512": "sha512-sUxW8dhaIB+x7XFcpepad1DaD1N5a9l6qB2cyOgDCv7M+SmF87hOIK/EsT42Th92exA02PfCr6+ilnZ0XYeyrg==",
"path": "peak.pcanbasic.net/4.10.1.968",
"hashPath": "peak.pcanbasic.net.4.10.1.968.nupkg.sha512"
},
"SocketCANSharp/0.13.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-71mLS40IMpnyWeKf0zeWKGlgO6lkll36DdhKmsJ9z/SGnENcq/8XhOYFgLKJ8Wbs2a4WaFelmlz8cKBU82lWyA==",
"path": "socketcansharp/0.13.0",
"hashPath": "socketcansharp.0.13.0.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,20 @@
{
"runtimeOptions": {
"tfm": "net10.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "10.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "10.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
"Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException": true
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1,57 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v10.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v10.0": {
"BlazorApp/1.0.0": {
"dependencies": {
"Peak.PCANBasic.NET": "4.10.1.968",
"SocketCANSharp": "0.13.0"
},
"runtime": {
"BlazorApp.dll": {}
}
},
"Peak.PCANBasic.NET/4.10.1.968": {
"runtime": {
"lib/netstandard2.0/PCANBasic.NET.dll": {
"assemblyVersion": "4.10.1.968",
"fileVersion": "4.10.1.968"
}
}
},
"SocketCANSharp/0.13.0": {
"runtime": {
"lib/netstandard2.0/SocketCANSharp.dll": {
"assemblyVersion": "0.13.0.0",
"fileVersion": "0.13.0.0"
}
}
}
}
},
"libraries": {
"BlazorApp/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Peak.PCANBasic.NET/4.10.1.968": {
"type": "package",
"serviceable": true,
"sha512": "sha512-sUxW8dhaIB+x7XFcpepad1DaD1N5a9l6qB2cyOgDCv7M+SmF87hOIK/EsT42Th92exA02PfCr6+ilnZ0XYeyrg==",
"path": "peak.pcanbasic.net/4.10.1.968",
"hashPath": "peak.pcanbasic.net.4.10.1.968.nupkg.sha512"
},
"SocketCANSharp/0.13.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-71mLS40IMpnyWeKf0zeWKGlgO6lkll36DdhKmsJ9z/SGnENcq/8XhOYFgLKJ8Wbs2a4WaFelmlz8cKBU82lWyA==",
"path": "socketcansharp/0.13.0",
"hashPath": "socketcansharp.0.13.0.nupkg.sha512"
}
}
}

View File

@ -0,0 +1,21 @@
{
"runtimeOptions": {
"tfm": "net10.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "10.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "10.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
"Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException": true
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\BlazorApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>

Binary file not shown.

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -0,0 +1,506 @@
{
"format": 1,
"restore": {
"C:\\Users\\Admin\\source\\repos\\CanRead\\BlazorApp\\BlazorApp.csproj": {}
},
"projects": {
"C:\\Users\\Admin\\source\\repos\\CanRead\\BlazorApp\\BlazorApp.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\Admin\\source\\repos\\CanRead\\BlazorApp\\BlazorApp.csproj",
"projectName": "BlazorApp",
"projectPath": "C:\\Users\\Admin\\source\\repos\\CanRead\\BlazorApp\\BlazorApp.csproj",
"packagesPath": "C:\\Users\\Admin\\.nuget\\packages\\",
"outputPath": "C:\\Users\\Admin\\source\\repos\\CanRead\\BlazorApp\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\Admin\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net10.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
},
"SdkAnalysisLevel": "10.0.100"
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"dependencies": {
"Microsoft.AspNetCore.App.Internal.Assets": {
"suppressParent": "All",
"target": "Package",
"version": "[10.0.1, )",
"autoReferenced": true
},
"Peak.PCANBasic.NET": {
"target": "Package",
"version": "[4.10.1.968, )"
},
"SocketCANSharp": {
"target": "Package",
"version": "[0.13.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.AspNetCore.App": {
"privateAssets": "none"
},
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.101/PortableRuntimeIdentifierGraph.json",
"packagesToPrune": {
"Microsoft.AspNetCore": "(,10.0.32767]",
"Microsoft.AspNetCore.Antiforgery": "(,10.0.32767]",
"Microsoft.AspNetCore.App": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.BearerToken": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.Cookies": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.Authentication.OAuth": "(,10.0.32767]",
"Microsoft.AspNetCore.Authorization": "(,10.0.32767]",
"Microsoft.AspNetCore.Authorization.Policy": "(,10.0.32767]",
"Microsoft.AspNetCore.Components": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Authorization": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Endpoints": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Forms": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Server": "(,10.0.32767]",
"Microsoft.AspNetCore.Components.Web": "(,10.0.32767]",
"Microsoft.AspNetCore.Connections.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.CookiePolicy": "(,10.0.32767]",
"Microsoft.AspNetCore.Cors": "(,10.0.32767]",
"Microsoft.AspNetCore.Cryptography.Internal": "(,10.0.32767]",
"Microsoft.AspNetCore.Cryptography.KeyDerivation": "(,10.0.32767]",
"Microsoft.AspNetCore.DataProtection": "(,10.0.32767]",
"Microsoft.AspNetCore.DataProtection.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.DataProtection.Extensions": "(,10.0.32767]",
"Microsoft.AspNetCore.Diagnostics": "(,10.0.32767]",
"Microsoft.AspNetCore.Diagnostics.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Diagnostics.HealthChecks": "(,10.0.32767]",
"Microsoft.AspNetCore.HostFiltering": "(,10.0.32767]",
"Microsoft.AspNetCore.Hosting": "(,10.0.32767]",
"Microsoft.AspNetCore.Hosting.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Hosting.Server.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Html.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Http": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Connections": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Connections.Common": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Extensions": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Features": "(,10.0.32767]",
"Microsoft.AspNetCore.Http.Results": "(,10.0.32767]",
"Microsoft.AspNetCore.HttpLogging": "(,10.0.32767]",
"Microsoft.AspNetCore.HttpOverrides": "(,10.0.32767]",
"Microsoft.AspNetCore.HttpsPolicy": "(,10.0.32767]",
"Microsoft.AspNetCore.Identity": "(,10.0.32767]",
"Microsoft.AspNetCore.Localization": "(,10.0.32767]",
"Microsoft.AspNetCore.Localization.Routing": "(,10.0.32767]",
"Microsoft.AspNetCore.Metadata": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.ApiExplorer": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Cors": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.DataAnnotations": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Formatters.Json": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Formatters.Xml": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Localization": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.Razor": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.RazorPages": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.TagHelpers": "(,10.0.32767]",
"Microsoft.AspNetCore.Mvc.ViewFeatures": "(,10.0.32767]",
"Microsoft.AspNetCore.OutputCaching": "(,10.0.32767]",
"Microsoft.AspNetCore.RateLimiting": "(,10.0.32767]",
"Microsoft.AspNetCore.Razor": "(,10.0.32767]",
"Microsoft.AspNetCore.Razor.Runtime": "(,10.0.32767]",
"Microsoft.AspNetCore.RequestDecompression": "(,10.0.32767]",
"Microsoft.AspNetCore.ResponseCaching": "(,10.0.32767]",
"Microsoft.AspNetCore.ResponseCaching.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.ResponseCompression": "(,10.0.32767]",
"Microsoft.AspNetCore.Rewrite": "(,10.0.32767]",
"Microsoft.AspNetCore.Routing": "(,10.0.32767]",
"Microsoft.AspNetCore.Routing.Abstractions": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.HttpSys": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.IIS": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.IISIntegration": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Transport.Quic": "(,10.0.32767]",
"Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets": "(,10.0.32767]",
"Microsoft.AspNetCore.Session": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR.Common": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR.Core": "(,10.0.32767]",
"Microsoft.AspNetCore.SignalR.Protocols.Json": "(,10.0.32767]",
"Microsoft.AspNetCore.StaticAssets": "(,10.0.32767]",
"Microsoft.AspNetCore.StaticFiles": "(,10.0.32767]",
"Microsoft.AspNetCore.WebSockets": "(,10.0.32767]",
"Microsoft.AspNetCore.WebUtilities": "(,10.0.32767]",
"Microsoft.CSharp": "(,4.7.32767]",
"Microsoft.Extensions.Caching.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Caching.Memory": "(,10.0.32767]",
"Microsoft.Extensions.Configuration": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Binder": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.CommandLine": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.FileExtensions": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Ini": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Json": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.KeyPerFile": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.UserSecrets": "(,10.0.32767]",
"Microsoft.Extensions.Configuration.Xml": "(,10.0.32767]",
"Microsoft.Extensions.DependencyInjection": "(,10.0.32767]",
"Microsoft.Extensions.DependencyInjection.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics.HealthChecks": "(,10.0.32767]",
"Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Features": "(,10.0.32767]",
"Microsoft.Extensions.FileProviders.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.FileProviders.Composite": "(,10.0.32767]",
"Microsoft.Extensions.FileProviders.Physical": "(,10.0.32767]",
"Microsoft.Extensions.FileSystemGlobbing": "(,10.0.32767]",
"Microsoft.Extensions.Hosting": "(,10.0.32767]",
"Microsoft.Extensions.Hosting.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Http": "(,10.0.32767]",
"Microsoft.Extensions.Identity.Core": "(,10.0.32767]",
"Microsoft.Extensions.Identity.Stores": "(,10.0.32767]",
"Microsoft.Extensions.Localization": "(,10.0.32767]",
"Microsoft.Extensions.Localization.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Logging": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Abstractions": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Configuration": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Console": "(,10.0.32767]",
"Microsoft.Extensions.Logging.Debug": "(,10.0.32767]",
"Microsoft.Extensions.Logging.EventLog": "(,10.0.32767]",
"Microsoft.Extensions.Logging.EventSource": "(,10.0.32767]",
"Microsoft.Extensions.Logging.TraceSource": "(,10.0.32767]",
"Microsoft.Extensions.ObjectPool": "(,10.0.32767]",
"Microsoft.Extensions.Options": "(,10.0.32767]",
"Microsoft.Extensions.Options.ConfigurationExtensions": "(,10.0.32767]",
"Microsoft.Extensions.Options.DataAnnotations": "(,10.0.32767]",
"Microsoft.Extensions.Primitives": "(,10.0.32767]",
"Microsoft.Extensions.Validation": "(,10.0.32767]",
"Microsoft.Extensions.WebEncoders": "(,10.0.32767]",
"Microsoft.JSInterop": "(,10.0.32767]",
"Microsoft.Net.Http.Headers": "(,10.0.32767]",
"Microsoft.VisualBasic": "(,10.4.32767]",
"Microsoft.Win32.Primitives": "(,4.3.32767]",
"Microsoft.Win32.Registry": "(,5.0.32767]",
"runtime.any.System.Collections": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.any.System.Globalization": "(,4.3.32767]",
"runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.any.System.IO": "(,4.3.32767]",
"runtime.any.System.Reflection": "(,4.3.32767]",
"runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.any.System.Runtime": "(,4.3.32767]",
"runtime.any.System.Runtime.Handles": "(,4.3.32767]",
"runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.any.System.Text.Encoding": "(,4.3.32767]",
"runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.any.System.Threading.Tasks": "(,4.3.32767]",
"runtime.any.System.Threading.Timer": "(,4.3.32767]",
"runtime.aot.System.Collections": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.aot.System.Globalization": "(,4.3.32767]",
"runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.aot.System.IO": "(,4.3.32767]",
"runtime.aot.System.Reflection": "(,4.3.32767]",
"runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.aot.System.Runtime": "(,4.3.32767]",
"runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
"runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
"runtime.aot.System.Threading.Timer": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.unix.System.Console": "(,4.3.32767]",
"runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
"runtime.unix.System.Net.Primitives": "(,4.3.32767]",
"runtime.unix.System.Net.Sockets": "(,4.3.32767]",
"runtime.unix.System.Private.Uri": "(,4.3.32767]",
"runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.win.System.Console": "(,4.3.32767]",
"runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.win.System.IO.FileSystem": "(,4.3.32767]",
"runtime.win.System.Net.Primitives": "(,4.3.32767]",
"runtime.win.System.Net.Sockets": "(,4.3.32767]",
"runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7.System.Private.Uri": "(,4.3.32767]",
"runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
"System.AppContext": "(,4.3.32767]",
"System.Buffers": "(,5.0.32767]",
"System.Collections": "(,4.3.32767]",
"System.Collections.Concurrent": "(,4.3.32767]",
"System.Collections.Immutable": "(,10.0.32767]",
"System.Collections.NonGeneric": "(,4.3.32767]",
"System.Collections.Specialized": "(,4.3.32767]",
"System.ComponentModel": "(,4.3.32767]",
"System.ComponentModel.Annotations": "(,4.3.32767]",
"System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
"System.ComponentModel.Primitives": "(,4.3.32767]",
"System.ComponentModel.TypeConverter": "(,4.3.32767]",
"System.Console": "(,4.3.32767]",
"System.Data.Common": "(,4.3.32767]",
"System.Data.DataSetExtensions": "(,4.4.32767]",
"System.Diagnostics.Contracts": "(,4.3.32767]",
"System.Diagnostics.Debug": "(,4.3.32767]",
"System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
"System.Diagnostics.EventLog": "(,10.0.32767]",
"System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
"System.Diagnostics.Process": "(,4.3.32767]",
"System.Diagnostics.StackTrace": "(,4.3.32767]",
"System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
"System.Diagnostics.Tools": "(,4.3.32767]",
"System.Diagnostics.TraceSource": "(,4.3.32767]",
"System.Diagnostics.Tracing": "(,4.3.32767]",
"System.Drawing.Primitives": "(,4.3.32767]",
"System.Dynamic.Runtime": "(,4.3.32767]",
"System.Formats.Asn1": "(,10.0.32767]",
"System.Formats.Cbor": "(,10.0.32767]",
"System.Formats.Tar": "(,10.0.32767]",
"System.Globalization": "(,4.3.32767]",
"System.Globalization.Calendars": "(,4.3.32767]",
"System.Globalization.Extensions": "(,4.3.32767]",
"System.IO": "(,4.3.32767]",
"System.IO.Compression": "(,4.3.32767]",
"System.IO.Compression.ZipFile": "(,4.3.32767]",
"System.IO.FileSystem": "(,4.3.32767]",
"System.IO.FileSystem.AccessControl": "(,4.4.32767]",
"System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
"System.IO.FileSystem.Primitives": "(,4.3.32767]",
"System.IO.FileSystem.Watcher": "(,4.3.32767]",
"System.IO.IsolatedStorage": "(,4.3.32767]",
"System.IO.MemoryMappedFiles": "(,4.3.32767]",
"System.IO.Pipelines": "(,10.0.32767]",
"System.IO.Pipes": "(,4.3.32767]",
"System.IO.Pipes.AccessControl": "(,5.0.32767]",
"System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
"System.Linq": "(,4.3.32767]",
"System.Linq.AsyncEnumerable": "(,10.0.32767]",
"System.Linq.Expressions": "(,4.3.32767]",
"System.Linq.Parallel": "(,4.3.32767]",
"System.Linq.Queryable": "(,4.3.32767]",
"System.Memory": "(,5.0.32767]",
"System.Net.Http": "(,4.3.32767]",
"System.Net.Http.Json": "(,10.0.32767]",
"System.Net.NameResolution": "(,4.3.32767]",
"System.Net.NetworkInformation": "(,4.3.32767]",
"System.Net.Ping": "(,4.3.32767]",
"System.Net.Primitives": "(,4.3.32767]",
"System.Net.Requests": "(,4.3.32767]",
"System.Net.Security": "(,4.3.32767]",
"System.Net.ServerSentEvents": "(,10.0.32767]",
"System.Net.Sockets": "(,4.3.32767]",
"System.Net.WebHeaderCollection": "(,4.3.32767]",
"System.Net.WebSockets": "(,4.3.32767]",
"System.Net.WebSockets.Client": "(,4.3.32767]",
"System.Numerics.Vectors": "(,5.0.32767]",
"System.ObjectModel": "(,4.3.32767]",
"System.Private.DataContractSerialization": "(,4.3.32767]",
"System.Private.Uri": "(,4.3.32767]",
"System.Reflection": "(,4.3.32767]",
"System.Reflection.DispatchProxy": "(,6.0.32767]",
"System.Reflection.Emit": "(,4.7.32767]",
"System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
"System.Reflection.Emit.Lightweight": "(,4.7.32767]",
"System.Reflection.Extensions": "(,4.3.32767]",
"System.Reflection.Metadata": "(,10.0.32767]",
"System.Reflection.Primitives": "(,4.3.32767]",
"System.Reflection.TypeExtensions": "(,4.3.32767]",
"System.Resources.Reader": "(,4.3.32767]",
"System.Resources.ResourceManager": "(,4.3.32767]",
"System.Resources.Writer": "(,4.3.32767]",
"System.Runtime": "(,4.3.32767]",
"System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
"System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
"System.Runtime.Extensions": "(,4.3.32767]",
"System.Runtime.Handles": "(,4.3.32767]",
"System.Runtime.InteropServices": "(,4.3.32767]",
"System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
"System.Runtime.Loader": "(,4.3.32767]",
"System.Runtime.Numerics": "(,4.3.32767]",
"System.Runtime.Serialization.Formatters": "(,4.3.32767]",
"System.Runtime.Serialization.Json": "(,4.3.32767]",
"System.Runtime.Serialization.Primitives": "(,4.3.32767]",
"System.Runtime.Serialization.Xml": "(,4.3.32767]",
"System.Security.AccessControl": "(,6.0.32767]",
"System.Security.Claims": "(,4.3.32767]",
"System.Security.Cryptography.Algorithms": "(,4.3.32767]",
"System.Security.Cryptography.Cng": "(,5.0.32767]",
"System.Security.Cryptography.Csp": "(,4.3.32767]",
"System.Security.Cryptography.Encoding": "(,4.3.32767]",
"System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
"System.Security.Cryptography.Primitives": "(,4.3.32767]",
"System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
"System.Security.Cryptography.Xml": "(,10.0.32767]",
"System.Security.Principal": "(,4.3.32767]",
"System.Security.Principal.Windows": "(,5.0.32767]",
"System.Security.SecureString": "(,4.3.32767]",
"System.Text.Encoding": "(,4.3.32767]",
"System.Text.Encoding.CodePages": "(,10.0.32767]",
"System.Text.Encoding.Extensions": "(,4.3.32767]",
"System.Text.Encodings.Web": "(,10.0.32767]",
"System.Text.Json": "(,10.0.32767]",
"System.Text.RegularExpressions": "(,4.3.32767]",
"System.Threading": "(,4.3.32767]",
"System.Threading.AccessControl": "(,10.0.32767]",
"System.Threading.Channels": "(,10.0.32767]",
"System.Threading.Overlapped": "(,4.3.32767]",
"System.Threading.RateLimiting": "(,10.0.32767]",
"System.Threading.Tasks": "(,4.3.32767]",
"System.Threading.Tasks.Dataflow": "(,10.0.32767]",
"System.Threading.Tasks.Extensions": "(,5.0.32767]",
"System.Threading.Tasks.Parallel": "(,4.3.32767]",
"System.Threading.Thread": "(,4.3.32767]",
"System.Threading.ThreadPool": "(,4.3.32767]",
"System.Threading.Timer": "(,4.3.32767]",
"System.ValueTuple": "(,4.5.32767]",
"System.Xml.ReaderWriter": "(,4.3.32767]",
"System.Xml.XDocument": "(,4.3.32767]",
"System.Xml.XmlDocument": "(,4.3.32767]",
"System.Xml.XmlSerializer": "(,4.3.32767]",
"System.Xml.XPath": "(,4.3.32767]",
"System.Xml.XPath.XDocument": "(,5.0.32767]"
}
}
}
}
}
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Admin\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Admin\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.app.internal.assets\10.0.1\build\Microsoft.AspNetCore.App.Internal.Assets.props" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.app.internal.assets\10.0.1\build\Microsoft.AspNetCore.App.Internal.Assets.props')" />
</ImportGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.app.internal.assets\10.0.1\buildTransitive\Microsoft.AspNetCore.App.Internal.Assets.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.app.internal.assets\10.0.1\buildTransitive\Microsoft.AspNetCore.App.Internal.Assets.targets')" />
</ImportGroup>
</Project>

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]

View File

@ -0,0 +1 @@
[]

View File

@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BlazorApp")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+314a28bf8ff7028abdd8305908ee1062cbadf848")]
[assembly: System.Reflection.AssemblyProductAttribute("BlazorApp")]
[assembly: System.Reflection.AssemblyTitleAttribute("BlazorApp")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
8b3c00ab1ba2f661a2f6812224109506d90ffd56f94a6bb600073091fa8f61a0

View File

@ -0,0 +1,71 @@
is_global = true
build_property.TargetFramework = net10.0
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v10.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb = true
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = BlazorApp
build_property.RootNamespace = BlazorApp
build_property.ProjectDir = C:\Users\Admin\source\repos\CanRead\BlazorApp\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 9.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = C:\Users\Admin\source\repos\CanRead\BlazorApp
build_property._RazorSourceGeneratorDebug =
build_property.EffectiveAnalysisLevelStyle = 10.0
build_property.EnableCodeStyleSeverity =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/App.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xBcHAucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Pages/Can.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xDYW4ucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Pages/Counter.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xDb3VudGVyLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Pages/Error.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xFcnJvci5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Pages/Home.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xIb21lLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Pages/NotFound.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xOb3RGb3VuZC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Pages/Weather.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xXZWF0aGVyLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Routes.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xSb3V0ZXMucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/_Imports.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xfSW1wb3J0cy5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Layout/MainLayout.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTWFpbkxheW91dC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = b-qgsvw684bo
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Layout/NavMenu.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTmF2TWVudS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = b-g8o6n169oq
[C:/Users/Admin/source/repos/CanRead/BlazorApp/Components/Layout/ReconnectModal.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcUmVjb25uZWN0TW9kYWwucmF6b3I=
build_metadata.AdditionalFiles.CssScope = b-pphnjiao61

View File

@ -0,0 +1,18 @@
// <auto-generated/>
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Routing;
global using Microsoft.Extensions.Configuration;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using Microsoft.Extensions.Logging;
global using Microsoft.Extensions.Validation.Embedded;
global using System;
global using System.Collections.Generic;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Net.Http.Json;
global using System.Threading;
global using System.Threading.Tasks;

Binary file not shown.

View File

@ -0,0 +1 @@
dcbb699325d1f189632edd97c075e7ab80e2dbfd360d3ed8a4839026314a16b0

View File

@ -0,0 +1,91 @@
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\appsettings.Development.json
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\appsettings.json
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\BlazorApp.staticwebassets.runtime.json
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\BlazorApp.staticwebassets.endpoints.json
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\BlazorApp.exe
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\BlazorApp.deps.json
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\BlazorApp.runtimeconfig.json
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\BlazorApp.dll
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\BlazorApp.pdb
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\PCANBasic.NET.dll
D:\CanRead\BlazorApp\BlazorApp\bin\Debug\net10.0\SocketCANSharp.dll
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\EmbeddedAttribute.cs
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\ValidatableTypeAttribute.cs
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.csproj.AssemblyReference.cache
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\rpswa.dswa.cache.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.GeneratedMSBuildEditorConfig.editorconfig
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.AssemblyInfoInputs.cache
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.AssemblyInfo.cs
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.csproj.CoreCompileInputs.cache
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.MvcApplicationPartsAssemblyInfo.cache
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\rjimswa.dswa.cache.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\rjsmrazor.dswa.cache.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\rjsmcshtml.dswa.cache.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\scopedcss\Components\Layout\MainLayout.razor.rz.scp.css
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\scopedcss\Components\Layout\NavMenu.razor.rz.scp.css
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\scopedcss\Components\Layout\ReconnectModal.razor.rz.scp.css
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\scopedcss\bundle\BlazorApp.styles.css
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\scopedcss\projectbundle\BlazorApp.bundle.scp.css
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\v7vyzcc6qh-{0}-bqjiyaj88i-bqjiyaj88i.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\m5e6rnmcep-{0}-c2jlpeoesf-c2jlpeoesf.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\o0q64zz2g2-{0}-erw9l3u2r3-erw9l3u2r3.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\7joa6vf0w2-{0}-aexeepp0ev-aexeepp0ev.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\taqldvnaul-{0}-d7shbmvgxk-d7shbmvgxk.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\jfzlrv9cgx-{0}-ausgxo2sd3-ausgxo2sd3.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\rogc4sk0pw-{0}-k8d9w2qqmf-k8d9w2qqmf.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\9wb38qhjvq-{0}-cosvhxvwiu-cosvhxvwiu.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\e0tkuniv2q-{0}-ub07r2b239-ub07r2b239.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\5exm1mo63l-{0}-fvhpjtyr6v-fvhpjtyr6v.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\sgf5lx3sbn-{0}-b7pk76d08c-b7pk76d08c.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\xifcgn9ief-{0}-fsbi9cje9m-fsbi9cje9m.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\xcqk6qv13p-{0}-rzd6atqjts-rzd6atqjts.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\65ii6i50cu-{0}-ee0r1s7dh0-ee0r1s7dh0.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\8ny1ssfslj-{0}-dxx9fxp4il-dxx9fxp4il.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\loo7f5x1gx-{0}-jd9uben2k1-jd9uben2k1.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\p45ce5yffh-{0}-khv3u5hwcm-khv3u5hwcm.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\0546dfdd6f-{0}-r4e9w2rdcm-r4e9w2rdcm.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\03xqw0swdg-{0}-lcd1t2u6c8-lcd1t2u6c8.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\lf383621gq-{0}-c2oey78nd0-c2oey78nd0.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\dcz3aqb7og-{0}-tdbxkamptv-tdbxkamptv.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\oej83ydp7q-{0}-j5mq2jizvt-j5mq2jizvt.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\n5un2q0rmp-{0}-06098lyss8-06098lyss8.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\72hk1wsa3c-{0}-nvvlpmu67g-nvvlpmu67g.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\jt3e1rdii1-{0}-s35ty4nyc5-s35ty4nyc5.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\3til2bm5ay-{0}-pj5nd1wqec-pj5nd1wqec.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\kdgbnj3stq-{0}-46ein0sx1k-46ein0sx1k.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\pgyksi01id-{0}-v0zj4ognzu-v0zj4ognzu.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\k2mw846ued-{0}-37tfw0ft22-37tfw0ft22.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\hevz5itu9o-{0}-hrwsygsryq-hrwsygsryq.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\1qbqjgk7wr-{0}-pk9g2wxc8p-pk9g2wxc8p.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\kay38lw82v-{0}-ft3s53vfgj-ft3s53vfgj.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\vrc98ic1o2-{0}-6cfz1n2cew-6cfz1n2cew.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\h56f1aupc7-{0}-6pdc2jztkx-6pdc2jztkx.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\gh25061luz-{0}-493y06b0oq-493y06b0oq.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\byvyapvtmi-{0}-iovd86k7lj-iovd86k7lj.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\lxae500s9q-{0}-vr1egmr9el-vr1egmr9el.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\5whq523p0y-{0}-kbrnm935zg-kbrnm935zg.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\08cqgvfzcy-{0}-jj8uyg4cgr-jj8uyg4cgr.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\zp2adb4uhm-{0}-y7v9cxd14o-y7v9cxd14o.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\onq1f5nzz4-{0}-notf2xhcfb-notf2xhcfb.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\mxp9w50l4b-{0}-h1s4sie4z3-h1s4sie4z3.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\l2mhd45r4z-{0}-63fj8s7r0e-63fj8s7r0e.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\i0oilot2q1-{0}-0j3bgjxly4-0j3bgjxly4.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\hsa0fwp5ls-{0}-13ja33weya-13ja33weya.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\0txged01c1-{0}-wmp8iwak4q-wmp8iwak4q.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\e2p7e3doxt-{0}-2lgipwaf5j-2lgipwaf5j.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\8v4adbxxmx-{0}-2mc2qwa0tf-2mc2qwa0tf.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\rrzzv9ip5o-{0}-2mc2qwa0tf-2mc2qwa0tf.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\staticwebassets.build.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\staticwebassets.build.json.cache
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\staticwebassets.development.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\staticwebassets.build.endpoints.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\swae.build.ex.cache
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.csproj.Up2Date
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.dll
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\refint\BlazorApp.dll
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.pdb
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.genruntimeconfig.cache
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\ref\BlazorApp.dll
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\compressed\hh92lrx13d-{0}-ag9i8ft9fn-ag9i8ft9fn.gz
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\BlazorApp.sourcelink.json
D:\CanRead\BlazorApp\BlazorApp\obj\Debug\net10.0\staticwebassets.upToDateCheck.txt

Binary file not shown.

View File

@ -0,0 +1 @@
23bd4f7a70c83ce2f9a3ca44dc14b3ee4f327b3cb9f8b52a1d346110324da545

Binary file not shown.

View File

@ -0,0 +1 @@
{"documents":{"D:\\CanRead\\BlazorApp\\*":"https://raw.githubusercontent.com/DTQuan1212/BlazorApp/96751a2cf1944c4425809e0d870e8df75a4252da/*"}}

View File

@ -0,0 +1,7 @@
// <auto-generated/>
namespace Microsoft.CodeAnalysis
{
internal sealed partial class EmbeddedAttribute : global::System.Attribute
{
}
}

View File

@ -0,0 +1,9 @@
// <auto-generated/>
namespace Microsoft.Extensions.Validation.Embedded
{
[global::Microsoft.CodeAnalysis.EmbeddedAttribute]
[global::System.AttributeUsage(global::System.AttributeTargets.Class)]
internal sealed class ValidatableTypeAttribute : global::System.Attribute
{
}
}

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More