diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..9c0eedc9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,167 @@ +name: CI/CD Pipeline + +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main ] + +jobs: + test: + name: 测试 + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x, 20.x] + + steps: + - name: 检出代码 + uses: actions/checkout@v4 + + - name: 设置 Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + cache-dependency-path: frontend/package-lock.json + + - name: 安装依赖 + working-directory: ./frontend + run: npm ci + + - name: 类型检查 + working-directory: ./frontend + run: npm run type-check + + - name: 代码风格检查 + working-directory: ./frontend + run: npm run lint + + - name: 代码格式检查 + working-directory: ./frontend + run: npm run format:check + + - name: 运行单元测试 + working-directory: ./frontend + run: npm run test:unit:coverage + + - name: 上传覆盖率报告到 Codecov + uses: codecov/codecov-action@v3 + with: + file: ./frontend/coverage/lcov.info + flags: unittests + name: codecov-umbrella + + - name: 构建应用 + working-directory: ./frontend + run: npm run build + + - name: 安装 Playwright + working-directory: ./frontend + run: npx playwright install --with-deps + + - name: 运行 E2E 测试 + working-directory: ./frontend + run: npm run test:e2e + + - name: 上传 E2E 测试报告 + uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: frontend/playwright-report/ + retention-days: 30 + + - name: 上传测试结果 + uses: actions/upload-artifact@v3 + if: always() + with: + name: test-results + path: frontend/test-results/ + retention-days: 30 + + security: + name: 安全检查 + runs-on: ubuntu-latest + + steps: + - name: 检出代码 + uses: actions/checkout@v4 + + - name: 设置 Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + cache: 'npm' + cache-dependency-path: frontend/package-lock.json + + - name: 安装依赖 + working-directory: ./frontend + run: npm ci + + - name: 运行安全审计 + working-directory: ./frontend + run: npm audit --audit-level moderate + + - name: 运行 Snyk 安全扫描 + uses: snyk/actions/node@master + continue-on-error: true + env: + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + with: + args: --severity-threshold=high + + deploy: + name: 部署 + needs: [test, security] + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' && github.event_name == 'push' + + steps: + - name: 检出代码 + uses: actions/checkout@v4 + + - name: 设置 Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + cache: 'npm' + cache-dependency-path: frontend/package-lock.json + + - name: 安装依赖 + working-directory: ./frontend + run: npm ci + + - name: 构建应用 + working-directory: ./frontend + run: npm run build + + - name: 部署到服务器 + uses: appleboy/ssh-action@v1.0.0 + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USERNAME }} + key: ${{ secrets.SSH_KEY }} + script: | + cd /var/www/html + git pull origin main + cd frontend + npm ci --production + npm run build + pm2 restart frontend-app + + notify: + name: 通知 + needs: [test, security, deploy] + runs-on: ubuntu-latest + if: always() + + steps: + - name: 发送通知到 Slack + uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + channel: '#ci-cd' + webhook_url: ${{ secrets.SLACK_WEBHOOK }} + fields: repo,message,commit,author,action,eventName,ref,workflow \ No newline at end of file diff --git a/HardwarePerformance.Tests/HardwarePerformance.Tests.csproj b/HardwarePerformance.Tests/HardwarePerformance.Tests.csproj deleted file mode 100644 index 1310f582..00000000 --- a/HardwarePerformance.Tests/HardwarePerformance.Tests.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - net9.0 - enable - enable - false - - - - - - - - - - - - - - - - - - - diff --git a/HardwarePerformance.Tests/Services/CategoryServiceTests.cs b/HardwarePerformance.Tests/Services/CategoryServiceTests.cs deleted file mode 100644 index d30d80fa..00000000 --- a/HardwarePerformance.Tests/Services/CategoryServiceTests.cs +++ /dev/null @@ -1,97 +0,0 @@ -using AutoMapper; -using HardwarePerformance.Models; -using HardwarePerformance.Models.DTOs; -using HardwarePerformance.Services; -using Moq; - -namespace HardwarePerformance.Tests.Services -{ - public class CategoryServiceTests - { - private readonly Mock _mockCategoryRepository; - private readonly Mock _mockMapper; - private readonly CategoryService _categoryService; - - public CategoryServiceTests() - { - _mockCategoryRepository = new Mock(); - _mockMapper = new Mock(); - _categoryService = new CategoryService(_mockCategoryRepository.Object, _mockMapper.Object); - } - - [Fact] - public async Task GetAllCategoriesAsync_ReturnsAllCategories() - { - // Arrange - var categories = new List - { - new Category { Id = 1, Name = "手机CPU", Description = "手机处理器" }, - new Category { Id = 2, Name = "电脑CPU", Description = "电脑处理器" } - }; - - var categoryDtos = new List - { - new CategoryDto { Id = 1, Name = "手机CPU", Description = "手机处理器" }, - new CategoryDto { Id = 2, Name = "电脑CPU", Description = "电脑处理器" } - }; - - _mockCategoryRepository.Setup(repo => repo.GetAllAsync()) - .ReturnsAsync(categories); - - _mockMapper.Setup(m => m.Map>(categories)) - .Returns(categoryDtos); - - // Act - var result = await _categoryService.GetAllCategoriesAsync(); - - // Assert - Assert.NotNull(result); - Assert.Equal(2, result.Count()); - _mockCategoryRepository.Verify(repo => repo.GetAllAsync(), Times.Once); - _mockMapper.Verify(m => m.Map>(categories), Times.Once); - } - - [Fact] - public async Task GetCategoryByIdAsync_ExistingCategory_ReturnsCategoryDto() - { - // Arrange - var categoryId = 1; - var category = new Category { Id = categoryId, Name = "手机CPU", Description = "手机处理器" }; - var categoryDto = new CategoryDto { Id = categoryId, Name = "手机CPU", Description = "手机处理器" }; - - _mockCategoryRepository.Setup(repo => repo.GetByIdAsync(categoryId)) - .ReturnsAsync(category); - - _mockMapper.Setup(m => m.Map(category)) - .Returns(categoryDto); - - // Act - var result = await _categoryService.GetCategoryByIdAsync(categoryId); - - // Assert - Assert.NotNull(result); - Assert.Equal(categoryId, result.Id); - Assert.Equal("手机CPU", result.Name); - _mockCategoryRepository.Verify(repo => repo.GetByIdAsync(categoryId), Times.Once); - _mockMapper.Verify(m => m.Map(category), Times.Once); - } - - [Fact] - public async Task GetCategoryByIdAsync_NonExistingCategory_ReturnsNull() - { - // Arrange - var categoryId = 999; - - _mockCategoryRepository.Setup(repo => repo.GetByIdAsync(categoryId)) - .ReturnsAsync((Category?)null); - - // Act - var result = await _categoryService.GetCategoryByIdAsync(categoryId); - - // Assert - Assert.Null(result); - _mockCategoryRepository.Verify(repo => repo.GetByIdAsync(categoryId), Times.Once); - _mockMapper.Verify(m => m.Map(It.IsAny()), Times.Never); - } - } -} \ No newline at end of file diff --git a/HardwarePerformance.Tests/Services/ComparisonServiceTests.cs b/HardwarePerformance.Tests/Services/ComparisonServiceTests.cs deleted file mode 100644 index 6bd34baf..00000000 --- a/HardwarePerformance.Tests/Services/ComparisonServiceTests.cs +++ /dev/null @@ -1,173 +0,0 @@ -using AutoMapper; -using HardwarePerformance.Models; -using HardwarePerformance.Models.DTOs; -using HardwarePerformance.Services; -using Moq; - -namespace HardwarePerformance.Tests.Services -{ - public class ComparisonServiceTests - { - private readonly Mock _mockProductRepository; - private readonly Mock _mockMapper; - private readonly ComparisonService _comparisonService; - - public ComparisonServiceTests() - { - _mockProductRepository = new Mock(); - _mockMapper = new Mock(); - _comparisonService = new ComparisonService(_mockProductRepository.Object, _mockMapper.Object); - } - - [Fact] - public async Task CompareProductsAsync_ValidProductIds_ReturnsComparisonData() - { - // Arrange - var productIds = new List { 1, 2 }; - - var products = new List - { - new Product - { - Id = 1, - Name = "Intel Core i9", - Manufacturer = "Intel", - CategoryId = 1, - CurrentRank = 1, - ReleaseDate = DateTime.Now.AddMonths(-6), - Price = 500, - PerformanceScore = 4000, - PerformanceScores = new List - { - new PerformanceScore { Id = 1, ProductId = 1, TestType = "Single-Core", Score = 1500 }, - new PerformanceScore { Id = 2, ProductId = 1, TestType = "Multi-Core", Score = 8000 } - }, - Specifications = new List - { - new Specification { Id = 1, ProductId = 1, Name = "Cores", Value = "8" }, - new Specification { Id = 2, ProductId = 1, Name = "Threads", Value = "16" } - } - }, - new Product - { - Id = 2, - Name = "AMD Ryzen 9", - Manufacturer = "AMD", - CategoryId = 1, - CurrentRank = 2, - ReleaseDate = DateTime.Now.AddMonths(-4), - Price = 450, - PerformanceScore = 3800, - PerformanceScores = new List - { - new PerformanceScore { Id = 3, ProductId = 2, TestType = "Single-Core", Score = 1400 }, - new PerformanceScore { Id = 4, ProductId = 2, TestType = "Multi-Core", Score = 7500 } - }, - Specifications = new List - { - new Specification { Id = 3, ProductId = 2, Name = "Cores", Value = "8" }, - new Specification { Id = 4, ProductId = 2, Name = "Threads", Value = "16" } - } - } - }; - - var productDtos = new List - { - new ProductDto - { - Id = 1, - Name = "Intel Core i9", - Manufacturer = "Intel", - CategoryId = 1, - CurrentRank = 1, - ReleaseDate = DateTime.Now.AddMonths(-6), - Price = 500, - PerformanceScore = 4000, - PerformanceScores = new List - { - new PerformanceScore { Id = 1, ProductId = 1, TestType = "Single-Core", Score = 1500 }, - new PerformanceScore { Id = 2, ProductId = 1, TestType = "Multi-Core", Score = 8000 } - }, - Specifications = new List - { - new Specification { Id = 1, ProductId = 1, Name = "Cores", Value = "8" }, - new Specification { Id = 2, ProductId = 1, Name = "Threads", Value = "16" } - } - }, - new ProductDto - { - Id = 2, - Name = "AMD Ryzen 9", - Manufacturer = "AMD", - CategoryId = 1, - CurrentRank = 2, - ReleaseDate = DateTime.Now.AddMonths(-4), - Price = 450, - PerformanceScore = 3800, - PerformanceScores = new List - { - new PerformanceScore { Id = 3, ProductId = 2, TestType = "Single-Core", Score = 1400 }, - new PerformanceScore { Id = 4, ProductId = 2, TestType = "Multi-Core", Score = 7500 } - }, - Specifications = new List - { - new Specification { Id = 3, ProductId = 2, Name = "Cores", Value = "8" }, - new Specification { Id = 4, ProductId = 2, Name = "Threads", Value = "16" } - } - } - }; - - _mockProductRepository.Setup(repo => repo.GetByIdsAsync(productIds)) - .ReturnsAsync(products); - - _mockMapper.Setup(m => m.Map>(products)) - .Returns(productDtos); - - // Act - var result = await _comparisonService.CompareProductsAsync(productIds); - - // Assert - Assert.NotNull(result); - Assert.Equal(2, result.Products.Count); - Assert.NotNull(result.ComparisonMatrix); - _mockProductRepository.Verify(repo => repo.GetByIdsAsync(productIds), Times.Once); - _mockMapper.Verify(m => m.Map>(products), Times.Once); - } - - [Fact] - public async Task CompareProductsAsync_EmptyProductIds_ThrowsArgumentException() - { - // Arrange - var productIds = new List(); - - // Act & Assert - await Assert.ThrowsAsync(async () => - await _comparisonService.CompareProductsAsync(productIds)); - } - - [Fact] - public async Task CompareProductsAsync_TooManyProductIds_ThrowsArgumentException() - { - // Arrange - var productIds = new List { 1, 2, 3, 4, 5 }; - - // Act & Assert - await Assert.ThrowsAsync(async () => - await _comparisonService.CompareProductsAsync(productIds)); - } - - [Fact] - public async Task CompareProductsAsync_NonExistingProductIds_ThrowsKeyNotFoundException() - { - // Arrange - var productIds = new List { 1, 2 }; - - _mockProductRepository.Setup(repo => repo.GetByIdsAsync(productIds)) - .ReturnsAsync(new List()); - - // Act & Assert - await Assert.ThrowsAsync(async () => - await _comparisonService.CompareProductsAsync(productIds)); - } - } -} \ No newline at end of file diff --git a/HardwarePerformance.Tests/Services/ProductServiceTests.cs b/HardwarePerformance.Tests/Services/ProductServiceTests.cs deleted file mode 100644 index 2ec1be1f..00000000 --- a/HardwarePerformance.Tests/Services/ProductServiceTests.cs +++ /dev/null @@ -1,184 +0,0 @@ -using AutoMapper; -using HardwarePerformance.Models; -using HardwarePerformance.Models.DTOs; -using HardwarePerformance.Services; -using Moq; - -namespace HardwarePerformance.Tests.Services -{ - public class ProductServiceTests - { - private readonly Mock _mockProductRepository; - private readonly Mock _mockMapper; - private readonly ProductService _productService; - - public ProductServiceTests() - { - _mockProductRepository = new Mock(); - _mockMapper = new Mock(); - _productService = new ProductService(_mockProductRepository.Object, _mockMapper.Object); - } - - [Fact] - public async Task GetProductsByCategoryAsync_ReturnsPagedProducts() - { - // Arrange - var categoryId = 1; - var page = 1; - var pageSize = 10; - var sortBy = "Name"; - var sortOrder = "asc"; - - var products = new List - { - new Product { Id = 1, Name = "Intel Core i9", CategoryId = categoryId }, - new Product { Id = 2, Name = "AMD Ryzen 9", CategoryId = categoryId } - }; - - var productDtos = new List - { - new ProductListDto { Id = 1, Name = "Intel Core i9" }, - new ProductListDto { Id = 2, Name = "AMD Ryzen 9" } - }; - - var pagedResult = new PagedResultDto - { - Items = productDtos, - TotalCount = 2, - Page = page, - PageSize = pageSize - }; - - _mockProductRepository.Setup(repo => repo.GetByCategoryAsync(categoryId, page, pageSize, sortBy, sortOrder)) - .ReturnsAsync(products); - - _mockProductRepository.Setup(repo => repo.CountAsync(categoryId)) - .ReturnsAsync(2); - - _mockMapper.Setup(m => m.Map>(products)) - .Returns(productDtos); - - // Act - var result = await _productService.GetProductsByCategoryAsync(categoryId, page, pageSize, sortBy, sortOrder); - - // Assert - Assert.NotNull(result); - Assert.Equal(2, result.TotalCount); - Assert.Equal(2, result.Items.Count()); - _mockProductRepository.Verify(repo => repo.GetByCategoryAsync(categoryId, page, pageSize, sortBy, sortOrder), Times.Once); - _mockProductRepository.Verify(repo => repo.CountAsync(categoryId), Times.Once); - _mockMapper.Verify(m => m.Map>(products), Times.Once); - } - - [Fact] - public async Task GetProductByIdAsync_ExistingProduct_ReturnsProductDto() - { - // Arrange - var productId = 1; - var product = new Product - { - Id = productId, - Name = "Intel Core i9", - CategoryId = 1, - PerformanceScores = new List(), - Specifications = new List() - }; - - var productDto = new ProductDto - { - Id = productId, - Name = "Intel Core i9", - CategoryId = 1, - PerformanceScores = new List(), - Specifications = new List() - }; - - _mockProductRepository.Setup(repo => repo.GetByIdAsync(productId)) - .ReturnsAsync(product); - - _mockMapper.Setup(m => m.Map(product)) - .Returns(productDto); - - // Act - var result = await _productService.GetProductByIdAsync(productId); - - // Assert - Assert.NotNull(result); - Assert.Equal(productId, result.Id); - Assert.Equal("Intel Core i9", result.Name); - _mockProductRepository.Verify(repo => repo.GetByIdAsync(productId), Times.Once); - _mockMapper.Verify(m => m.Map(product), Times.Once); - } - - [Fact] - public async Task GetProductByIdAsync_NonExistingProduct_ReturnsNull() - { - // Arrange - var productId = 999; - - _mockProductRepository.Setup(repo => repo.GetByIdAsync(productId)) - .ReturnsAsync((Product?)null); - - // Act - var result = await _productService.GetProductByIdAsync(productId); - - // Assert - Assert.Null(result); - _mockProductRepository.Verify(repo => repo.GetByIdAsync(productId), Times.Once); - _mockMapper.Verify(m => m.Map(It.IsAny()), Times.Never); - } - - [Fact] - public async Task SearchProductsAsync_ReturnsPagedSearchResults() - { - // Arrange - var query = "Intel"; - var categoryId = 1; - var manufacturer = "Intel"; - var minScore = 1000; - var maxScore = 5000; - var page = 1; - var pageSize = 10; - - var products = new List - { - new Product { Id = 1, Name = "Intel Core i9", Manufacturer = "Intel", CategoryId = categoryId, PerformanceScore = 4000 }, - new Product { Id = 2, Name = "Intel Core i7", Manufacturer = "Intel", CategoryId = categoryId, PerformanceScore = 3000 } - }; - - var productDtos = new List - { - new ProductListDto { Id = 1, Name = "Intel Core i9" }, - new ProductListDto { Id = 2, Name = "Intel Core i7" } - }; - - var pagedResult = new PagedResultDto - { - Items = productDtos, - TotalCount = 2, - Page = page, - PageSize = pageSize - }; - - _mockProductRepository.Setup(repo => repo.SearchAsync(query, categoryId, manufacturer, minScore, maxScore, page, pageSize)) - .ReturnsAsync(products); - - _mockProductRepository.Setup(repo => repo.CountSearchResultsAsync(query, categoryId, manufacturer, minScore, maxScore)) - .ReturnsAsync(2); - - _mockMapper.Setup(m => m.Map>(products)) - .Returns(productDtos); - - // Act - var result = await _productService.SearchProductsAsync(query, categoryId, manufacturer, minScore, maxScore, page, pageSize); - - // Assert - Assert.NotNull(result); - Assert.Equal(2, result.TotalCount); - Assert.Equal(2, result.Items.Count()); - _mockProductRepository.Verify(repo => repo.SearchAsync(query, categoryId, manufacturer, minScore, maxScore, page, pageSize), Times.Once); - _mockProductRepository.Verify(repo => repo.CountSearchResultsAsync(query, categoryId, manufacturer, minScore, maxScore), Times.Once); - _mockMapper.Verify(m => m.Map>(products), Times.Once); - } - } -} \ No newline at end of file diff --git a/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.dgspec.json b/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.dgspec.json deleted file mode 100644 index add2f89e..00000000 --- a/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.dgspec.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "format": 1, - "restore": { - "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj": {} - }, - "projects": { - "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "projectName": "HardwarePerformance.Tests", - "projectPath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.NET.Test.Sdk": { - "target": "Package", - "version": "[17.12.0, )" - }, - "coverlet.collector": { - "target": "Package", - "version": "[6.0.2, )" - }, - "xunit": { - "target": "Package", - "version": "[2.9.2, )" - }, - "xunit.runner.visualstudio": { - "target": "Package", - "version": "[2.8.2, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.g.props b/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.g.props deleted file mode 100644 index b085de15..00000000 --- a/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.g.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.14.0 - - - - - - \ No newline at end of file diff --git a/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.g.targets b/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.g.targets deleted file mode 100644 index 3dc06ef3..00000000 --- a/HardwarePerformance.Tests/obj/HardwarePerformance.Tests.csproj.nuget.g.targets +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/HardwarePerformance.Tests/obj/project.assets.json b/HardwarePerformance.Tests/obj/project.assets.json deleted file mode 100644 index c6b16628..00000000 --- a/HardwarePerformance.Tests/obj/project.assets.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "version": 3, - "targets": { - "net9.0": {} - }, - "libraries": {}, - "projectFileDependencyGroups": { - "net9.0": [ - "Microsoft.NET.Test.Sdk >= 17.12.0", - "coverlet.collector >= 6.0.2", - "xunit >= 2.9.2", - "xunit.runner.visualstudio >= 2.8.2" - ] - }, - "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "projectName": "HardwarePerformance.Tests", - "projectPath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.NET.Test.Sdk": { - "target": "Package", - "version": "[17.12.0, )" - }, - "coverlet.collector": { - "target": "Package", - "version": "[6.0.2, )" - }, - "xunit": { - "target": "Package", - "version": "[2.9.2, )" - }, - "xunit.runner.visualstudio": { - "target": "Package", - "version": "[2.8.2, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - }, - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='coverlet.collector'&semVerLevel=2.0.0”检索有关“coverlet.collector”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "coverlet.collector" - }, - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='xunit'&semVerLevel=2.0.0”检索有关“xunit”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "xunit" - }, - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='Microsoft.NET.Test.Sdk'&semVerLevel=2.0.0”检索有关“Microsoft.NET.Test.Sdk”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "Microsoft.NET.Test.Sdk" - } - ] -} \ No newline at end of file diff --git a/HardwarePerformance.Tests/obj/project.nuget.cache b/HardwarePerformance.Tests/obj/project.nuget.cache deleted file mode 100644 index e31f825a..00000000 --- a/HardwarePerformance.Tests/obj/project.nuget.cache +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "HWf5d7t+LFg=", - "success": false, - "projectFilePath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "expectedPackageFiles": [], - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='coverlet.collector'&semVerLevel=2.0.0”检索有关“coverlet.collector”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "filePath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "libraryId": "coverlet.collector", - "targetGraphs": [] - }, - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='xunit'&semVerLevel=2.0.0”检索有关“xunit”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "filePath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "libraryId": "xunit", - "targetGraphs": [] - }, - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='Microsoft.NET.Test.Sdk'&semVerLevel=2.0.0”检索有关“Microsoft.NET.Test.Sdk”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "filePath": "C:\\work\\电脑硬件-01\\HardwarePerformance.Tests\\HardwarePerformance.Tests.csproj", - "libraryId": "Microsoft.NET.Test.Sdk", - "targetGraphs": [] - } - ] -} \ No newline at end of file diff --git a/MinimalAPI/MappingProfile.cs b/MinimalAPI/MappingProfile.cs deleted file mode 100644 index 18ca2f8e..00000000 --- a/MinimalAPI/MappingProfile.cs +++ /dev/null @@ -1,20 +0,0 @@ -using AutoMapper; -using HardwarePerformance.Models; -using HardwarePerformance.Models.DTOs; - -namespace HardwarePerformance -{ - public class MappingProfile : Profile - { - public MappingProfile() - { - CreateMap(); - - CreateMap() - .ForMember(dest => dest.PerformanceScores, opt => opt.Ignore()) - .ForMember(dest => dest.Specifications, opt => opt.Ignore()); - - CreateMap(); - } - } -} \ No newline at end of file diff --git a/MinimalAPI/MinimalAPI.csproj b/MinimalAPI/MinimalAPI.csproj deleted file mode 100644 index ff6c99a9..00000000 --- a/MinimalAPI/MinimalAPI.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net9.0 - enable - enable - - - - - - - diff --git a/MinimalAPI/Models/DTOs/CategoryDto.cs b/MinimalAPI/Models/DTOs/CategoryDto.cs deleted file mode 100644 index 5216bf99..00000000 --- a/MinimalAPI/Models/DTOs/CategoryDto.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace HardwarePerformance.Models.DTOs -{ - public class CategoryDto - { - public int Id { get; set; } - public string Name { get; set; } = string.Empty; - public string Description { get; set; } = string.Empty; - } -} \ No newline at end of file diff --git a/MinimalAPI/Models/DTOs/PagedResultDto.cs b/MinimalAPI/Models/DTOs/PagedResultDto.cs deleted file mode 100644 index 695485a5..00000000 --- a/MinimalAPI/Models/DTOs/PagedResultDto.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace HardwarePerformance.Models.DTOs -{ - public class PagedResultDto - { - public List Items { get; set; } = new(); - public int Total { get; set; } - public int CurrentPage { get; set; } - public int PageSize { get; set; } - public int TotalPages { get; set; } - } -} \ No newline at end of file diff --git a/MinimalAPI/Models/DTOs/ProductDto.cs b/MinimalAPI/Models/DTOs/ProductDto.cs deleted file mode 100644 index 9e881500..00000000 --- a/MinimalAPI/Models/DTOs/ProductDto.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Collections.Generic; - -namespace HardwarePerformance.Models.DTOs -{ - public class ProductDto - { - public int Id { get; set; } - public string Name { get; set; } = string.Empty; - public string Model { get; set; } = string.Empty; - public string Manufacturer { get; set; } = string.Empty; - public int CategoryId { get; set; } - public int CurrentRank { get; set; } - public DateTime ReleaseDate { get; set; } - public decimal? Price { get; set; } - public int? PerformanceScore { get; set; } - public CategoryDto? Category { get; set; } - public List PerformanceScores { get; set; } = new(); - public List Specifications { get; set; } = new(); - } -} \ No newline at end of file diff --git a/MinimalAPI/Models/DTOs/ProductListDto.cs b/MinimalAPI/Models/DTOs/ProductListDto.cs deleted file mode 100644 index 4fdfa030..00000000 --- a/MinimalAPI/Models/DTOs/ProductListDto.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace HardwarePerformance.Models.DTOs -{ - public class ProductListDto - { - public int Id { get; set; } - public string Name { get; set; } = string.Empty; - public string Model { get; set; } = string.Empty; - public string Manufacturer { get; set; } = string.Empty; - public int CategoryId { get; set; } - public int CurrentRank { get; set; } - public DateTime ReleaseDate { get; set; } - public decimal? Price { get; set; } - public int? PerformanceScore { get; set; } - } -} \ No newline at end of file diff --git a/MinimalAPI/Program.cs b/MinimalAPI/Program.cs deleted file mode 100644 index 19b43543..00000000 --- a/MinimalAPI/Program.cs +++ /dev/null @@ -1,184 +0,0 @@ -using System.IO.Compression; -using System.Text.Json.Serialization; - -namespace MinimalAPI -{ - // 定义数据模型 - record Category(int Id, string Name, string Description); - record Product(int Id, string Name, string Model, string Manufacturer, int CategoryId, int CurrentRank, DateTime ReleaseDate, decimal? Price); - record ApiResponse(bool Success, T? Data, string? Message = null); - record PagedResponse(List Items, int TotalCount, int PageNumber, int PageSize, int TotalPages); - record ComparisonRequest(List ProductIds); - - public class Program - { - public static void Main(string[] args) - { - var builder = WebApplication.CreateBuilder(args); - - // 配置响应压缩 - builder.Services.AddResponseCompression(options => - { - options.EnableForHttps = true; - options.Providers.Add(); - options.Providers.Add(); - options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] - { - "application/json", - "application/javascript", - "text/css", - "text/html", - "text/plain", - "text/xml" - }); - }); - - builder.Services.Configure(options => - { - options.Level = CompressionLevel.Fastest; - }); - - builder.Services.Configure(options => - { - options.Level = CompressionLevel.Fastest; - }); - - // 配置JSON序列化选项 - builder.Services.Configure(options => - { - options.SerializerOptions.PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase; - options.SerializerOptions.Converters.Add(new JsonStringEnumConverter()); - }); - - // 配置CORS - builder.Services.AddCors(options => - { - options.AddPolicy("AllowAll", policy => - { - policy.AllowAnyOrigin() - .AllowAnyMethod() - .AllowAnyHeader(); - }); - }); - - // 注册服务 - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - - var app = builder.Build(); - - // 添加响应压缩中间件 - app.UseResponseCompression(); - - // 使用CORS - app.UseCors("AllowAll"); - - // 模拟数据 - var categories = new List - { - new(1, "手机CPU", "移动设备处理器"), - new(2, "手机GPU", "移动设备图形处理器"), - new(3, "电脑CPU", "桌面和笔记本处理器"), - new(4, "电脑GPU", "桌面和笔记本图形处理器") - }; - - var products = new List - { - new(1, "Apple A17 Pro", "A17 Pro", "Apple", 1, 1, new DateTime(2023, 9, 12), null), - new(2, "Snapdragon 8 Gen 3", "SM8650-AB", "Qualcomm", 1, 2, new DateTime(2023, 10, 24), null), - new(3, "Intel Core i9-13900K", "Core i9-13900K", "Intel", 3, 1, new DateTime(2022, 10, 20), 589.99m), - new(4, "AMD Ryzen 9 7950X", "Ryzen 9 7950X", "AMD", 3, 2, new DateTime(2022, 9, 27), 699.99m), - new(5, "NVIDIA GeForce RTX 4090", "RTX 4090", "NVIDIA", 4, 1, new DateTime(2022, 10, 12), 1599.99m), - new(6, "AMD Radeon RX 7900 XTX", "RX 7900 XTX", "AMD", 4, 2, new DateTime(2022, 12, 3), 999.99m) - }; - - // API端点 - - // 类别相关 - app.MapGet("/api/categories", async (ICategoryService categoryService) => - { - var categories = await categoryService.GetAllCategoriesAsync(); - return Results.Ok(new ApiResponse>(true, categories)); - }); - - app.MapGet("/api/categories/{id}", async (int id, ICategoryService categoryService) => - { - var category = await categoryService.GetCategoryByIdAsync(id); - if (category == null) - { - return Results.NotFound(new ApiResponse(false, null, "类别不存在")); - } - return Results.Ok(new ApiResponse(true, category)); - }); - - // 产品API - app.MapGet("/api/products", async (int? categoryId, int page = 1, int pageSize = 20, string sortBy = "CurrentRank", string sortOrder = "asc", IProductService productService) => - { - if (!categoryId.HasValue) - { - return Results.BadRequest(new ApiResponse(false, null, "类别ID是必需的")); - } - - var pagedResult = await productService.GetProductsByCategoryAsync(categoryId.Value, page, pageSize, sortBy, sortOrder); - return Results.Ok(new ApiResponse>(true, pagedResult)); - }); - - app.MapGet("/api/products/{id}", async (int id, IProductService productService) => - { - var product = await productService.GetProductByIdAsync(id); - if (product == null) - { - return Results.NotFound(new ApiResponse(false, null, "产品不存在")); - } - return Results.Ok(new ApiResponse(true, product)); - }); - - app.MapGet("/api/products/search", async (string q, int? categoryId, string? manufacturer, decimal? minScore, decimal? maxScore, int page = 1, int pageSize = 20, IProductService productService) => - { - if (string.IsNullOrWhiteSpace(q)) - { - return Results.BadRequest(new ApiResponse(false, null, "搜索关键词不能为空")); - } - - var pagedResult = await productService.SearchProductsAsync(q, categoryId, manufacturer, minScore, maxScore, page, pageSize); - return Results.Ok(new ApiResponse>(true, pagedResult)); - }); - - app.MapGet("/api/products/filter", async (int categoryId, string? manufacturer, decimal? minScore, decimal? maxScore, int? year, int page = 1, int pageSize = 20, IProductService productService) => - { - var pagedResult = await productService.FilterProductsAsync(categoryId, manufacturer, minScore, maxScore, year, page, pageSize); - return Results.Ok(new ApiResponse>(true, pagedResult)); - }); - - // 产品对比 - app.MapPost("/api/comparison", async (ComparisonRequest request, IComparisonService comparisonService) => - { - // 验证请求 - if (request.ProductIds == null || request.ProductIds.Count < 2 || request.ProductIds.Count > 4) - { - return Results.BadRequest(new ApiResponse(false, null, "产品ID数量必须在2到4之间")); - } - - var comparisonData = await comparisonService.CompareProductsAsync(request.ProductIds); - if (comparisonData == null) - { - return Results.NotFound(new ApiResponse(false, null, "无法获取产品对比数据")); - } - - return Results.Ok(new ApiResponse(true, comparisonData)); - }); - - // 状态检查端点 - app.MapGet("/api/status", () => new - { - Status = "Running", - Message = "API服务正常运行", - Timestamp = DateTime.Now, - Version = "1.0.0" - }); - - app.Run(); - } - } -} diff --git a/MinimalAPI/Properties/launchSettings.json b/MinimalAPI/Properties/launchSettings.json deleted file mode 100644 index b909d14d..00000000 --- a/MinimalAPI/Properties/launchSettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:5172", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:7055;http://localhost:5172", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/MinimalAPI/Repositories/CategoryRepository.cs b/MinimalAPI/Repositories/CategoryRepository.cs deleted file mode 100644 index 66e25cb8..00000000 --- a/MinimalAPI/Repositories/CategoryRepository.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using HardwarePerformance.Data; -using HardwarePerformance.Models; - -namespace HardwarePerformance.Repositories -{ - public class CategoryRepository : Repository, ICategoryRepository - { - public CategoryRepository(AppDbContext context) : base(context) - { - } - - public async Task GetByNameAsync(string name) - { - return await _dbSet.FirstOrDefaultAsync(c => c.Name == name); - } - - public async Task ExistsAsync(int id) - { - return await _dbSet.AnyAsync(c => c.Id == id); - } - - public async Task NameExistsAsync(string name) - { - return await _dbSet.AnyAsync(c => c.Name == name); - } - } -} \ No newline at end of file diff --git a/MinimalAPI/Repositories/ICategoryRepository.cs b/MinimalAPI/Repositories/ICategoryRepository.cs deleted file mode 100644 index 60657d06..00000000 --- a/MinimalAPI/Repositories/ICategoryRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -using HardwarePerformance.Models; - -namespace HardwarePerformance.Repositories -{ - public interface ICategoryRepository : IRepository - { - Task GetByNameAsync(string name); - Task ExistsAsync(int id); - Task NameExistsAsync(string name); - } -} \ No newline at end of file diff --git a/MinimalAPI/Repositories/IProductRepository.cs b/MinimalAPI/Repositories/IProductRepository.cs deleted file mode 100644 index 5ae0c192..00000000 --- a/MinimalAPI/Repositories/IProductRepository.cs +++ /dev/null @@ -1,18 +0,0 @@ -using HardwarePerformance.Models; - -namespace HardwarePerformance.Repositories -{ - public interface IProductRepository : IRepository - { - Task> GetByCategoryAsync(int categoryId); - Task> GetByCategoryAsync(int categoryId, int page, int pageSize, string sortBy = "CurrentRank", string sortOrder = "asc"); - Task> SearchAsync(string query); - Task> SearchAsync(string query, int? categoryId = null, string? manufacturer = null, int? minScore = null, int? maxScore = null, int page = 1, int pageSize = 20); - Task> FilterAsync(int? categoryId, string? manufacturer, int? minScore, int? maxScore, int? year); - Task> FilterAsync(int? categoryId, string? manufacturer, int? minScore, int? maxScore, int? year, int page, int pageSize, string sortBy = "CurrentRank", string sortOrder = "asc"); - Task CountAsync(int? categoryId = null); - Task CountSearchResultsAsync(string query, int? categoryId = null, string? manufacturer = null, int? minScore = null, int? maxScore = null); - Task CountFilterResultsAsync(int? categoryId, string? manufacturer, int? minScore, int? maxScore, int? year); - Task GetCategoryByProductIdAsync(int productId); - } -} \ No newline at end of file diff --git a/MinimalAPI/Repositories/IRepository.cs b/MinimalAPI/Repositories/IRepository.cs deleted file mode 100644 index ef1a0149..00000000 --- a/MinimalAPI/Repositories/IRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Linq.Expressions; -using HardwarePerformance.Models; - -namespace HardwarePerformance.Repositories -{ - public interface IRepository where T : class - { - Task GetByIdAsync(int id); - Task> GetAllAsync(); - Task> FindAsync(Expression> predicate); - Task AddAsync(T entity); - Task UpdateAsync(T entity); - Task DeleteAsync(T entity); - Task CountAsync(Expression>? predicate = null); - } -} \ No newline at end of file diff --git a/MinimalAPI/Repositories/ProductRepository.cs b/MinimalAPI/Repositories/ProductRepository.cs deleted file mode 100644 index 5c54f3f2..00000000 --- a/MinimalAPI/Repositories/ProductRepository.cs +++ /dev/null @@ -1,265 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using HardwarePerformance.Data; -using HardwarePerformance.Models; - -namespace HardwarePerformance.Repositories -{ - public class ProductRepository : Repository, IProductRepository - { - public ProductRepository(AppDbContext context) : base(context) - { - } - - public async Task> GetByCategoryAsync(int categoryId) - { - return await _dbSet - .Where(p => p.CategoryId == categoryId) - .OrderBy(p => p.CurrentRank) - .ToListAsync(); - } - - public async Task> GetByCategoryAsync(int categoryId, int page, int pageSize, string sortBy = "CurrentRank", string sortOrder = "asc") - { - var query = _dbSet.Where(p => p.CategoryId == categoryId); - - // 排序 - query = sortBy.ToLower() switch - { - "name" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.Name) : query.OrderBy(p => p.Name), - "manufacturer" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.Manufacturer) : query.OrderBy(p => p.Manufacturer), - "releasedate" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.ReleaseDate) : query.OrderBy(p => p.ReleaseDate), - "price" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.Price) : query.OrderBy(p => p.Price), - _ => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.CurrentRank) : query.OrderBy(p => p.CurrentRank) - }; - - return await query - .Skip((page - 1) * pageSize) - .Take(pageSize) - .ToListAsync(); - } - - public async Task> SearchAsync(string query) - { - return await _dbSet - .Where(p => - p.Name.Contains(query) || - p.Model.Contains(query) || - p.Manufacturer.Contains(query)) - .ToListAsync(); - } - - public async Task> SearchAsync(string query, int? categoryId = null, string? manufacturer = null, int? minScore = null, int? maxScore = null, int page = 1, int pageSize = 20) - { - var queryable = _dbSet.AsQueryable(); - - if (categoryId.HasValue) - { - queryable = queryable.Where(p => p.CategoryId == categoryId.Value); - } - - if (!string.IsNullOrEmpty(manufacturer)) - { - queryable = queryable.Where(p => p.Manufacturer == manufacturer); - } - - if (minScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - queryable = queryable.Where(p => (100 - p.CurrentRank) >= minScore.Value); - } - - if (maxScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - queryable = queryable.Where(p => (100 - p.CurrentRank) <= maxScore.Value); - } - - if (!string.IsNullOrEmpty(query)) - { - queryable = queryable.Where(p => - p.Name.Contains(query) || - p.Model.Contains(query) || - p.Manufacturer.Contains(query)); - } - - return await queryable - .OrderBy(p => p.CurrentRank) - .Skip((page - 1) * pageSize) - .Take(pageSize) - .ToListAsync(); - } - - public async Task> FilterAsync(int? categoryId, string? manufacturer, int? minScore, int? maxScore, int? year) - { - var query = _dbSet.AsQueryable(); - - if (categoryId.HasValue) - { - query = query.Where(p => p.CategoryId == categoryId.Value); - } - - if (!string.IsNullOrEmpty(manufacturer)) - { - query = query.Where(p => p.Manufacturer == manufacturer); - } - - if (minScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - query = query.Where(p => (100 - p.CurrentRank) >= minScore.Value); - } - - if (maxScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - query = query.Where(p => (100 - p.CurrentRank) <= maxScore.Value); - } - - if (year.HasValue) - { - query = query.Where(p => p.ReleaseDate.Year == year.Value); - } - - return await query.ToListAsync(); - } - - public async Task> FilterAsync(int? categoryId, string? manufacturer, int? minScore, int? maxScore, int? year, int page, int pageSize, string sortBy = "CurrentRank", string sortOrder = "asc") - { - var query = _dbSet.AsQueryable(); - - if (categoryId.HasValue) - { - query = query.Where(p => p.CategoryId == categoryId.Value); - } - - if (!string.IsNullOrEmpty(manufacturer)) - { - query = query.Where(p => p.Manufacturer == manufacturer); - } - - if (minScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - query = query.Where(p => (100 - p.CurrentRank) >= minScore.Value); - } - - if (maxScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - query = query.Where(p => (100 - p.CurrentRank) <= maxScore.Value); - } - - if (year.HasValue) - { - query = query.Where(p => p.ReleaseDate.Year == year.Value); - } - - // 排序 - query = sortBy.ToLower() switch - { - "name" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.Name) : query.OrderBy(p => p.Name), - "manufacturer" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.Manufacturer) : query.OrderBy(p => p.Manufacturer), - "releasedate" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.ReleaseDate) : query.OrderBy(p => p.ReleaseDate), - "price" => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.Price) : query.OrderBy(p => p.Price), - _ => sortOrder.ToLower() == "desc" ? query.OrderByDescending(p => p.CurrentRank) : query.OrderBy(p => p.CurrentRank) - }; - - return await query - .Skip((page - 1) * pageSize) - .Take(pageSize) - .ToListAsync(); - } - - public async Task CountAsync(int? categoryId = null) - { - var query = _dbSet.AsQueryable(); - - if (categoryId.HasValue) - { - query = query.Where(p => p.CategoryId == categoryId.Value); - } - - return await query.CountAsync(); - } - - public async Task CountSearchResultsAsync(string query, int? categoryId = null, string? manufacturer = null, int? minScore = null, int? maxScore = null) - { - var queryable = _dbSet.AsQueryable(); - - if (categoryId.HasValue) - { - queryable = queryable.Where(p => p.CategoryId == categoryId.Value); - } - - if (!string.IsNullOrEmpty(manufacturer)) - { - queryable = queryable.Where(p => p.Manufacturer == manufacturer); - } - - if (minScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - queryable = queryable.Where(p => (100 - p.CurrentRank) >= minScore.Value); - } - - if (maxScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - queryable = queryable.Where(p => (100 - p.CurrentRank) <= maxScore.Value); - } - - if (!string.IsNullOrEmpty(query)) - { - queryable = queryable.Where(p => - p.Name.Contains(query) || - p.Model.Contains(query) || - p.Manufacturer.Contains(query)); - } - - return await queryable.CountAsync(); - } - - public async Task CountFilterResultsAsync(int? categoryId, string? manufacturer, int? minScore, int? maxScore, int? year) - { - var query = _dbSet.AsQueryable(); - - if (categoryId.HasValue) - { - query = query.Where(p => p.CategoryId == categoryId.Value); - } - - if (!string.IsNullOrEmpty(manufacturer)) - { - query = query.Where(p => p.Manufacturer == manufacturer); - } - - if (minScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - query = query.Where(p => (100 - p.CurrentRank) >= minScore.Value); - } - - if (maxScore.HasValue) - { - // 使用排名计算性能分数(100 - 排名) - query = query.Where(p => (100 - p.CurrentRank) <= maxScore.Value); - } - - if (year.HasValue) - { - query = query.Where(p => p.ReleaseDate.Year == year.Value); - } - - return await query.CountAsync(); - } - - public async Task GetCategoryByProductIdAsync(int productId) - { - var product = await _dbSet - .Include(p => p.Category) - .FirstOrDefaultAsync(p => p.Id == productId); - - return product?.Category; - } - } -} \ No newline at end of file diff --git a/MinimalAPI/Repositories/Repository.cs b/MinimalAPI/Repositories/Repository.cs deleted file mode 100644 index c535b7d7..00000000 --- a/MinimalAPI/Repositories/Repository.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System.Linq.Expressions; -using Microsoft.EntityFrameworkCore; -using HardwarePerformance.Data; -using HardwarePerformance.Models; - -namespace HardwarePerformance.Repositories -{ - public class Repository : IRepository where T : class - { - protected readonly AppDbContext _context; - protected readonly DbSet _dbSet; - - public Repository(AppDbContext context) - { - _context = context; - _dbSet = context.Set(); - } - - public async Task GetByIdAsync(int id) - { - return await _dbSet.FindAsync(id); - } - - public async Task> GetAllAsync() - { - return await _dbSet.ToListAsync(); - } - - public async Task> FindAsync(Expression> predicate) - { - return await _dbSet.Where(predicate).ToListAsync(); - } - - public async Task AddAsync(T entity) - { - await _dbSet.AddAsync(entity); - await _context.SaveChangesAsync(); - return entity; - } - - public async Task UpdateAsync(T entity) - { - _dbSet.Update(entity); - await _context.SaveChangesAsync(); - } - - public async Task DeleteAsync(T entity) - { - _dbSet.Remove(entity); - await _context.SaveChangesAsync(); - } - - public async Task CountAsync(Expression>? predicate = null) - { - if (predicate == null) - return await _dbSet.CountAsync(); - return await _dbSet.CountAsync(predicate); - } - } -} \ No newline at end of file diff --git a/MinimalAPI/Services/CategoryService.cs b/MinimalAPI/Services/CategoryService.cs deleted file mode 100644 index f6a71853..00000000 --- a/MinimalAPI/Services/CategoryService.cs +++ /dev/null @@ -1,30 +0,0 @@ -using AutoMapper; -using HardwarePerformance.Models.DTOs; -using HardwarePerformance.Repositories; - -namespace HardwarePerformance.Services -{ - public class CategoryService : ICategoryService - { - private readonly ICategoryRepository _categoryRepository; - private readonly IMapper _mapper; - - public CategoryService(ICategoryRepository categoryRepository, IMapper mapper) - { - _categoryRepository = categoryRepository; - _mapper = mapper; - } - - public async Task> GetAllCategoriesAsync() - { - var categories = await _categoryRepository.GetAllAsync(); - return _mapper.Map>(categories); - } - - public async Task GetCategoryByIdAsync(int id) - { - var category = await _categoryRepository.GetByIdAsync(id); - return category != null ? _mapper.Map(category) : null; - } - } -} \ No newline at end of file diff --git a/MinimalAPI/Services/ComparisonService.cs b/MinimalAPI/Services/ComparisonService.cs deleted file mode 100644 index 8bb6ad05..00000000 --- a/MinimalAPI/Services/ComparisonService.cs +++ /dev/null @@ -1,271 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; -using MinimalAPI.Data; -using MinimalAPI.Models; -using MinimalAPI.Models.DTOs; - -namespace MinimalAPI.Services -{ - public class ComparisonService : IComparisonService - { - private readonly AppDbContext _context; - private readonly IMapper _mapper; - - public ComparisonService(AppDbContext context, IMapper mapper) - { - _context = context; - _mapper = mapper; - } - - public async Task CompareProductsAsync(List productIds) - { - // 验证输入 - if (productIds == null || productIds.Count < 2 || productIds.Count > 4) - { - return null; - } - - // 获取产品 - var products = await _context.Products - .Include(p => p.Category) - .Where(p => productIds.Contains(p.Id)) - .ToListAsync(); - - if (products.Count != productIds.Count) - { - return null; - } - - // 检查是否所有产品属于同一类别 - var categoryIds = products.Select(p => p.CategoryId).Distinct().ToList(); - if (categoryIds.Count > 1) - { - return null; - } - - // 获取性能分数 - var productIdsList = products.Select(p => p.Id).ToList(); - var performanceScores = await _context.PerformanceScores - .Where(ps => productIdsList.Contains(ps.ProductId)) - .ToListAsync(); - - // 获取规格参数 - var specifications = await _context.Specifications - .Where(s => productIdsList.Contains(s.ProductId)) - .ToListAsync(); - - // 创建产品DTO列表 - var productDtos = products.Select(p => { - var dto = _mapper.Map(p); - dto.PerformanceScores = performanceScores - .Where(ps => ps.ProductId == p.Id) - .ToList(); - dto.Specifications = specifications - .Where(s => s.ProductId == p.Id) - .ToList(); - return dto; - }).ToList(); - - // 生成对比矩阵 - var comparisonMatrix = GenerateComparisonMatrix(productDtos); - - return new - { - Products = productDtos, - Comparison = comparisonMatrix - }; - } - - private List> GenerateComparisonMatrix(List products) - { - var matrix = new List>(); - - // 添加基本信息行 - matrix.Add(new Dictionary { ["指标"] = "产品名称", ["类型"] = "基本信息" }); - foreach (var product in products) - { - matrix[0][$"{product.Name}"] = product.Name; - } - - // 添加制造商行 - matrix.Add(new Dictionary { ["指标"] = "制造商", ["类型"] = "基本信息" }); - foreach (var product in products) - { - matrix[1][$"{product.Name}"] = product.Manufacturer; - } - - // 添加型号行 - matrix.Add(new Dictionary { ["指标"] = "型号", ["类型"] = "基本信息" }); - foreach (var product in products) - { - matrix[2][$"{product.Name}"] = product.Model; - } - - // 添加排名行 - matrix.Add(new Dictionary { ["指标"] = "当前排名", ["类型"] = "性能指标" }); - foreach (var product in products) - { - matrix[3][$"{product.Name}"] = product.CurrentRank; - } - - // 添加发布日期行 - matrix.Add(new Dictionary { ["指标"] = "发布日期", ["类型"] = "基本信息" }); - foreach (var product in products) - { - matrix[4][$"{product.Name}"] = product.ReleaseDate.ToString("yyyy-MM-dd"); - } - - // 添加价格行 - matrix.Add(new Dictionary { ["指标"] = "价格", ["类型"] = "基本信息" }); - foreach (var product in products) - { - matrix[5][$"{product.Name}"] = product.Price?.ToString("C") ?? "N/A"; - } - - // 添加性能分数行 - var benchmarkTypes = products - .SelectMany(p => p.PerformanceScores) - .Select(ps => ps.BenchmarkType) - .Distinct() - .ToList(); - - foreach (var benchmarkType in benchmarkTypes) - { - var rowIndex = matrix.Count; - matrix.Add(new Dictionary { ["指标"] = benchmarkType, ["类型"] = "性能指标" }); - - foreach (var product in products) - { - var score = product.PerformanceScores - .FirstOrDefault(ps => ps.BenchmarkType == benchmarkType)?.Score; - matrix[rowIndex][$"{product.Name}"] = score?.ToString() ?? "N/A"; - } - } - - // 添加规格参数行 - var specNames = products - .SelectMany(p => p.Specifications) - .Select(s => s.Name) - .Distinct() - .ToList(); - - foreach (var specName in specNames) - { - var rowIndex = matrix.Count; - matrix.Add(new Dictionary { ["指标"] = specName, ["类型"] = "规格参数" }); - - foreach (var product in products) - { - var specValue = product.Specifications - .FirstOrDefault(s => s.Name == specName)?.Value; - matrix[rowIndex][$"{product.Name}"] = specValue ?? "N/A"; - } - } - - // 标记最优和最差值 - MarkBestAndWorstValues(matrix, products); - - return matrix; - } - - private void MarkBestAndWorstValues(List> matrix, List products) - { - // 对于排名,越小越好 - var rankRow = matrix.FirstOrDefault(m => m["指标"].ToString() == "当前排名"); - if (rankRow != null) - { - var ranks = products.Select(p => p.CurrentRank).ToList(); - var minRank = ranks.Min(); - var maxRank = ranks.Max(); - - foreach (var product in products) - { - var rank = product.CurrentRank; - if (rank == minRank) - { - rankRow[$"{product.Name}_isBest"] = true; - } - else if (rank == maxRank) - { - rankRow[$"{product.Name}_isWorst"] = true; - } - } - } - - // 对于价格,越小越好 - var priceRow = matrix.FirstOrDefault(m => m["指标"].ToString() == "价格"); - if (priceRow != null) - { - var prices = products.Where(p => p.Price.HasValue).Select(p => p.Price!.Value).ToList(); - if (prices.Any()) - { - var minPrice = prices.Min(); - var maxPrice = prices.Max(); - - foreach (var product in products) - { - if (product.Price.HasValue) - { - if (product.Price == minPrice) - { - priceRow[$"{product.Name}_isBest"] = true; - } - else if (product.Price == maxPrice) - { - priceRow[$"{product.Name}_isWorst"] = true; - } - } - } - } - } - - // 对于性能分数,越大越好 - var performanceRows = matrix.Where(m => m["类型"].ToString() == "性能指标" && - m["指标"].ToString() != "当前排名").ToList(); - - foreach (var row in performanceRows) - { - var benchmarkType = row["指标"].ToString(); - var scores = new List(); - - foreach (var product in products) - { - var scoreStr = row[$"{product.Name}"]?.ToString(); - if (decimal.TryParse(scoreStr, out var score)) - { - scores.Add(score); - } - else - { - scores.Add(null); - } - } - - var validScores = scores.Where(s => s.HasValue).Select(s => s!.Value).ToList(); - if (validScores.Any()) - { - var maxScore = validScores.Max(); - var minScore = validScores.Min(); - - for (int i = 0; i < products.Count; i++) - { - if (scores[i].HasValue) - { - if (scores[i] == maxScore) - { - row[$"{products[i].Name}_isBest"] = true; - } - else if (scores[i] == minScore) - { - row[$"{products[i].Name}_isWorst"] = true; - } - } - } - } - } - } - } -} \ No newline at end of file diff --git a/MinimalAPI/Services/ICategoryService.cs b/MinimalAPI/Services/ICategoryService.cs deleted file mode 100644 index 05256275..00000000 --- a/MinimalAPI/Services/ICategoryService.cs +++ /dev/null @@ -1,10 +0,0 @@ -using HardwarePerformance.Models.DTOs; - -namespace HardwarePerformance.Services -{ - public interface ICategoryService - { - Task> GetAllCategoriesAsync(); - Task GetCategoryByIdAsync(int id); - } -} \ No newline at end of file diff --git a/MinimalAPI/Services/IComparisonService.cs b/MinimalAPI/Services/IComparisonService.cs deleted file mode 100644 index a27615f1..00000000 --- a/MinimalAPI/Services/IComparisonService.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace MinimalAPI.Services -{ - public interface IComparisonService - { - Task CompareProductsAsync(List productIds); - } -} \ No newline at end of file diff --git a/MinimalAPI/Services/IProductService.cs b/MinimalAPI/Services/IProductService.cs deleted file mode 100644 index 731620b6..00000000 --- a/MinimalAPI/Services/IProductService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using HardwarePerformance.Models.DTOs; - -namespace HardwarePerformance.Services -{ - public interface IProductService - { - Task> GetProductsByCategoryAsync(int categoryId, int page = 1, int pageSize = 20, string sortBy = "CurrentRank", string order = "asc"); - Task GetProductByIdAsync(int id); - Task> SearchProductsAsync(string query, int? categoryId = null, string? manufacturer = null, int? minScore = null, int? maxScore = null, int page = 1, int pageSize = 20); - Task> FilterProductsAsync(int categoryId, string? manufacturer = null, int? minScore = null, int? maxScore = null, int? releaseYear = null, int page = 1, int pageSize = 20, string sortBy = "CurrentRank", string order = "asc"); - } -} \ No newline at end of file diff --git a/MinimalAPI/Services/ProductService.cs b/MinimalAPI/Services/ProductService.cs deleted file mode 100644 index 473a2ce3..00000000 --- a/MinimalAPI/Services/ProductService.cs +++ /dev/null @@ -1,91 +0,0 @@ -using AutoMapper; -using HardwarePerformance.Models.DTOs; -using HardwarePerformance.Repositories; - -namespace HardwarePerformance.Services -{ - public class ProductService : IProductService - { - private readonly IProductRepository _productRepository; - private readonly IMapper _mapper; - - public ProductService(IProductRepository productRepository, IMapper mapper) - { - _productRepository = productRepository; - _mapper = mapper; - } - - public async Task> GetProductsByCategoryAsync(int categoryId, int page = 1, int pageSize = 20, string sortBy = "CurrentRank", string order = "asc") - { - var products = await _productRepository.GetByCategoryAsync(categoryId, page, pageSize, sortBy, order); - var totalCount = await _productRepository.CountAsync(categoryId); - - var productDtos = _mapper.Map>(products); - - return new PagedResultDto - { - Items = productDtos.ToList(), - Total = totalCount, - CurrentPage = page, - PageSize = pageSize, - TotalPages = (int)Math.Ceiling((double)totalCount / pageSize) - }; - } - - public async Task GetProductByIdAsync(int id) - { - var product = await _productRepository.GetByIdAsync(id); - if (product == null) return null; - - var productDto = _mapper.Map(product); - - // 获取类别信息 - var category = await _productRepository.GetCategoryByProductIdAsync(id); - if (category != null) - { - productDto.Category = new CategoryDto - { - Id = category.Id, - Name = category.Name, - Description = category.Description - }; - } - - return productDto; - } - - public async Task> SearchProductsAsync(string query, int? categoryId = null, string? manufacturer = null, int? minScore = null, int? maxScore = null, int page = 1, int pageSize = 20) - { - var products = await _productRepository.SearchAsync(query, categoryId, manufacturer, minScore, maxScore, page, pageSize); - var totalCount = await _productRepository.CountSearchResultsAsync(query, categoryId, manufacturer, minScore, maxScore); - - var productDtos = _mapper.Map>(products); - - return new PagedResultDto - { - Items = productDtos.ToList(), - Total = totalCount, - CurrentPage = page, - PageSize = pageSize, - TotalPages = (int)Math.Ceiling((double)totalCount / pageSize) - }; - } - - public async Task> FilterProductsAsync(int categoryId, string? manufacturer = null, int? minScore = null, int? maxScore = null, int? releaseYear = null, int page = 1, int pageSize = 20, string sortBy = "CurrentRank", string order = "asc") - { - var products = await _productRepository.FilterAsync(categoryId, manufacturer, minScore, maxScore, releaseYear, page, pageSize, sortBy, order); - var totalCount = await _productRepository.CountFilterResultsAsync(categoryId, manufacturer, minScore, maxScore, releaseYear); - - var productDtos = _mapper.Map>(products); - - return new PagedResultDto - { - Items = productDtos.ToList(), - Total = totalCount, - CurrentPage = page, - PageSize = pageSize, - TotalPages = (int)Math.Ceiling((double)totalCount / pageSize) - }; - } - } -} \ No newline at end of file diff --git a/MinimalAPI/appsettings.json b/MinimalAPI/appsettings.json deleted file mode 100644 index 10f68b8c..00000000 --- a/MinimalAPI/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.deps.json b/MinimalAPI/bin/Debug/net9.0/MinimalAPI.deps.json deleted file mode 100644 index ae8e31bb..00000000 --- a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.deps.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v9.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v9.0": { - "MinimalAPI/1.0.0": { - "runtime": { - "MinimalAPI.dll": {} - } - } - } - }, - "libraries": { - "MinimalAPI/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.dll b/MinimalAPI/bin/Debug/net9.0/MinimalAPI.dll deleted file mode 100644 index 34ca2315..00000000 Binary files a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.dll and /dev/null differ diff --git a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.exe b/MinimalAPI/bin/Debug/net9.0/MinimalAPI.exe deleted file mode 100644 index 3d759ae4..00000000 Binary files a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.exe and /dev/null differ diff --git a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.pdb b/MinimalAPI/bin/Debug/net9.0/MinimalAPI.pdb deleted file mode 100644 index dc6677a2..00000000 Binary files a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.pdb and /dev/null differ diff --git a/MinimalAPI/bin/Debug/net9.0/appsettings.Development.json b/MinimalAPI/bin/Debug/net9.0/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/MinimalAPI/bin/Debug/net9.0/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/MinimalAPI/bin/Debug/net9.0/appsettings.json b/MinimalAPI/bin/Debug/net9.0/appsettings.json deleted file mode 100644 index 10f68b8c..00000000 --- a/MinimalAPI/bin/Debug/net9.0/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.AssemblyInfoInputs.cache b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.AssemblyInfoInputs.cache deleted file mode 100644 index 36242949..00000000 --- a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -d440d87b19ec785d73e3e23306ab9680f7c4890517e977a1c254363c4f9347af diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.GeneratedMSBuildEditorConfig.editorconfig b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index b82c3932..00000000 --- a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,21 +0,0 @@ -is_global = true -build_property.TargetFramework = net9.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 = MinimalAPI -build_property.RootNamespace = MinimalAPI -build_property.ProjectDir = C:\work\电脑硬件-01\MinimalAPI\ -build_property.EnableComHosting = -build_property.EnableGeneratedComInterfaceComImportInterop = -build_property.RazorLangVersion = 9.0 -build_property.SupportLocalizedComponentNames = -build_property.GenerateRazorMetadataSourceChecksumAttributes = -build_property.MSBuildProjectDirectory = C:\work\电脑硬件-01\MinimalAPI -build_property._RazorSourceGeneratorDebug = -build_property.EffectiveAnalysisLevelStyle = 9.0 -build_property.EnableCodeStyleSeverity = diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.GlobalUsings.g.cs b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.GlobalUsings.g.cs deleted file mode 100644 index 025530a2..00000000 --- a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.GlobalUsings.g.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -global using global::Microsoft.AspNetCore.Builder; -global using global::Microsoft.AspNetCore.Hosting; -global using global::Microsoft.AspNetCore.Http; -global using global::Microsoft.AspNetCore.Routing; -global using global::Microsoft.Extensions.Configuration; -global using global::Microsoft.Extensions.DependencyInjection; -global using global::Microsoft.Extensions.Hosting; -global using global::Microsoft.Extensions.Logging; -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Net.Http.Json; -global using global::System.Threading; -global using global::System.Threading.Tasks; diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.assets.cache b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.assets.cache deleted file mode 100644 index 95a80dce..00000000 Binary files a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.assets.cache and /dev/null differ diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.csproj.CoreCompileInputs.cache b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.csproj.CoreCompileInputs.cache deleted file mode 100644 index 3eb66151..00000000 --- a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -05c277f9ef6d1c96b7c3a0662bb97967ee23e63c93d8aa1cd4aec40fc1c9febe diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.csproj.FileListAbsolute.txt b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.csproj.FileListAbsolute.txt deleted file mode 100644 index 63c73621..00000000 --- a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,27 +0,0 @@ -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\rpswa.dswa.cache.json -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.GeneratedMSBuildEditorConfig.editorconfig -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.AssemblyInfoInputs.cache -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.AssemblyInfo.cs -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.csproj.CoreCompileInputs.cache -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.MvcApplicationPartsAssemblyInfo.cache -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\appsettings.Development.json -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\appsettings.json -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\MinimalAPI.staticwebassets.endpoints.json -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\MinimalAPI.exe -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\MinimalAPI.deps.json -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\MinimalAPI.runtimeconfig.json -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\MinimalAPI.dll -C:\work\电脑硬件-01\MinimalAPI\bin\Debug\net9.0\MinimalAPI.pdb -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\rjimswa.dswa.cache.json -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\rjsmrazor.dswa.cache.json -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\scopedcss\bundle\MinimalAPI.styles.css -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\staticwebassets.build.json -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\staticwebassets.build.json.cache -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\staticwebassets.development.json -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\staticwebassets.build.endpoints.json -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.dll -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\refint\MinimalAPI.dll -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.pdb -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\MinimalAPI.genruntimeconfig.cache -C:\work\电脑硬件-01\MinimalAPI\obj\Debug\net9.0\ref\MinimalAPI.dll diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.dll b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.dll deleted file mode 100644 index 34ca2315..00000000 Binary files a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.dll and /dev/null differ diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.genruntimeconfig.cache b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.genruntimeconfig.cache deleted file mode 100644 index 59d1678d..00000000 --- a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.genruntimeconfig.cache +++ /dev/null @@ -1 +0,0 @@ -2cc508c4c984e00de0cee28ea5f00a982100be8dad563e9011ff5619c65193f1 diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.pdb b/MinimalAPI/obj/Debug/net9.0/MinimalAPI.pdb deleted file mode 100644 index dc6677a2..00000000 Binary files a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.pdb and /dev/null differ diff --git a/MinimalAPI/obj/Debug/net9.0/apphost.exe b/MinimalAPI/obj/Debug/net9.0/apphost.exe deleted file mode 100644 index 3d759ae4..00000000 Binary files a/MinimalAPI/obj/Debug/net9.0/apphost.exe and /dev/null differ diff --git a/MinimalAPI/obj/Debug/net9.0/ref/MinimalAPI.dll b/MinimalAPI/obj/Debug/net9.0/ref/MinimalAPI.dll deleted file mode 100644 index 36229de7..00000000 Binary files a/MinimalAPI/obj/Debug/net9.0/ref/MinimalAPI.dll and /dev/null differ diff --git a/MinimalAPI/obj/Debug/net9.0/refint/MinimalAPI.dll b/MinimalAPI/obj/Debug/net9.0/refint/MinimalAPI.dll deleted file mode 100644 index 36229de7..00000000 Binary files a/MinimalAPI/obj/Debug/net9.0/refint/MinimalAPI.dll and /dev/null differ diff --git a/MinimalAPI/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json b/MinimalAPI/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json deleted file mode 100644 index 44c7eb72..00000000 --- a/MinimalAPI/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json +++ /dev/null @@ -1 +0,0 @@ -{"GlobalPropertiesHash":"UvHx1BUBnfpFc6gxIpp/8mxp/Pr5ugj++Q4ag8rCqAY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["vICfSWyJTl7Llwoo5pZeHmuInfb\u002BPDuiEXf67e03aVY=","HGCAjAUzY86/cTTfeLk8LuqAnP1lIVdvBKQP\u002BJ23JAc=","pXPB2q0SLSiqgQ6QWxaK7/r8KBQLxQCCriy2hCwae1A=","eZ0avPpvDZzkkkg3Y40\u002B9/FcOts1TlMSAvHEIAFbU8Q="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/MinimalAPI/obj/Debug/net9.0/rjsmrazor.dswa.cache.json b/MinimalAPI/obj/Debug/net9.0/rjsmrazor.dswa.cache.json deleted file mode 100644 index 3d4088b4..00000000 --- a/MinimalAPI/obj/Debug/net9.0/rjsmrazor.dswa.cache.json +++ /dev/null @@ -1 +0,0 @@ -{"GlobalPropertiesHash":"N05q42TiGbCpQThCMeppx1cqHYMYPr+MKOVECH+LM5o=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["vICfSWyJTl7Llwoo5pZeHmuInfb\u002BPDuiEXf67e03aVY=","HGCAjAUzY86/cTTfeLk8LuqAnP1lIVdvBKQP\u002BJ23JAc=","pXPB2q0SLSiqgQ6QWxaK7/r8KBQLxQCCriy2hCwae1A=","eZ0avPpvDZzkkkg3Y40\u002B9/FcOts1TlMSAvHEIAFbU8Q="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/MinimalAPI/obj/Debug/net9.0/rpswa.dswa.cache.json b/MinimalAPI/obj/Debug/net9.0/rpswa.dswa.cache.json deleted file mode 100644 index 041d265a..00000000 --- a/MinimalAPI/obj/Debug/net9.0/rpswa.dswa.cache.json +++ /dev/null @@ -1 +0,0 @@ -{"GlobalPropertiesHash":"Qscza4zuOZL6qExaAaOGJZbKXeiSjSngMQ6k1ALDEr8=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["vICfSWyJTl7Llwoo5pZeHmuInfb\u002BPDuiEXf67e03aVY=","HGCAjAUzY86/cTTfeLk8LuqAnP1lIVdvBKQP\u002BJ23JAc="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/MinimalAPI/obj/Debug/net9.0/staticwebassets.build.json b/MinimalAPI/obj/Debug/net9.0/staticwebassets.build.json deleted file mode 100644 index 17eefd77..00000000 --- a/MinimalAPI/obj/Debug/net9.0/staticwebassets.build.json +++ /dev/null @@ -1 +0,0 @@ -{"Version":1,"Hash":"JkTLtN583la2vWjETk7JpCURqkzL9J5tTWuu+nxCKow=","Source":"MinimalAPI","BasePath":"_content/MinimalAPI","Mode":"Default","ManifestType":"Build","ReferencedProjectsConfiguration":[],"DiscoveryPatterns":[],"Assets":[],"Endpoints":[]} \ No newline at end of file diff --git a/MinimalAPI/obj/Debug/net9.0/staticwebassets.build.json.cache b/MinimalAPI/obj/Debug/net9.0/staticwebassets.build.json.cache deleted file mode 100644 index 261f51df..00000000 --- a/MinimalAPI/obj/Debug/net9.0/staticwebassets.build.json.cache +++ /dev/null @@ -1 +0,0 @@ -JkTLtN583la2vWjETk7JpCURqkzL9J5tTWuu+nxCKow= \ No newline at end of file diff --git a/MinimalAPI/obj/MinimalAPI.csproj.nuget.dgspec.json b/MinimalAPI/obj/MinimalAPI.csproj.nuget.dgspec.json deleted file mode 100644 index 01251df6..00000000 --- a/MinimalAPI/obj/MinimalAPI.csproj.nuget.dgspec.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "format": 1, - "restore": { - "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj": {} - }, - "projects": { - "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj", - "projectName": "MinimalAPI", - "projectPath": "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\MinimalAPI\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.AspNetCore.ResponseCompression": { - "target": "Package", - "version": "[2.2.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\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/MinimalAPI/obj/MinimalAPI.csproj.nuget.g.props b/MinimalAPI/obj/MinimalAPI.csproj.nuget.g.props deleted file mode 100644 index b085de15..00000000 --- a/MinimalAPI/obj/MinimalAPI.csproj.nuget.g.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.14.0 - - - - - - \ No newline at end of file diff --git a/MinimalAPI/obj/MinimalAPI.csproj.nuget.g.targets b/MinimalAPI/obj/MinimalAPI.csproj.nuget.g.targets deleted file mode 100644 index 3dc06ef3..00000000 --- a/MinimalAPI/obj/MinimalAPI.csproj.nuget.g.targets +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/MinimalAPI/obj/project.assets.json b/MinimalAPI/obj/project.assets.json deleted file mode 100644 index 25cc5bad..00000000 --- a/MinimalAPI/obj/project.assets.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "version": 3, - "targets": { - "net9.0": {} - }, - "libraries": {}, - "projectFileDependencyGroups": { - "net9.0": [ - "Microsoft.AspNetCore.ResponseCompression >= 2.2.0" - ] - }, - "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj", - "projectName": "MinimalAPI", - "projectPath": "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\MinimalAPI\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.AspNetCore.ResponseCompression": { - "target": "Package", - "version": "[2.2.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\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - }, - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='Microsoft.AspNetCore.ResponseCompression'&semVerLevel=2.0.0”检索有关“Microsoft.AspNetCore.ResponseCompression”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "Microsoft.AspNetCore.ResponseCompression" - } - ] -} \ No newline at end of file diff --git a/MinimalAPI/obj/project.nuget.cache b/MinimalAPI/obj/project.nuget.cache deleted file mode 100644 index 4f0aead9..00000000 --- a/MinimalAPI/obj/project.nuget.cache +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "ionCG+ayp8g=", - "success": false, - "projectFilePath": "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj", - "expectedPackageFiles": [], - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='Microsoft.AspNetCore.ResponseCompression'&semVerLevel=2.0.0”检索有关“Microsoft.AspNetCore.ResponseCompression”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj", - "filePath": "C:\\work\\电脑硬件-01\\MinimalAPI\\MinimalAPI.csproj", - "libraryId": "Microsoft.AspNetCore.ResponseCompression", - "targetGraphs": [] - } - ] -} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..311c7201 --- /dev/null +++ b/README.md @@ -0,0 +1,262 @@ +# 硬件性能对比平台 + +一个专业的硬件性能数据对比平台,提供CPU、GPU等硬件的性能排名、详细参数对比和性能趋势分析。 + +## 项目概述 + +本平台旨在为用户提供全面、准确的硬件性能数据,帮助用户在选择硬件时做出明智决策。平台集成了多个权威数据源,提供实时更新的性能数据和排名信息。 + +### 主要功能 + +- 🏆 **硬件性能排名**:提供各类硬件的性能排名和评分 +- 📊 **详细参数对比**:支持2-4个产品的详细参数对比 +- 🔍 **智能搜索筛选**:按品牌、性能分数、发布年份等条件筛选 +- 📈 **性能趋势分析**:展示硬件性能的历史变化趋势 +- 📱 **响应式设计**:完美适配桌面端和移动端 +- 🔒 **数据安全保障**:采用多种安全措施保护用户数据 + +## 技术架构 + +### 后端技术栈 + +- **.NET 9.0**:最新的.NET平台,提供高性能和丰富的功能 +- **Entity Framework Core**:ORM框架,用于数据库操作 +- **MySQL**:关系型数据库,存储产品数据和性能指标 +- **Hangfire**:后台任务调度框架,用于定时数据采集 +- **AutoMapper**:对象映射框架,简化DTO转换 +- **Serilog**:结构化日志框架 +- **FluentValidation**:输入验证框架 + +### 前端技术栈 + +- **Vue 3**:渐进式JavaScript框架 +- **Vite**:现代化的前端构建工具 +- **Vue Router**:Vue.js官方路由管理器 +- **Pinia**:Vue状态管理库 +- **Element Plus**:基于Vue 3的桌面端UI组件库 +- **Vant**:移动端UI组件库 +- **ECharts**:数据可视化图表库 +- **Axios**:HTTP客户端,用于API请求 +- **TailwindCSS**:实用优先的CSS框架 + +### 测试与质量保证 + +- **Vitest**:基于Vite的单元测试框架 +- **Playwright**:端到端测试框架 +- **ESLint**:代码质量检查工具 +- **Prettier**:代码格式化工具 +- **TypeScript**:JavaScript的超集,提供静态类型检查 +- **Husky**:Git hooks管理工具 + +### 部署与运维 + +- **Docker**:容器化部署 +- **GitHub Actions**:持续集成和持续部署 +- **Nginx**:反向代理和静态文件服务 +- **Redis**:缓存和会话存储 + +## 项目结构 + +``` +hardware-performance-platform/ +├── backend/ # 后端项目 +│ ├── src/ +│ │ ├── API/ # API控制器 +│ │ ├── Application/ # 应用服务层 +│ │ ├── Core/ # 核心业务逻辑 +│ │ └── Infrastructure/ # 基础设施层 +│ ├── tests/ # 后端测试 +│ └── ... # 其他后端文件 +├── frontend/ # 前端项目 +│ ├── src/ +│ │ ├── components/ # Vue组件 +│ │ ├── views/ # 页面视图 +│ │ ├── stores/ # Pinia状态管理 +│ │ ├── services/ # API服务 +│ │ ├── utils/ # 工具函数 +│ │ └── assets/ # 静态资源 +│ ├── tests/ # 前端测试 +│ ├── docs/ # 前端文档 +│ └── ... # 其他前端文件 +├── docs/ # 项目文档 +├── docker-compose.yml # Docker编排文件 +└── README.md # 项目说明文档 +``` + +## 快速开始 + +### 环境要求 + +- Node.js 18.x 或更高版本 +- .NET 9.0 SDK +- MySQL 8.0 或更高版本 +- Redis 6.0 或更高版本(可选,用于缓存) +- Docker 和 Docker Compose(推荐) + +### 使用Docker Compose部署(推荐) + +1. 克隆项目 +```bash +git clone https://github.com/your-username/hardware-performance-platform.git +cd hardware-performance-platform +``` + +2. 启动所有服务 +```bash +docker-compose up -d +``` + +3. 访问应用 +- 前端应用:http://localhost:3000 +- 后端API:http://localhost:7001 +- Hangfire Dashboard:http://localhost:7001/hangfire + +### 本地开发环境设置 + +#### 后端设置 + +1. 进入后端目录 +```bash +cd backend +``` + +2. 还原NuGet包 +```bash +dotnet restore +``` + +3. 配置数据库连接 +```bash +cp appsettings.json appsettings.Development.json +# 编辑appsettings.Development.json,配置数据库连接字符串 +``` + +4. 运行数据库迁移 +```bash +dotnet ef database update +``` + +5. 启动后端服务 +```bash +dotnet run +``` + +#### 前端设置 + +1. 进入前端目录 +```bash +cd frontend +``` + +2. 安装依赖 +```bash +npm install +``` + +3. 配置环境变量 +```bash +cp .env.example .env.local +# 编辑.env.local,配置API地址等环境变量 +``` + +4. 启动前端服务 +```bash +npm run dev +``` + +## 数据来源 + +平台从以下权威数据源采集硬件性能数据: + +- **GeekBench**:CPU和GPU性能基准测试 +- **3DMark**:图形性能测试 +- **AnTuTu**:移动设备综合性能测试 +- **GFXBench**:图形性能测试 + +数据采集任务每天自动运行,确保数据的时效性和准确性。 + +## API文档 + +后端API使用Swagger/OpenAPI生成文档,启动后端服务后可访问: + +- Swagger UI:http://localhost:7001/swagger +- OpenAPI规范:http://localhost:7001/swagger/v1/swagger.json + +## 测试 + +### 运行后端测试 + +```bash +cd backend +dotnet test +``` + +### 运行前端测试 + +```bash +cd frontend + +# 运行所有测试 +npm test + +# 运行单元测试 +npm run test:unit + +# 运行E2E测试 +npm run test:e2e + +# 生成测试覆盖率报告 +npm run test:unit:coverage +``` + +### 代码质量检查 + +```bash +cd frontend + +# 运行ESLint检查 +npm run lint + +# 格式化代码 +npm run format + +# 生成代码质量报告 +npm run quality-report +``` + +## 贡献指南 + +我们欢迎任何形式的贡献,包括但不限于: + +- 🐛 报告Bug +- 💡 提出新功能建议 +- 📝 改进文档 +- 🔧 提交代码修复 + +请阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 了解详细的贡献流程。 + +## 许可证 + +本项目采用 [MIT 许可证](LICENSE)。 + +## 联系我们 + +- 项目主页:https://github.com/your-username/hardware-performance-platform +- 问题反馈:https://github.com/your-username/hardware-performance-platform/issues +- 邮箱:contact@hardware-performance.com + +## 致谢 + +感谢以下开源项目和数据提供商: + +- [Vue.js](https://vuejs.org/) +- [.NET](https://dotnet.microsoft.com/) +- [Element Plus](https://element-plus.org/) +- [ECharts](https://echarts.apache.org/) +- [GeekBench](https://www.geekbench.com/) +- [3DMark](https://www.3dmark.com/) +- [AnTuTu](https://www.antutu.com/) + +--- + +⭐ 如果这个项目对你有帮助,请给我们一个星标! \ No newline at end of file diff --git a/SimpleAPI/Program.cs b/SimpleAPI/Program.cs deleted file mode 100644 index ee9d65d6..00000000 --- a/SimpleAPI/Program.cs +++ /dev/null @@ -1,41 +0,0 @@ -var builder = WebApplication.CreateBuilder(args); - -// Add services to the container. -// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi -builder.Services.AddOpenApi(); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.MapOpenApi(); -} - -app.UseHttpsRedirection(); - -var summaries = new[] -{ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; - -app.MapGet("/weatherforecast", () => -{ - var forecast = Enumerable.Range(1, 5).Select(index => - new WeatherForecast - ( - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] - )) - .ToArray(); - return forecast; -}) -.WithName("GetWeatherForecast"); - -app.Run(); - -record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) -{ - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); -} diff --git a/SimpleAPI/Properties/launchSettings.json b/SimpleAPI/Properties/launchSettings.json deleted file mode 100644 index a07d69cb..00000000 --- a/SimpleAPI/Properties/launchSettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": false, - "applicationUrl": "http://localhost:5256", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": false, - "applicationUrl": "https://localhost:7149;http://localhost:5256", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/SimpleAPI/SimpleAPI.csproj b/SimpleAPI/SimpleAPI.csproj deleted file mode 100644 index 76583270..00000000 --- a/SimpleAPI/SimpleAPI.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net9.0 - enable - enable - - - - - - - diff --git a/SimpleAPI/SimpleAPI.http b/SimpleAPI/SimpleAPI.http deleted file mode 100644 index aa193d41..00000000 --- a/SimpleAPI/SimpleAPI.http +++ /dev/null @@ -1,6 +0,0 @@ -@SimpleAPI_HostAddress = http://localhost:5256 - -GET {{SimpleAPI_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/SimpleAPI/appsettings.Development.json b/SimpleAPI/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/SimpleAPI/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/SimpleAPI/appsettings.json b/SimpleAPI/appsettings.json deleted file mode 100644 index 10f68b8c..00000000 --- a/SimpleAPI/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/SimpleAPI/obj/SimpleAPI.csproj.nuget.dgspec.json b/SimpleAPI/obj/SimpleAPI.csproj.nuget.dgspec.json deleted file mode 100644 index 5800d4fb..00000000 --- a/SimpleAPI/obj/SimpleAPI.csproj.nuget.dgspec.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "format": 1, - "restore": { - "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj": {} - }, - "projects": { - "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "projectName": "SimpleAPI", - "projectPath": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\SimpleAPI\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.AspNetCore.OpenApi": { - "target": "Package", - "version": "[9.0.8, )" - } - }, - "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\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/SimpleAPI/obj/SimpleAPI.csproj.nuget.g.props b/SimpleAPI/obj/SimpleAPI.csproj.nuget.g.props deleted file mode 100644 index b085de15..00000000 --- a/SimpleAPI/obj/SimpleAPI.csproj.nuget.g.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.14.0 - - - - - - \ No newline at end of file diff --git a/SimpleAPI/obj/SimpleAPI.csproj.nuget.g.targets b/SimpleAPI/obj/SimpleAPI.csproj.nuget.g.targets deleted file mode 100644 index 3dc06ef3..00000000 --- a/SimpleAPI/obj/SimpleAPI.csproj.nuget.g.targets +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/SimpleAPI/obj/project.assets.json b/SimpleAPI/obj/project.assets.json deleted file mode 100644 index ff4d725c..00000000 --- a/SimpleAPI/obj/project.assets.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "version": 3, - "targets": { - "net9.0": {} - }, - "libraries": {}, - "projectFileDependencyGroups": { - "net9.0": [ - "Microsoft.AspNetCore.OpenApi >= 9.0.8" - ] - }, - "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "projectName": "SimpleAPI", - "projectPath": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\SimpleAPI\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.AspNetCore.OpenApi": { - "target": "Package", - "version": "[9.0.8, )" - } - }, - "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\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - }, - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='Microsoft.AspNetCore.OpenApi'&semVerLevel=2.0.0”检索有关“Microsoft.AspNetCore.OpenApi”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "Microsoft.AspNetCore.OpenApi" - }, - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://packages.microsoft.com/dotnet/FindPackagesById()?id='Microsoft.AspNetCore.OpenApi'&semVerLevel=2.0.0”检索有关“Microsoft.AspNetCore.OpenApi”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "Microsoft.AspNetCore.OpenApi" - } - ] -} \ No newline at end of file diff --git a/SimpleAPI/obj/project.nuget.cache b/SimpleAPI/obj/project.nuget.cache deleted file mode 100644 index 93b7f06b..00000000 --- a/SimpleAPI/obj/project.nuget.cache +++ /dev/null @@ -1,27 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "qHQETFOfcmo=", - "success": false, - "projectFilePath": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "expectedPackageFiles": [], - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://www.nuget.org/api/v2/FindPackagesById()?id='Microsoft.AspNetCore.OpenApi'&semVerLevel=2.0.0”检索有关“Microsoft.AspNetCore.OpenApi”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "filePath": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "libraryId": "Microsoft.AspNetCore.OpenApi", - "targetGraphs": [] - }, - { - "code": "NU1301", - "level": "Error", - "message": "未能从远程源“https://packages.microsoft.com/dotnet/FindPackagesById()?id='Microsoft.AspNetCore.OpenApi'&semVerLevel=2.0.0”检索有关“Microsoft.AspNetCore.OpenApi”的信息。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "filePath": "C:\\work\\电脑硬件-01\\SimpleAPI\\SimpleAPI.csproj", - "libraryId": "Microsoft.AspNetCore.OpenApi", - "targetGraphs": [] - } - ] -} \ No newline at end of file diff --git a/TestAPI/Program.cs b/TestAPI/Program.cs deleted file mode 100644 index 3b6614e3..00000000 --- a/TestAPI/Program.cs +++ /dev/null @@ -1,471 +0,0 @@ -using Microsoft.AspNetCore.ResponseCompression; -using System.IO.Compression; -using System.Text.Json; -using System.Linq; - -var builder = WebApplication.CreateBuilder(args); - -// 添加响应压缩服务 -builder.Services.AddResponseCompression(options => -{ - options.EnableForHttps = true; - options.Providers.Add(); - options.Providers.Add(); - options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "application/json" }); -}); - -// 配置压缩级别 -builder.Services.Configure(options => -{ - options.Level = CompressionLevel.Fastest; -}); - -builder.Services.Configure(options => -{ - options.Level = CompressionLevel.Fastest; -}); - -var app = builder.Build(); - -// 使用响应压缩中间件 -app.UseResponseCompression(); - -// 添加一个返回大量数据的API端点,以便测试压缩效果 -app.MapGet("/api/data", () => new -{ - Message = "这是一个用于测试响应压缩的API端点", - Data = Enumerable.Range(1, 1000).Select(i => new { Id = i, Name = $"Item {i}", Description = $"这是第{i}个项目的描述,包含更多文本内容以便测试压缩效果。" }).ToArray(), - Timestamp = DateTime.UtcNow -}); - -// 添加类别API端点,供前端测试使用 -app.MapGet("/api/categories", () => new[] -{ - new { Id = 1, Name = "手机CPU", Description = "移动设备处理器性能排名", ProductCount = 25 }, - new { Id = 2, Name = "手机GPU", Description = "移动设备图形处理器性能排名", ProductCount = 18 }, - new { Id = 3, Name = "电脑CPU", Description = "桌面处理器性能排名", ProductCount = 32 }, - new { Id = 4, Name = "电脑GPU", Description = "桌面显卡性能排名", ProductCount = 28 } -}); - -// 添加产品API端点,供前端测试使用 -app.MapGet("/api/products", (int? categoryId, int page = 1, int pageSize = 20, string sortBy = "PerformanceScore", string order = "desc") => -{ - // 模拟产品数据 - var allProducts = new[] - { - new { Id = 1, Name = "Snapdragon 8 Gen 2", Model = "SM8550-AB", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 3879, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 2, Name = "A16 Bionic", Model = "A16 Bionic", Manufacturer = "Apple", ReleaseYear = 2022, PerformanceScore = 3756, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 3, Name = "Dimensity 9200", Model = "MT6985", Manufacturer = "MediaTek", ReleaseYear = 2022, PerformanceScore = 3512, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 4, Name = "Snapdragon 8+ Gen 1", Model = "SM8475", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 3341, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 5, Name = "A15 Bionic", Model = "A15 Bionic", Manufacturer = "Apple", ReleaseYear = 2021, PerformanceScore = 3215, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 6, Name = "Adreno 740", Model = "Adreno 740", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 14350, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 7, Name = "Apple A16 GPU", Model = "A16 GPU", Manufacturer = "Apple", ReleaseYear = 2022, PerformanceScore = 13980, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 8, Name = "Mali-G715 MC10", Model = "Mali-G715", Manufacturer = "ARM", ReleaseYear = 2022, PerformanceScore = 12150, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 9, Name = "Adreno 730", Model = "Adreno 730", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 11020, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 10, Name = "Apple A15 GPU", Model = "A15 GPU", Manufacturer = "Apple", ReleaseYear = 2021, PerformanceScore = 10560, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 11, Name = "Intel Core i9-13900K", Model = "i9-13900K", Manufacturer = "Intel", ReleaseYear = 2022, PerformanceScore = 3176, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 12, Name = "AMD Ryzen 9 7950X", Model = "Ryzen 9 7950X", Manufacturer = "AMD", ReleaseYear = 2022, PerformanceScore = 3095, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 13, Name = "Intel Core i7-13700K", Model = "i7-13700K", Manufacturer = "Intel", ReleaseYear = 2022, PerformanceScore = 2956, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 14, Name = "AMD Ryzen 9 5900X", Model = "Ryzen 9 5900X", Manufacturer = "AMD", ReleaseYear = 2020, PerformanceScore = 2835, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 15, Name = "Intel Core i5-13600K", Model = "i5-13600K", Manufacturer = "Intel", ReleaseYear = 2022, PerformanceScore = 2742, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 16, Name = "NVIDIA GeForce RTX 4090", Model = "RTX 4090", Manufacturer = "NVIDIA", ReleaseYear = 2022, PerformanceScore = 38928, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 17, Name = "NVIDIA GeForce RTX 4080", Model = "RTX 4080", Manufacturer = "NVIDIA", ReleaseYear = 2022, PerformanceScore = 32168, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 18, Name = "NVIDIA GeForce RTX 3090 Ti", Model = "RTX 3090 Ti", Manufacturer = "NVIDIA", ReleaseYear = 2022, PerformanceScore = 28595, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 19, Name = "AMD Radeon RX 7900 XTX", Model = "RX 7900 XTX", Manufacturer = "AMD", ReleaseYear = 2022, PerformanceScore = 27850, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 20, Name = "NVIDIA GeForce RTX 3090", Model = "RTX 3090", Manufacturer = "NVIDIA", ReleaseYear = 2020, PerformanceScore = 26420, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 4 } - }; - - // 根据类别ID筛选 - var filteredProducts = categoryId.HasValue - ? allProducts.Where(p => p.CategoryId == categoryId.Value).ToArray() - : allProducts; - - // 排序 - filteredProducts = sortBy.ToLower() switch - { - "name" => order.ToLower() == "desc" - ? filteredProducts.OrderByDescending(p => p.Name).ToArray() - : filteredProducts.OrderBy(p => p.Name).ToArray(), - "manufacturer" => order.ToLower() == "desc" - ? filteredProducts.OrderByDescending(p => p.Manufacturer).ToArray() - : filteredProducts.OrderBy(p => p.Manufacturer).ToArray(), - "releaseyear" => order.ToLower() == "desc" - ? filteredProducts.OrderByDescending(p => p.ReleaseYear).ToArray() - : filteredProducts.OrderBy(p => p.ReleaseYear).ToArray(), - _ => order.ToLower() == "desc" - ? filteredProducts.OrderByDescending(p => p.PerformanceScore).ToArray() - : filteredProducts.OrderBy(p => p.PerformanceScore).ToArray() - }; - - var totalItems = filteredProducts.Length; - var totalPages = (int)Math.Ceiling((double)totalItems / pageSize); - - // 分页 - var pagedProducts = filteredProducts - .Skip((page - 1) * pageSize) - .Take(pageSize) - .ToArray(); - - return new { - Items = pagedProducts, - Total = totalItems, - CurrentPage = page, - PageSize = pageSize, - TotalPages = totalPages - }; -}); - -// 添加产品详情API端点 -app.MapGet("/api/products/{id}", (int id) => -{ - // 模拟产品详情数据 - var allProducts = new[] - { - new { - Id = 1, - Name = "Snapdragon 8 Gen 2", - Model = "SM8550-AB", - Manufacturer = "Qualcomm", - ReleaseYear = 2022, - PerformanceScore = 3879, - CurrentRank = 1, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "高通骁龙8 Gen 2是2022年推出的旗舰移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "8" }, - new { Name = "主频", Value = "3.2GHz" }, - new { Name = "GPU", Value = "Adreno 740" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1524 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 5352 }, - new { Benchmark = "AnTuTu 9", Score = 1314582 } - } - }, - new { - Id = 2, - Name = "A16 Bionic", - Model = "A16 Bionic", - Manufacturer = "Apple", - ReleaseYear = 2022, - PerformanceScore = 3756, - CurrentRank = 2, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "苹果A16 Bionic是2022年推出的移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "6" }, - new { Name = "主频", Value = "3.46GHz" }, - new { Name = "GPU", Value = "Apple A16 GPU" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1874 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 5372 }, - new { Benchmark = "AnTuTu 9", Score = 1425876 } - } - }, - new { - Id = 3, - Name = "Dimensity 9200", - Model = "MT6985", - Manufacturer = "MediaTek", - ReleaseYear = 2022, - PerformanceScore = 3512, - CurrentRank = 3, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "联发科天玑9200是2022年推出的旗舰移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "8" }, - new { Name = "主频", Value = "3.05GHz" }, - new { Name = "GPU", Value = "Mali-G715 MC10" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1424 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 4485 }, - new { Benchmark = "AnTuTu 9", Score = 1245876 } - } - }, - new { - Id = 4, - Name = "Snapdragon 8+ Gen 1", - Model = "SM8475", - Manufacturer = "Qualcomm", - ReleaseYear = 2022, - PerformanceScore = 3341, - CurrentRank = 4, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "高通骁龙8+ Gen 1是2022年推出的旗舰移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "8" }, - new { Name = "主频", Value = "3.2GHz" }, - new { Name = "GPU", Value = "Adreno 730" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1314 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 4185 }, - new { Benchmark = "AnTuTu 9", Score = 1145876 } - } - } - }; - - var product = allProducts.FirstOrDefault(p => p.Id == id); - if (product == null) - { - return Results.NotFound(new { Message = "产品不存在" }); - } - - return Results.Ok(product); -}); - -// 添加产品搜索API端点 -app.MapGet("/api/products/search", (string q, int? categoryId) => -{ - // 模拟产品数据 - var allProducts = new[] - { - new { Id = 1, Name = "Snapdragon 8 Gen 2", Model = "SM8550-AB", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 3879, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 2, Name = "A16 Bionic", Model = "A16 Bionic", Manufacturer = "Apple", ReleaseYear = 2022, PerformanceScore = 3756, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 3, Name = "Dimensity 9200", Model = "MT6985", Manufacturer = "MediaTek", ReleaseYear = 2022, PerformanceScore = 3512, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 4, Name = "Snapdragon 8+ Gen 1", Model = "SM8475", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 3341, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 5, Name = "A15 Bionic", Model = "A15 Bionic", Manufacturer = "Apple", ReleaseYear = 2021, PerformanceScore = 3215, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 1 }, - new { Id = 6, Name = "Adreno 740", Model = "Adreno 740", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 14350, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 7, Name = "Apple A16 GPU", Model = "A16 GPU", Manufacturer = "Apple", ReleaseYear = 2022, PerformanceScore = 13980, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 8, Name = "Mali-G715 MC10", Model = "Mali-G715", Manufacturer = "ARM", ReleaseYear = 2022, PerformanceScore = 12150, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 9, Name = "Adreno 730", Model = "Adreno 730", Manufacturer = "Qualcomm", ReleaseYear = 2022, PerformanceScore = 11020, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 10, Name = "Apple A15 GPU", Model = "A15 GPU", Manufacturer = "Apple", ReleaseYear = 2021, PerformanceScore = 10560, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 2 }, - new { Id = 11, Name = "Intel Core i9-13900K", Model = "i9-13900K", Manufacturer = "Intel", ReleaseYear = 2022, PerformanceScore = 3176, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 12, Name = "AMD Ryzen 9 7950X", Model = "Ryzen 9 7950X", Manufacturer = "AMD", ReleaseYear = 2022, PerformanceScore = 3095, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 13, Name = "Intel Core i7-13700K", Model = "i7-13700K", Manufacturer = "Intel", ReleaseYear = 2022, PerformanceScore = 2956, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 14, Name = "AMD Ryzen 9 5900X", Model = "Ryzen 9 5900X", Manufacturer = "AMD", ReleaseYear = 2020, PerformanceScore = 2835, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 15, Name = "Intel Core i5-13600K", Model = "i5-13600K", Manufacturer = "Intel", ReleaseYear = 2022, PerformanceScore = 2742, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 3 }, - new { Id = 16, Name = "NVIDIA GeForce RTX 4090", Model = "RTX 4090", Manufacturer = "NVIDIA", ReleaseYear = 2022, PerformanceScore = 38928, CurrentRank = 1, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 17, Name = "NVIDIA GeForce RTX 4080", Model = "RTX 4080", Manufacturer = "NVIDIA", ReleaseYear = 2022, PerformanceScore = 32168, CurrentRank = 2, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 18, Name = "NVIDIA GeForce RTX 3090 Ti", Model = "RTX 3090 Ti", Manufacturer = "NVIDIA", ReleaseYear = 2022, PerformanceScore = 28595, CurrentRank = 3, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 19, Name = "AMD Radeon RX 7900 XTX", Model = "RX 7900 XTX", Manufacturer = "AMD", ReleaseYear = 2022, PerformanceScore = 27850, CurrentRank = 4, ImageUrl = "/images/placeholder.svg", CategoryId = 4 }, - new { Id = 20, Name = "NVIDIA GeForce RTX 3090", Model = "RTX 3090", Manufacturer = "NVIDIA", ReleaseYear = 2020, PerformanceScore = 26420, CurrentRank = 5, ImageUrl = "/images/placeholder.svg", CategoryId = 4 } - }; - - // 根据类别ID筛选 - var filteredProducts = categoryId.HasValue - ? allProducts.Where(p => p.CategoryId == categoryId.Value).ToArray() - : allProducts; - - // 根据搜索关键词筛选 - if (!string.IsNullOrWhiteSpace(q)) - { - filteredProducts = filteredProducts.Where(p => - p.Name.Contains(q, StringComparison.OrdinalIgnoreCase) || - p.Model.Contains(q, StringComparison.OrdinalIgnoreCase) || - p.Manufacturer.Contains(q, StringComparison.OrdinalIgnoreCase) - ).ToArray(); - } - - return filteredProducts; -}); - -// 添加产品对比API端点 -app.MapPost("/api/comparison", async (HttpRequest request) => -{ - try - { - // 读取请求体 - var requestBody = await new StreamReader(request.Body).ReadToEndAsync(); - - // 尝试解析为JSON对象 - dynamic jsonBody = JsonSerializer.Deserialize>(requestBody); - - // 提取productIds数组 - if (jsonBody == null || !jsonBody.ContainsKey("productIds")) - { - return Results.BadRequest(new { Message = "请求体必须包含productIds字段" }); - } - - // 获取productIds数组 - var productIdsJson = jsonBody["productIds"].ToString(); - var productIds = JsonSerializer.Deserialize(productIdsJson); - - // 验证产品ID数量 - if (productIds == null || productIds.Length < 2 || productIds.Length > 4) - { - return Results.BadRequest(new { Message = "产品对比需要2-4个产品ID" }); - } - - // 模拟产品详情数据 - var allProducts = new[] - { - new { - Id = 1, - Name = "Snapdragon 8 Gen 2", - Model = "SM8550-AB", - Manufacturer = "Qualcomm", - ReleaseYear = 2022, - PerformanceScore = 3879, - CurrentRank = 1, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "高通骁龙8 Gen 2是2022年推出的旗舰移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "8" }, - new { Name = "主频", Value = "3.2GHz" }, - new { Name = "GPU", Value = "Adreno 740" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1524 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 5352 }, - new { Benchmark = "AnTuTu 9", Score = 1314582 } - } - }, - new { - Id = 2, - Name = "A16 Bionic", - Model = "A16 Bionic", - Manufacturer = "Apple", - ReleaseYear = 2022, - PerformanceScore = 3756, - CurrentRank = 2, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "苹果A16 Bionic是2022年推出的移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "6" }, - new { Name = "主频", Value = "3.46GHz" }, - new { Name = "GPU", Value = "Apple A16 GPU" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1874 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 5372 }, - new { Benchmark = "AnTuTu 9", Score = 1425876 } - } - }, - new { - Id = 3, - Name = "Dimensity 9200", - Model = "MT6985", - Manufacturer = "MediaTek", - ReleaseYear = 2022, - PerformanceScore = 3512, - CurrentRank = 3, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "联发科天玑9200是2022年推出的旗舰移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "8" }, - new { Name = "主频", Value = "3.05GHz" }, - new { Name = "GPU", Value = "Mali-G715 MC10" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1424 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 4485 }, - new { Benchmark = "AnTuTu 9", Score = 1245876 } - } - }, - new { - Id = 4, - Name = "Snapdragon 8+ Gen 1", - Model = "SM8475", - Manufacturer = "Qualcomm", - ReleaseYear = 2022, - PerformanceScore = 3341, - CurrentRank = 4, - ImageUrl = "/images/placeholder.svg", - CategoryId = 1, - Description = "高通骁龙8+ Gen 1是2022年推出的旗舰移动处理器,采用4nm工艺制程。", - Specifications = new[] { - new { Name = "工艺", Value = "4nm" }, - new { Name = "核心数", Value = "8" }, - new { Name = "主频", Value = "3.2GHz" }, - new { Name = "GPU", Value = "Adreno 730" } - }, - PerformanceScores = new[] { - new { Benchmark = "Geekbench 5 Single-Core", Score = 1314 }, - new { Benchmark = "Geekbench 5 Multi-Core", Score = 4185 }, - new { Benchmark = "AnTuTu 9", Score = 1145876 } - } - } - }; - - // 获取请求的产品 - var selectedProducts = allProducts.Where(p => productIds.Contains(p.Id)).ToArray(); - - // 检查是否找到了所有请求的产品 - if (selectedProducts.Length != productIds.Length) - { - return Results.NotFound(new { Message = "一个或多个产品不存在" }); - } - - // 创建对比数据 - var comparisonData = new { - Products = selectedProducts, - ComparisonMatrix = new { - PerformanceScore = selectedProducts.Select(p => new { - ProductId = p.Id, - ProductName = p.Name, - Value = p.PerformanceScore, - IsBest = p.PerformanceScore == selectedProducts.Max(x => x.PerformanceScore), - IsWorst = p.PerformanceScore == selectedProducts.Min(x => x.PerformanceScore) - }).ToArray(), - ReleaseYear = selectedProducts.Select(p => new { - ProductId = p.Id, - ProductName = p.Name, - Value = p.ReleaseYear, - IsBest = p.ReleaseYear == selectedProducts.Max(x => x.ReleaseYear), - IsWorst = p.ReleaseYear == selectedProducts.Min(x => x.ReleaseYear) - }).ToArray() - }, - PerformanceComparison = new { - Benchmarks = new[] { - new { - Name = "Geekbench 5 Single-Core", - Values = selectedProducts.Select(p => new { - ProductId = p.Id, - ProductName = p.Name, - Value = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Single-Core")?.Score ?? 0, - IsBest = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Single-Core")?.Score == selectedProducts.Max(x => x.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Single-Core")?.Score ?? 0), - IsWorst = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Single-Core")?.Score == selectedProducts.Min(x => x.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Single-Core")?.Score ?? int.MaxValue) - }).ToArray() - }, - new { - Name = "Geekbench 5 Multi-Core", - Values = selectedProducts.Select(p => new { - ProductId = p.Id, - ProductName = p.Name, - Value = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Multi-Core")?.Score ?? 0, - IsBest = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Multi-Core")?.Score == selectedProducts.Max(x => x.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Multi-Core")?.Score ?? 0), - IsWorst = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Multi-Core")?.Score == selectedProducts.Min(x => x.PerformanceScores.FirstOrDefault(s => s.Benchmark == "Geekbench 5 Multi-Core")?.Score ?? int.MaxValue) - }).ToArray() - }, - new { - Name = "AnTuTu 9", - Values = selectedProducts.Select(p => new { - ProductId = p.Id, - ProductName = p.Name, - Value = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "AnTuTu 9")?.Score ?? 0, - IsBest = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "AnTuTu 9")?.Score == selectedProducts.Max(x => x.PerformanceScores.FirstOrDefault(s => s.Benchmark == "AnTuTu 9")?.Score ?? 0), - IsWorst = p.PerformanceScores.FirstOrDefault(s => s.Benchmark == "AnTuTu 9")?.Score == selectedProducts.Min(x => x.PerformanceScores.FirstOrDefault(s => s.Benchmark == "AnTuTu 9")?.Score ?? int.MaxValue) - }).ToArray() - } - } - } - }; - - return Results.Ok(comparisonData); - } - catch (Exception ex) - { - return Results.BadRequest(new { Message = $"处理请求时出错: {ex.Message}" }); - } -}); - -app.MapGet("/", () => "Hello World!"); - -app.Run(); diff --git a/TestAPI/Properties/launchSettings.json b/TestAPI/Properties/launchSettings.json deleted file mode 100644 index 34ed559f..00000000 --- a/TestAPI/Properties/launchSettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:5034", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:7100;http://localhost:5034", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/TestAPI/TestAPI.csproj b/TestAPI/TestAPI.csproj deleted file mode 100644 index 6568b3dc..00000000 --- a/TestAPI/TestAPI.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net9.0 - enable - enable - - - diff --git a/TestAPI/appsettings.Development.json b/TestAPI/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/TestAPI/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/TestAPI/appsettings.json b/TestAPI/appsettings.json deleted file mode 100644 index 10f68b8c..00000000 --- a/TestAPI/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/TestAPI/bin/Debug/net9.0/TestAPI.deps.json b/TestAPI/bin/Debug/net9.0/TestAPI.deps.json deleted file mode 100644 index f155c404..00000000 --- a/TestAPI/bin/Debug/net9.0/TestAPI.deps.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v9.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v9.0": { - "TestAPI/1.0.0": { - "runtime": { - "TestAPI.dll": {} - } - } - } - }, - "libraries": { - "TestAPI/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/TestAPI/bin/Debug/net9.0/TestAPI.dll b/TestAPI/bin/Debug/net9.0/TestAPI.dll deleted file mode 100644 index 3f79989e..00000000 Binary files a/TestAPI/bin/Debug/net9.0/TestAPI.dll and /dev/null differ diff --git a/TestAPI/bin/Debug/net9.0/TestAPI.exe b/TestAPI/bin/Debug/net9.0/TestAPI.exe deleted file mode 100644 index 7358ef2c..00000000 Binary files a/TestAPI/bin/Debug/net9.0/TestAPI.exe and /dev/null differ diff --git a/TestAPI/bin/Debug/net9.0/TestAPI.pdb b/TestAPI/bin/Debug/net9.0/TestAPI.pdb deleted file mode 100644 index 05abacac..00000000 Binary files a/TestAPI/bin/Debug/net9.0/TestAPI.pdb and /dev/null differ diff --git a/TestAPI/bin/Debug/net9.0/TestAPI.runtimeconfig.json b/TestAPI/bin/Debug/net9.0/TestAPI.runtimeconfig.json deleted file mode 100644 index 6925b655..00000000 --- a/TestAPI/bin/Debug/net9.0/TestAPI.runtimeconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "net9.0", - "frameworks": [ - { - "name": "Microsoft.NETCore.App", - "version": "9.0.0" - }, - { - "name": "Microsoft.AspNetCore.App", - "version": "9.0.0" - } - ], - "configProperties": { - "System.GC.Server": true, - "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false - } - } -} \ No newline at end of file diff --git a/TestAPI/bin/Debug/net9.0/TestAPI.staticwebassets.endpoints.json b/TestAPI/bin/Debug/net9.0/TestAPI.staticwebassets.endpoints.json deleted file mode 100644 index 5576e889..00000000 --- a/TestAPI/bin/Debug/net9.0/TestAPI.staticwebassets.endpoints.json +++ /dev/null @@ -1 +0,0 @@ -{"Version":1,"ManifestType":"Build","Endpoints":[]} \ No newline at end of file diff --git a/TestAPI/bin/Debug/net9.0/appsettings.Development.json b/TestAPI/bin/Debug/net9.0/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/TestAPI/bin/Debug/net9.0/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/TestAPI/bin/Debug/net9.0/appsettings.json b/TestAPI/bin/Debug/net9.0/appsettings.json deleted file mode 100644 index 10f68b8c..00000000 --- a/TestAPI/bin/Debug/net9.0/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.AssemblyInfoInputs.cache b/TestAPI/obj/Debug/net9.0/TestAPI.AssemblyInfoInputs.cache deleted file mode 100644 index a41dd1a5..00000000 --- a/TestAPI/obj/Debug/net9.0/TestAPI.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -ccdd8558c5bd69980236f6ef7435019aea79860a1fdbecb265564d3b99885b5a diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.GeneratedMSBuildEditorConfig.editorconfig b/TestAPI/obj/Debug/net9.0/TestAPI.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index 623143aa..00000000 --- a/TestAPI/obj/Debug/net9.0/TestAPI.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,21 +0,0 @@ -is_global = true -build_property.TargetFramework = net9.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 = TestAPI -build_property.RootNamespace = TestAPI -build_property.ProjectDir = C:\work\电脑硬件-01\TestAPI\ -build_property.EnableComHosting = -build_property.EnableGeneratedComInterfaceComImportInterop = -build_property.RazorLangVersion = 9.0 -build_property.SupportLocalizedComponentNames = -build_property.GenerateRazorMetadataSourceChecksumAttributes = -build_property.MSBuildProjectDirectory = C:\work\电脑硬件-01\TestAPI -build_property._RazorSourceGeneratorDebug = -build_property.EffectiveAnalysisLevelStyle = 9.0 -build_property.EnableCodeStyleSeverity = diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.GlobalUsings.g.cs b/TestAPI/obj/Debug/net9.0/TestAPI.GlobalUsings.g.cs deleted file mode 100644 index 025530a2..00000000 --- a/TestAPI/obj/Debug/net9.0/TestAPI.GlobalUsings.g.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -global using global::Microsoft.AspNetCore.Builder; -global using global::Microsoft.AspNetCore.Hosting; -global using global::Microsoft.AspNetCore.Http; -global using global::Microsoft.AspNetCore.Routing; -global using global::Microsoft.Extensions.Configuration; -global using global::Microsoft.Extensions.DependencyInjection; -global using global::Microsoft.Extensions.Hosting; -global using global::Microsoft.Extensions.Logging; -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Net.Http.Json; -global using global::System.Threading; -global using global::System.Threading.Tasks; diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.assets.cache b/TestAPI/obj/Debug/net9.0/TestAPI.assets.cache deleted file mode 100644 index 85124964..00000000 Binary files a/TestAPI/obj/Debug/net9.0/TestAPI.assets.cache and /dev/null differ diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.csproj.CoreCompileInputs.cache b/TestAPI/obj/Debug/net9.0/TestAPI.csproj.CoreCompileInputs.cache deleted file mode 100644 index 8f284738..00000000 --- a/TestAPI/obj/Debug/net9.0/TestAPI.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -629dc1ba4c6ea1c70ecea85384c28652dcd9f627da004e854aea08234c082e60 diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.csproj.FileListAbsolute.txt b/TestAPI/obj/Debug/net9.0/TestAPI.csproj.FileListAbsolute.txt deleted file mode 100644 index b79dbac0..00000000 --- a/TestAPI/obj/Debug/net9.0/TestAPI.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,27 +0,0 @@ -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\rpswa.dswa.cache.json -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.GeneratedMSBuildEditorConfig.editorconfig -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.AssemblyInfoInputs.cache -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.AssemblyInfo.cs -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.csproj.CoreCompileInputs.cache -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.MvcApplicationPartsAssemblyInfo.cache -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\appsettings.Development.json -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\appsettings.json -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\TestAPI.staticwebassets.endpoints.json -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\TestAPI.exe -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\TestAPI.deps.json -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\TestAPI.runtimeconfig.json -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\TestAPI.dll -C:\work\电脑硬件-01\TestAPI\bin\Debug\net9.0\TestAPI.pdb -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\rjimswa.dswa.cache.json -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\rjsmrazor.dswa.cache.json -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\scopedcss\bundle\TestAPI.styles.css -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\staticwebassets.build.json -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\staticwebassets.build.json.cache -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\staticwebassets.development.json -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\staticwebassets.build.endpoints.json -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.dll -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\refint\TestAPI.dll -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.pdb -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\TestAPI.genruntimeconfig.cache -C:\work\电脑硬件-01\TestAPI\obj\Debug\net9.0\ref\TestAPI.dll diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.dll b/TestAPI/obj/Debug/net9.0/TestAPI.dll deleted file mode 100644 index 3f79989e..00000000 Binary files a/TestAPI/obj/Debug/net9.0/TestAPI.dll and /dev/null differ diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.genruntimeconfig.cache b/TestAPI/obj/Debug/net9.0/TestAPI.genruntimeconfig.cache deleted file mode 100644 index 6dc2418d..00000000 --- a/TestAPI/obj/Debug/net9.0/TestAPI.genruntimeconfig.cache +++ /dev/null @@ -1 +0,0 @@ -38a42475f40bb80e703a6be2ed50ba07b47c048703c6393754361ef17fa8a577 diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.pdb b/TestAPI/obj/Debug/net9.0/TestAPI.pdb deleted file mode 100644 index 05abacac..00000000 Binary files a/TestAPI/obj/Debug/net9.0/TestAPI.pdb and /dev/null differ diff --git a/TestAPI/obj/Debug/net9.0/apphost.exe b/TestAPI/obj/Debug/net9.0/apphost.exe deleted file mode 100644 index 7358ef2c..00000000 Binary files a/TestAPI/obj/Debug/net9.0/apphost.exe and /dev/null differ diff --git a/TestAPI/obj/Debug/net9.0/ref/TestAPI.dll b/TestAPI/obj/Debug/net9.0/ref/TestAPI.dll deleted file mode 100644 index 7ef1d7f4..00000000 Binary files a/TestAPI/obj/Debug/net9.0/ref/TestAPI.dll and /dev/null differ diff --git a/TestAPI/obj/Debug/net9.0/refint/TestAPI.dll b/TestAPI/obj/Debug/net9.0/refint/TestAPI.dll deleted file mode 100644 index 7ef1d7f4..00000000 Binary files a/TestAPI/obj/Debug/net9.0/refint/TestAPI.dll and /dev/null differ diff --git a/TestAPI/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json b/TestAPI/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json deleted file mode 100644 index 48051c25..00000000 --- a/TestAPI/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json +++ /dev/null @@ -1 +0,0 @@ -{"GlobalPropertiesHash":"dVVFBPF+yx1XeT2fudEGH1R3XO+aUijSkKblyMEVniE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Lpeh1RwLXIyvQKXlP5V/sva7Z/agva4HylWWs9x367k=","NpVS4EAMz7A1S25A2Hx2pp3S0yLCtTxxWK1YTu5DYG4=","ZG\u002BuM97rTAPjb9pyJf6/REwgb991A7gdC1eXa0J08qk=","IqGtI2TxPcfTta2GT9LoWzn8eGroGmjezPv2CukNgaQ="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/TestAPI/obj/Debug/net9.0/rjsmrazor.dswa.cache.json b/TestAPI/obj/Debug/net9.0/rjsmrazor.dswa.cache.json deleted file mode 100644 index 6ef6a4d8..00000000 --- a/TestAPI/obj/Debug/net9.0/rjsmrazor.dswa.cache.json +++ /dev/null @@ -1 +0,0 @@ -{"GlobalPropertiesHash":"WBkI6Z6c2yRX/TuiMz89dqrp0Y8PeOUEoBMF1UPIwhY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Lpeh1RwLXIyvQKXlP5V/sva7Z/agva4HylWWs9x367k=","NpVS4EAMz7A1S25A2Hx2pp3S0yLCtTxxWK1YTu5DYG4=","ZG\u002BuM97rTAPjb9pyJf6/REwgb991A7gdC1eXa0J08qk=","IqGtI2TxPcfTta2GT9LoWzn8eGroGmjezPv2CukNgaQ="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/TestAPI/obj/Debug/net9.0/rpswa.dswa.cache.json b/TestAPI/obj/Debug/net9.0/rpswa.dswa.cache.json deleted file mode 100644 index 54e2ba85..00000000 --- a/TestAPI/obj/Debug/net9.0/rpswa.dswa.cache.json +++ /dev/null @@ -1 +0,0 @@ -{"GlobalPropertiesHash":"hVHQLSOValT1B/pCNBhgcbHPS5nopeoAhzjLbDuN7Zg=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Lpeh1RwLXIyvQKXlP5V/sva7Z/agva4HylWWs9x367k=","NpVS4EAMz7A1S25A2Hx2pp3S0yLCtTxxWK1YTu5DYG4="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/TestAPI/obj/Debug/net9.0/staticwebassets.build.endpoints.json b/TestAPI/obj/Debug/net9.0/staticwebassets.build.endpoints.json deleted file mode 100644 index 5576e889..00000000 --- a/TestAPI/obj/Debug/net9.0/staticwebassets.build.endpoints.json +++ /dev/null @@ -1 +0,0 @@ -{"Version":1,"ManifestType":"Build","Endpoints":[]} \ No newline at end of file diff --git a/TestAPI/obj/Debug/net9.0/staticwebassets.build.json b/TestAPI/obj/Debug/net9.0/staticwebassets.build.json deleted file mode 100644 index 61481a4d..00000000 --- a/TestAPI/obj/Debug/net9.0/staticwebassets.build.json +++ /dev/null @@ -1 +0,0 @@ -{"Version":1,"Hash":"64bSZbxOJKaY+8UM7wPlJ/AHdb+9Pt5O8g8LvheWrpE=","Source":"TestAPI","BasePath":"_content/TestAPI","Mode":"Default","ManifestType":"Build","ReferencedProjectsConfiguration":[],"DiscoveryPatterns":[],"Assets":[],"Endpoints":[]} \ No newline at end of file diff --git a/TestAPI/obj/Debug/net9.0/staticwebassets.build.json.cache b/TestAPI/obj/Debug/net9.0/staticwebassets.build.json.cache deleted file mode 100644 index 2c0bdbe2..00000000 --- a/TestAPI/obj/Debug/net9.0/staticwebassets.build.json.cache +++ /dev/null @@ -1 +0,0 @@ -64bSZbxOJKaY+8UM7wPlJ/AHdb+9Pt5O8g8LvheWrpE= \ No newline at end of file diff --git a/TestAPI/obj/TestAPI.csproj.nuget.dgspec.json b/TestAPI/obj/TestAPI.csproj.nuget.dgspec.json deleted file mode 100644 index b4e8b34b..00000000 --- a/TestAPI/obj/TestAPI.csproj.nuget.dgspec.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "format": 1, - "restore": { - "C:\\work\\电脑硬件-01\\TestAPI\\TestAPI.csproj": {} - }, - "projects": { - "C:\\work\\电脑硬件-01\\TestAPI\\TestAPI.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\TestAPI\\TestAPI.csproj", - "projectName": "TestAPI", - "projectPath": "C:\\work\\电脑硬件-01\\TestAPI\\TestAPI.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\TestAPI\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.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\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/TestAPI/obj/TestAPI.csproj.nuget.g.props b/TestAPI/obj/TestAPI.csproj.nuget.g.props deleted file mode 100644 index b085de15..00000000 --- a/TestAPI/obj/TestAPI.csproj.nuget.g.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.14.0 - - - - - - \ No newline at end of file diff --git a/TestAPI/obj/TestAPI.csproj.nuget.g.targets b/TestAPI/obj/TestAPI.csproj.nuget.g.targets deleted file mode 100644 index 3dc06ef3..00000000 --- a/TestAPI/obj/TestAPI.csproj.nuget.g.targets +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/TestAPI/obj/project.assets.json b/TestAPI/obj/project.assets.json deleted file mode 100644 index 0a9d9f70..00000000 --- a/TestAPI/obj/project.assets.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "version": 3, - "targets": { - "net9.0": {} - }, - "libraries": {}, - "projectFileDependencyGroups": { - "net9.0": [] - }, - "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\TestAPI\\TestAPI.csproj", - "projectName": "TestAPI", - "projectPath": "C:\\work\\电脑硬件-01\\TestAPI\\TestAPI.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\TestAPI\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\代\\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": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.chinacloudapi.cn/v3/index.json": {}, - "https://packages.microsoft.com/dotnet": {}, - "https://www.nuget.org/api/v2/": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.300" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.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\\9.0.304/PortableRuntimeIdentifierGraph.json" - } - } - } -} \ No newline at end of file diff --git a/TestAPI/obj/project.nuget.cache b/TestAPI/obj/project.nuget.cache deleted file mode 100644 index 492d8cbe..00000000 --- a/TestAPI/obj/project.nuget.cache +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "+9ap18uw05w=", - "success": true, - "projectFilePath": "C:\\work\\电脑硬件-01\\TestAPI\\TestAPI.csproj", - "expectedPackageFiles": [], - "logs": [] -} \ No newline at end of file diff --git a/backend/Controllers/MonitorController.cs b/backend/Controllers/MonitorController.cs new file mode 100644 index 00000000..d2e2ecf6 --- /dev/null +++ b/backend/Controllers/MonitorController.cs @@ -0,0 +1,151 @@ +using Microsoft.AspNetCore.Mvc; +using System.Text.Json; + +namespace HardwarePerformanceAPI.Controllers +{ + [ApiController] + [Route("api/monitor")] + public class MonitorController : ControllerBase + { + private readonly ILogger _logger; + private readonly string _logDirectory; + + public MonitorController(ILogger logger) + { + _logger = logger; + // 设置日志存储目录 + _logDirectory = Path.Combine(Directory.GetCurrentDirectory(), "logs", "monitor"); + + // 确保目录存在 + if (!Directory.Exists(_logDirectory)) + { + Directory.CreateDirectory(_logDirectory); + } + } + + [HttpPost("report")] + public async Task ReportData([FromBody] JsonElement data) + { + try + { + // 获取客户端IP + var clientIp = HttpContext.Connection.RemoteIpAddress?.ToString() ?? "unknown"; + + // 获取用户代理 + var userAgent = Request.Headers["User-Agent"].ToString() ?? "unknown"; + + // 添加元数据 + var reportData = new + { + Timestamp = DateTime.UtcNow, + ClientIp = clientIp, + UserAgent = userAgent, + Data = data + }; + + // 生成文件名(按日期分类) + var fileName = $"monitor_{DateTime.UtcNow:yyyyMMdd}.json"; + var filePath = Path.Combine(_logDirectory, fileName); + + // 将数据写入文件 + var json = JsonSerializer.Serialize(reportData, new JsonSerializerOptions + { + WriteIndented = true + }); + + await System.IO.File.AppendAllTextAsync(filePath, json + Environment.NewLine + Environment.NewLine); + + _logger.LogInformation("Monitor data received from {ClientIp}", clientIp); + + return Ok(new { success = true, message = "Data reported successfully" }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error processing monitor data"); + return StatusCode(500, new { success = false, message = "Internal server error" }); + } + } + + [HttpGet("stats")] + public IActionResult GetStats() + { + try + { + var stats = new + { + ReportsCount = CountReports(), + LastReportTime = GetLastReportTime(), + ErrorCount = CountReportsByType("error"), + PerformanceCount = CountReportsByType("performance") + }; + + return Ok(stats); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error getting monitor stats"); + return StatusCode(500, new { success = false, message = "Internal server error" }); + } + } + + private int CountReports() + { + var today = DateTime.UtcNow.ToString("yyyyMMdd"); + var filePath = Path.Combine(_logDirectory, $"monitor_{today}.json"); + + if (!System.IO.File.Exists(filePath)) + return 0; + + var content = System.IO.File.ReadAllText(filePath); + var lines = content.Split(new[] { Environment.NewLine + Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + return lines.Length; + } + + private DateTime? GetLastReportTime() + { + var today = DateTime.UtcNow.ToString("yyyyMMdd"); + var filePath = Path.Combine(_logDirectory, $"monitor_{today}.json"); + + if (!System.IO.File.Exists(filePath)) + return null; + + var fileInfo = new FileInfo(filePath); + return fileInfo.LastWriteTimeUtc; + } + + private int CountReportsByType(string type) + { + var today = DateTime.UtcNow.ToString("yyyyMMdd"); + var filePath = Path.Combine(_logDirectory, $"monitor_{today}.json"); + + if (!System.IO.File.Exists(filePath)) + return 0; + + var content = System.IO.File.ReadAllText(filePath); + var lines = content.Split(new[] { Environment.NewLine + Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + + int count = 0; + foreach (var line in lines) + { + try + { + using var document = JsonDocument.Parse(line); + if (document.RootElement.TryGetProperty("Data", out var dataElement)) + { + if (dataElement.TryGetProperty("type", out var typeElement) && + typeElement.GetString()?.Contains(type) == true) + { + count++; + } + } + } + catch + { + // 忽略解析错误 + } + } + + return count; + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.API/Controllers/TestController.cs b/backend/HardwarePerformance.API/Controllers/TestController.cs index 59b23aa3..98c563e5 100644 --- a/backend/HardwarePerformance.API/Controllers/TestController.cs +++ b/backend/HardwarePerformance.API/Controllers/TestController.cs @@ -68,87 +68,32 @@ public class TestController : ControllerBase } [HttpGet("categories")] - public async Task GetCategories() - { - try + public async Task GetCategories() { - var categories = new List(); - - using var connection = new MySql.Data.MySqlClient.MySqlConnection( - "Server=localhost;Database=HardwarePerformance;User=root;Password=123456;"); - await connection.OpenAsync(); - - using var cmd = new MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM Categories", connection); - using var reader = await cmd.ExecuteReaderAsync(); - - while (await reader.ReadAsync()) + try { - categories.Add(new - { - Id = reader.GetInt32("Id"), - Name = reader.GetString("Name"), - Description = reader.IsDBNull("Description") ? null : reader.GetString("Description"), - CreatedAt = reader.GetDateTime("CreatedAt") - }); + var categories = await _context.GetCategoriesAsync(); + return Ok(new { success = true, data = categories }); } - - return Ok(categories); - } - catch (Exception ex) - { - _logger.LogError(ex, "获取类别列表时发生错误"); - return StatusCode(500, new + catch (Exception ex) { - Message = $"获取类别列表时发生错误: {ex.Message}", - Timestamp = DateTime.Now - }); + _logger.LogError(ex, "获取类别列表时发生错误"); + return StatusCode(500, new { success = false, message = ex.Message }); + } } - } [HttpGet("products")] - public async Task GetProducts() - { - try + public async Task GetProducts([FromQuery] int categoryId = 0, [FromQuery] int page = 1, [FromQuery] int pageSize = 10) { - var products = new List(); - - using var connection = new MySql.Data.MySqlClient.MySqlConnection( - "Server=localhost;Database=HardwarePerformance;User=root;Password=123456;"); - await connection.OpenAsync(); - - using var cmd = new MySql.Data.MySqlClient.MySqlCommand( - @"SELECT p.*, c.Name as CategoryName - FROM Products p - LEFT JOIN Categories c ON p.CategoryId = c.Id", connection); - using var reader = await cmd.ExecuteReaderAsync(); - - while (await reader.ReadAsync()) + try { - products.Add(new - { - Id = reader.GetInt32("Id"), - Name = reader.GetString("Name"), - Model = reader.IsDBNull("Model") ? null : reader.GetString("Model"), - Manufacturer = reader.IsDBNull("Manufacturer") ? null : reader.GetString("Manufacturer"), - ImageUrl = reader.IsDBNull("ImageUrl") ? null : reader.GetString("ImageUrl"), - ReleaseDate = reader.IsDBNull("ReleaseDate") ? (DateTime?)null : reader.GetDateTime("ReleaseDate"), - CategoryId = reader.IsDBNull("CategoryId") ? (int?)null : reader.GetInt32("CategoryId"), - CategoryName = reader.IsDBNull("CategoryName") ? null : reader.GetString("CategoryName"), - CurrentRank = reader.IsDBNull("CurrentRank") ? (int?)null : reader.GetInt32("CurrentRank"), - CreatedAt = reader.GetDateTime("CreatedAt") - }); + var products = await _context.GetProductsAsync(categoryId, page, pageSize); + return Ok(new { success = true, data = products }); } - - return Ok(products); - } - catch (Exception ex) - { - _logger.LogError(ex, "获取产品列表时发生错误"); - return StatusCode(500, new + catch (Exception ex) { - Message = $"获取产品列表时发生错误: {ex.Message}", - Timestamp = DateTime.Now - }); + _logger.LogError(ex, "获取产品列表时发生错误"); + return StatusCode(500, new { success = false, message = ex.Message }); + } } - } } \ No newline at end of file diff --git a/backend/HardwarePerformance.API/HardwarePerformance.API.csproj b/backend/HardwarePerformance.API/HardwarePerformance.API.csproj index 70e13afa..3936379a 100644 --- a/backend/HardwarePerformance.API/HardwarePerformance.API.csproj +++ b/backend/HardwarePerformance.API/HardwarePerformance.API.csproj @@ -10,7 +10,7 @@ - + diff --git a/backend/HardwarePerformance.API/Program.cs b/backend/HardwarePerformance.API/Program.cs index e957ab32..c8176e0a 100644 --- a/backend/HardwarePerformance.API/Program.cs +++ b/backend/HardwarePerformance.API/Program.cs @@ -1,4 +1,7 @@ using System.IO.Compression; +using System.Linq; +using Microsoft.AspNetCore.ResponseCompression; +using StackExchange.Redis; using HardwarePerformance.Infrastructure.Services; var builder = WebApplication.CreateBuilder(args); diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/BouncyCastle.Cryptography.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/BouncyCastle.Cryptography.dll new file mode 100644 index 00000000..782adf41 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/BouncyCastle.Cryptography.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Google.Protobuf.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Google.Protobuf.dll new file mode 100644 index 00000000..5363ce34 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Google.Protobuf.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.deps.json b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.deps.json new file mode 100644 index 00000000..5d593929 --- /dev/null +++ b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.deps.json @@ -0,0 +1,1058 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v9.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v9.0": { + "HardwarePerformance.API/1.0.0": { + "dependencies": { + "HardwarePerformance.Application": "1.0.0", + "HardwarePerformance.Infrastructure": "1.0.0", + "Microsoft.AspNetCore.OpenApi": "9.0.0", + "Microsoft.EntityFrameworkCore.Design": "9.0.0", + "Microsoft.Extensions.Caching.StackExchangeRedis": "9.0.0", + "StackExchange.Redis": "2.7.27", + "Swashbuckle.AspNetCore": "6.6.2" + }, + "runtime": { + "HardwarePerformance.API.dll": {} + } + }, + "BouncyCastle.Cryptography/2.3.1": { + "runtime": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.3.1.17862" + } + } + }, + "Google.Protobuf/3.26.1": { + "runtime": { + "lib/net5.0/Google.Protobuf.dll": { + "assemblyVersion": "3.26.1.0", + "fileVersion": "3.26.1.0" + } + } + }, + "Humanizer.Core/2.14.1": { + "runtime": { + "lib/net6.0/Humanizer.dll": { + "assemblyVersion": "2.14.0.0", + "fileVersion": "2.14.1.48190" + } + } + }, + "K4os.Compression.LZ4/1.3.8": { + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "assemblyVersion": "1.3.8.0", + "fileVersion": "1.3.8.0" + } + } + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "dependencies": { + "K4os.Compression.LZ4": "1.3.8", + "K4os.Hash.xxHash": "1.0.8" + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "assemblyVersion": "1.3.8.0", + "fileVersion": "1.3.8.0" + } + } + }, + "K4os.Hash.xxHash/1.0.8": { + "runtime": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "assemblyVersion": "1.0.8.0", + "fileVersion": "1.0.8.0" + } + } + }, + "Microsoft.AspNetCore.OpenApi/9.0.0": { + "dependencies": { + "Microsoft.OpenApi": "1.6.17" + }, + "runtime": { + "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52903" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "runtime": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Build.Locator/1.7.8": { + "runtime": { + "lib/net6.0/Microsoft.Build.Locator.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.7.8.28074" + } + } + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "4.8.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.Common": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "4.8.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "4.8.0", + "System.Composition": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "4.8.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "9.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Locator": "1.7.8", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0", + "Microsoft.EntityFrameworkCore.Relational": "9.0.0", + "Microsoft.Extensions.DependencyModel": "9.0.0", + "Mono.TextTemplating": "3.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "9.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.Extensions.Caching.StackExchangeRedis/9.0.0": { + "dependencies": { + "StackExchange.Redis": "2.7.27" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52903" + } + } + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.OpenApi/1.6.17": { + "runtime": { + "lib/netstandard2.0/Microsoft.OpenApi.dll": { + "assemblyVersion": "1.6.17.0", + "fileVersion": "1.6.17.0" + } + } + }, + "Mono.TextTemplating/3.0.0": { + "dependencies": { + "System.CodeDom": "6.0.0" + }, + "runtime": { + "lib/net6.0/Mono.TextTemplating.dll": { + "assemblyVersion": "3.0.0.0", + "fileVersion": "3.0.0.1" + } + } + }, + "MySql.Data/9.0.0": { + "dependencies": { + "BouncyCastle.Cryptography": "2.3.1", + "Google.Protobuf": "3.26.1", + "K4os.Compression.LZ4.Streams": "1.3.8", + "System.Configuration.ConfigurationManager": "8.0.0", + "System.Security.Permissions": "8.0.0", + "ZstdSharp.Port": "0.8.0" + }, + "runtime": { + "lib/net8.0/MySql.Data.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.0.0" + } + }, + "runtimeTargets": { + "runtimes/win-x64/native/comerr64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/gssapi64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/k5sprt64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/krb5_64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/krbcc64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + } + } + }, + "MySqlConnector/2.4.0": { + "runtime": { + "lib/net9.0/MySqlConnector.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.4.0.0" + } + } + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "runtime": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "2.2.8.1080" + } + } + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Relational": "9.0.0", + "MySqlConnector": "2.4.0" + }, + "runtime": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.0.0" + } + } + }, + "StackExchange.Redis/2.7.27": { + "dependencies": { + "Pipelines.Sockets.Unofficial": "2.2.8" + }, + "runtime": { + "lib/net6.0/StackExchange.Redis.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.7.27.49176" + } + } + }, + "Swashbuckle.AspNetCore/6.6.2": { + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "6.6.2", + "Swashbuckle.AspNetCore.SwaggerGen": "6.6.2", + "Swashbuckle.AspNetCore.SwaggerUI": "6.6.2" + } + }, + "Swashbuckle.AspNetCore.Swagger/6.6.2": { + "dependencies": { + "Microsoft.OpenApi": "1.6.17" + }, + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.dll": { + "assemblyVersion": "6.6.2.0", + "fileVersion": "6.6.2.401" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.6.2": { + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "6.6.2" + }, + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "assemblyVersion": "6.6.2.0", + "fileVersion": "6.6.2.401" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.6.2": { + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "assemblyVersion": "6.6.2.0", + "fileVersion": "6.6.2.401" + } + } + }, + "System.CodeDom/6.0.0": { + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Composition/7.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + } + }, + "System.Composition.AttributedModel/7.0.0": { + "runtime": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.Convention/7.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "runtime": { + "lib/net7.0/System.Composition.Convention.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.Hosting/7.0.0": { + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "runtime": { + "lib/net7.0/System.Composition.Hosting.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.Runtime/7.0.0": { + "runtime": { + "lib/net7.0/System.Composition.Runtime.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.TypedParts/7.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "runtime": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "dependencies": { + "System.Security.Cryptography.ProtectedData": "8.0.0" + }, + "runtime": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "runtime": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Security.Permissions/8.0.0": { + "dependencies": { + "System.Windows.Extensions": "8.0.0" + }, + "runtime": { + "lib/net8.0/System.Security.Permissions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Windows.Extensions/8.0.0": { + "runtime": { + "lib/net8.0/System.Windows.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "ZstdSharp.Port/0.8.0": { + "runtime": { + "lib/net8.0/ZstdSharp.dll": { + "assemblyVersion": "0.8.0.0", + "fileVersion": "0.8.0.0" + } + } + }, + "HardwarePerformance.Application/1.0.0": { + "dependencies": { + "HardwarePerformance.Core": "1.0.0" + }, + "runtime": { + "HardwarePerformance.Application.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "HardwarePerformance.Core/1.0.0": { + "runtime": { + "HardwarePerformance.Core.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "HardwarePerformance.Infrastructure/1.0.0": { + "dependencies": { + "HardwarePerformance.Application": "1.0.0", + "HardwarePerformance.Core": "1.0.0", + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.EntityFrameworkCore.Design": "9.0.0", + "MySql.Data": "9.0.0", + "Pomelo.EntityFrameworkCore.MySql": "9.0.0", + "StackExchange.Redis": "2.7.27" + }, + "runtime": { + "HardwarePerformance.Infrastructure.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + } + } + }, + "libraries": { + "HardwarePerformance.API/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "BouncyCastle.Cryptography/2.3.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==", + "path": "bouncycastle.cryptography/2.3.1", + "hashPath": "bouncycastle.cryptography.2.3.1.nupkg.sha512" + }, + "Google.Protobuf/3.26.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==", + "path": "google.protobuf/3.26.1", + "hashPath": "google.protobuf.3.26.1.nupkg.sha512" + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "path": "humanizer.core/2.14.1", + "hashPath": "humanizer.core.2.14.1.nupkg.sha512" + }, + "K4os.Compression.LZ4/1.3.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LhwlPa7c1zs1OV2XadMtAWdImjLIsqFJPoRcIWAadSRn0Ri1DepK65UbWLPmt4riLqx2d40xjXRk0ogpqNtK7g==", + "path": "k4os.compression.lz4/1.3.8", + "hashPath": "k4os.compression.lz4.1.3.8.nupkg.sha512" + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-P15qr8dZAeo9GvYbUIPEYFQ0MEJ0i5iqr37wsYeRC3la2uCldOoeCa6to0CZ1taiwxIV+Mk8NGuZi+4iWivK9w==", + "path": "k4os.compression.lz4.streams/1.3.8", + "hashPath": "k4os.compression.lz4.streams.1.3.8.nupkg.sha512" + }, + "K4os.Hash.xxHash/1.0.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wp2F7BamQ2Q/7Hk834nV9vRQapgcr8kgv9Jvfm8J3D0IhDqZMMl+a2yxUq5ltJitvXvQfB8W6K4F4fCbw/P6YQ==", + "path": "k4os.hash.xxhash/1.0.8", + "hashPath": "k4os.hash.xxhash.1.0.8.nupkg.sha512" + }, + "Microsoft.AspNetCore.OpenApi/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FqUK5j1EOPNuFT7IafltZQ3cakqhSwVzH5ZW1MhZDe4pPXs9sJ2M5jom1Omsu+mwF2tNKKlRAzLRHQTZzbd+6Q==", + "path": "microsoft.aspnetcore.openapi/9.0.0", + "hashPath": "microsoft.aspnetcore.openapi.9.0.0.nupkg.sha512" + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==", + "path": "microsoft.bcl.asyncinterfaces/7.0.0", + "hashPath": "microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512" + }, + "Microsoft.Build.Locator/1.7.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sPy10x527Ph16S2u0yGME4S6ohBKJ69WfjeGG/bvELYeZVmJdKjxgnlL8cJJJLGV/cZIRqSfB12UDB8ICakOog==", + "path": "microsoft.build.locator/1.7.8", + "hashPath": "microsoft.build.locator.1.7.8.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "path": "microsoft.codeanalysis.common/4.8.0", + "hashPath": "microsoft.codeanalysis.common.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "path": "microsoft.codeanalysis.csharp/4.8.0", + "hashPath": "microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "path": "microsoft.codeanalysis.csharp.workspaces/4.8.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "path": "microsoft.codeanalysis.workspaces.common/4.8.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IEYreI82QZKklp54yPHxZNG9EKSK6nHEkeuf+0Asie9llgS1gp0V1hw7ODG+QyoB7MuAnNQHmeV1Per/ECpv6A==", + "path": "microsoft.codeanalysis.workspaces.msbuild/4.8.0", + "hashPath": "microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==", + "path": "microsoft.entityframeworkcore/9.0.0", + "hashPath": "microsoft.entityframeworkcore.9.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==", + "path": "microsoft.entityframeworkcore.abstractions/9.0.0", + "hashPath": "microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Pqo8I+yHJ3VQrAoY0hiSncf+5P7gN/RkNilK5e+/K/yKh+yAWxdUAI6t0TG26a9VPlCa9FhyklzyFvRyj3YG9A==", + "path": "microsoft.entityframeworkcore.design/9.0.0", + "hashPath": "microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==", + "path": "microsoft.entityframeworkcore.relational/9.0.0", + "hashPath": "microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.StackExchangeRedis/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sxxJa+S6++s+J7tipY1DjdhAIO279hAOItCMKnpeEOXrU4SNqcjKNjemssgSJ1uMN5rgbuv52CzMf7UWnLYgiw==", + "path": "microsoft.extensions.caching.stackexchangeredis/9.0.0", + "hashPath": "microsoft.extensions.caching.stackexchangeredis.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==", + "path": "microsoft.extensions.dependencymodel/9.0.0", + "hashPath": "microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512" + }, + "Microsoft.OpenApi/1.6.17": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Le+kehlmrlQfuDFUt1zZ2dVwrhFQtKREdKBo+rexOwaCoYP0/qpgT9tLxCsZjsgR5Itk1UKPcbgO+FyaNid/bA==", + "path": "microsoft.openapi/1.6.17", + "hashPath": "microsoft.openapi.1.6.17.nupkg.sha512" + }, + "Mono.TextTemplating/3.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==", + "path": "mono.texttemplating/3.0.0", + "hashPath": "mono.texttemplating.3.0.0.nupkg.sha512" + }, + "MySql.Data/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YT2/fdDy3FBx5ZK0qsupEs9Gt0iFo/mZR+ND5cJwrr+6xguAOXyYpYUbEj27UcLZER5InOUrJQYyUaPIDil2Xw==", + "path": "mysql.data/9.0.0", + "hashPath": "mysql.data.9.0.0.nupkg.sha512" + }, + "MySqlConnector/2.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-78M+gVOjbdZEDIyXQqcA7EYlCGS3tpbUELHvn6638A2w0pkPI625ixnzsa5staAd3N9/xFmPJtkKDYwsXpFi/w==", + "path": "mysqlconnector/2.4.0", + "hashPath": "mysqlconnector.2.4.0.nupkg.sha512" + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==", + "path": "pipelines.sockets.unofficial/2.2.8", + "hashPath": "pipelines.sockets.unofficial.2.2.8.nupkg.sha512" + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cl7S4s6CbJno0LjNxrBHNc2xxmCliR5i40ATPZk/eTywVaAbHCbdc9vbGc3QThvwGjHqrDHT8vY9m1VF/47o0g==", + "path": "pomelo.entityframeworkcore.mysql/9.0.0", + "hashPath": "pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512" + }, + "StackExchange.Redis/2.7.27": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Uqc2OQHglqj9/FfGQ6RkKFkZfHySfZlfmbCl+hc+u2I/IqunfelQ7QJi7ZhvAJxUtu80pildVX6NPLdDaUffOw==", + "path": "stackexchange.redis/2.7.27", + "hashPath": "stackexchange.redis.2.7.27.nupkg.sha512" + }, + "Swashbuckle.AspNetCore/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+NB4UYVYN6AhDSjW0IJAd1AGD8V33gemFNLPaxKTtPkHB+HaKAKf9MGAEUPivEWvqeQfcKIw8lJaHq6LHljRuw==", + "path": "swashbuckle.aspnetcore/6.6.2", + "hashPath": "swashbuckle.aspnetcore.6.6.2.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.Swagger/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ovgPTSYX83UrQUWiS5vzDcJ8TEX1MAxBgDFMK45rC24MorHEPQlZAHlaXj/yth4Zf6xcktpUgTEBvffRQVwDKA==", + "path": "swashbuckle.aspnetcore.swagger/6.6.2", + "hashPath": "swashbuckle.aspnetcore.swagger.6.6.2.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zv4ikn4AT1VYuOsDCpktLq4QDq08e7Utzbir86M5/ZkRaLXbCPF11E1/vTmOiDzRTl0zTZINQU2qLKwTcHgfrA==", + "path": "swashbuckle.aspnetcore.swaggergen/6.6.2", + "hashPath": "swashbuckle.aspnetcore.swaggergen.6.6.2.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mBBb+/8Hm2Q3Wygag+hu2jj69tZW5psuv0vMRXY07Wy+Rrj40vRP8ZTbKBhs91r45/HXT4aY4z0iSBYx1h6JvA==", + "path": "swashbuckle.aspnetcore.swaggerui/6.6.2", + "hashPath": "swashbuckle.aspnetcore.swaggerui.6.6.2.nupkg.sha512" + }, + "System.CodeDom/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==", + "path": "system.codedom/6.0.0", + "hashPath": "system.codedom.6.0.0.nupkg.sha512" + }, + "System.Composition/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "path": "system.composition/7.0.0", + "hashPath": "system.composition.7.0.0.nupkg.sha512" + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==", + "path": "system.composition.attributedmodel/7.0.0", + "hashPath": "system.composition.attributedmodel.7.0.0.nupkg.sha512" + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "path": "system.composition.convention/7.0.0", + "hashPath": "system.composition.convention.7.0.0.nupkg.sha512" + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "path": "system.composition.hosting/7.0.0", + "hashPath": "system.composition.hosting.7.0.0.nupkg.sha512" + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==", + "path": "system.composition.runtime/7.0.0", + "hashPath": "system.composition.runtime.7.0.0.nupkg.sha512" + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "path": "system.composition.typedparts/7.0.0", + "hashPath": "system.composition.typedparts.7.0.0.nupkg.sha512" + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==", + "path": "system.configuration.configurationmanager/8.0.0", + "hashPath": "system.configuration.configurationmanager.8.0.0.nupkg.sha512" + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==", + "path": "system.security.cryptography.protecteddata/8.0.0", + "hashPath": "system.security.cryptography.protecteddata.8.0.0.nupkg.sha512" + }, + "System.Security.Permissions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-v/BBylw7XevuAsHXoX9dDUUfmBIcUf7Lkz8K3ZXIKz3YRKpw8YftpSir4n4e/jDTKFoaK37AsC3xnk+GNFI1Ow==", + "path": "system.security.permissions/8.0.0", + "hashPath": "system.security.permissions.8.0.0.nupkg.sha512" + }, + "System.Windows.Extensions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Obg3a90MkOw9mYKxrardLpY2u0axDMrSmy4JCdq2cYbelM2cUwmUir5Bomvd1yxmPL9h5LVHU1tuKBZpUjfASg==", + "path": "system.windows.extensions/8.0.0", + "hashPath": "system.windows.extensions.8.0.0.nupkg.sha512" + }, + "ZstdSharp.Port/0.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z62eNBIu8E8YtbqlMy57tK3dV1+m2b9NhPeaYovB5exmLKvrGCqOhJTzrEUH5VyUWU6vwX3c1XHJGhW5HVs8dA==", + "path": "zstdsharp.port/0.8.0", + "hashPath": "zstdsharp.port.0.8.0.nupkg.sha512" + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "HardwarePerformance.Core/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "HardwarePerformance.Infrastructure/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.dll new file mode 100644 index 00000000..a26811b2 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.exe b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.exe new file mode 100644 index 00000000..83a34f0f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.exe differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.pdb b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.pdb new file mode 100644 index 00000000..376abc5c Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.pdb differ diff --git a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.runtimeconfig.json b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.runtimeconfig.json similarity index 85% rename from MinimalAPI/bin/Debug/net9.0/MinimalAPI.runtimeconfig.json rename to backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.runtimeconfig.json index 6925b655..1f6a32fe 100644 --- a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.runtimeconfig.json +++ b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.runtimeconfig.json @@ -13,6 +13,7 @@ ], "configProperties": { "System.GC.Server": true, + "System.Reflection.NullabilityInfoContext.IsSupported": true, "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false } } diff --git a/MinimalAPI/bin/Debug/net9.0/MinimalAPI.staticwebassets.endpoints.json b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.staticwebassets.endpoints.json similarity index 100% rename from MinimalAPI/bin/Debug/net9.0/MinimalAPI.staticwebassets.endpoints.json rename to backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.API.staticwebassets.endpoints.json diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Application.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Application.dll new file mode 100644 index 00000000..c210c427 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Application.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Application.pdb b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Application.pdb new file mode 100644 index 00000000..14c18d01 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Application.pdb differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Core.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Core.dll new file mode 100644 index 00000000..839eb618 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Core.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Core.pdb b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Core.pdb new file mode 100644 index 00000000..c4cfadaf Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Core.pdb differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Infrastructure.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Infrastructure.dll new file mode 100644 index 00000000..2d9a765f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Infrastructure.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Infrastructure.pdb b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Infrastructure.pdb new file mode 100644 index 00000000..cac43cee Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/HardwarePerformance.Infrastructure.pdb differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Humanizer.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Humanizer.dll new file mode 100644 index 00000000..c9a7ef8a Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Humanizer.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Compression.LZ4.Streams.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Compression.LZ4.Streams.dll new file mode 100644 index 00000000..57bc9f2d Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Compression.LZ4.Streams.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Compression.LZ4.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Compression.LZ4.dll new file mode 100644 index 00000000..0711563f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Compression.LZ4.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Hash.xxHash.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Hash.xxHash.dll new file mode 100644 index 00000000..7796fb93 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/K4os.Hash.xxHash.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.AspNetCore.OpenApi.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.AspNetCore.OpenApi.dll new file mode 100644 index 00000000..24d92764 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.AspNetCore.OpenApi.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Bcl.AsyncInterfaces.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Bcl.AsyncInterfaces.dll new file mode 100644 index 00000000..f5f1ceec Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Bcl.AsyncInterfaces.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Build.Locator.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Build.Locator.dll new file mode 100644 index 00000000..446d3415 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Build.Locator.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll new file mode 100644 index 00000000..2e99f765 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.dll new file mode 100644 index 00000000..8d56de13 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll new file mode 100644 index 00000000..a17c676d Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll new file mode 100644 index 00000000..f70a016c Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.dll new file mode 100644 index 00000000..7253875b Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.Workspaces.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.dll new file mode 100644 index 00000000..7d537db6 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.CodeAnalysis.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Abstractions.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Abstractions.dll new file mode 100644 index 00000000..e5b92b54 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Abstractions.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Design.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Design.dll new file mode 100644 index 00000000..41cf45ad Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Design.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Relational.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Relational.dll new file mode 100644 index 00000000..7e313e5e Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.Relational.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.dll new file mode 100644 index 00000000..f362a04d Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.EntityFrameworkCore.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll new file mode 100644 index 00000000..6baa5411 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Extensions.DependencyModel.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Extensions.DependencyModel.dll new file mode 100644 index 00000000..e8ee78bf Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.Extensions.DependencyModel.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.OpenApi.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.OpenApi.dll new file mode 100644 index 00000000..d9f09da1 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Microsoft.OpenApi.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Mono.TextTemplating.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Mono.TextTemplating.dll new file mode 100644 index 00000000..4a765119 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Mono.TextTemplating.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/MySql.Data.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/MySql.Data.dll new file mode 100644 index 00000000..0d8a0def Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/MySql.Data.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/MySqlConnector.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/MySqlConnector.dll new file mode 100644 index 00000000..74c9e016 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/MySqlConnector.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Pipelines.Sockets.Unofficial.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Pipelines.Sockets.Unofficial.dll new file mode 100644 index 00000000..c5b223d3 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Pipelines.Sockets.Unofficial.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Pomelo.EntityFrameworkCore.MySql.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Pomelo.EntityFrameworkCore.MySql.dll new file mode 100644 index 00000000..b8355b08 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Pomelo.EntityFrameworkCore.MySql.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/StackExchange.Redis.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/StackExchange.Redis.dll new file mode 100644 index 00000000..c09634e1 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/StackExchange.Redis.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.Swagger.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.Swagger.dll new file mode 100644 index 00000000..41e2fc2f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.Swagger.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.SwaggerGen.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.SwaggerGen.dll new file mode 100644 index 00000000..de7f45da Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.SwaggerGen.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.SwaggerUI.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.SwaggerUI.dll new file mode 100644 index 00000000..117b9f3c Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/Swashbuckle.AspNetCore.SwaggerUI.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.CodeDom.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.CodeDom.dll new file mode 100644 index 00000000..54c82b66 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.CodeDom.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.AttributedModel.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.AttributedModel.dll new file mode 100644 index 00000000..14317511 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.AttributedModel.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Convention.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Convention.dll new file mode 100644 index 00000000..e9dacb14 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Convention.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Hosting.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Hosting.dll new file mode 100644 index 00000000..8381202a Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Hosting.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Runtime.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Runtime.dll new file mode 100644 index 00000000..d583c3ae Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.Runtime.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.TypedParts.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.TypedParts.dll new file mode 100644 index 00000000..2b278d7c Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Composition.TypedParts.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Configuration.ConfigurationManager.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Configuration.ConfigurationManager.dll new file mode 100644 index 00000000..accdffe1 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Configuration.ConfigurationManager.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Security.Cryptography.ProtectedData.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Security.Cryptography.ProtectedData.dll new file mode 100644 index 00000000..40f1b5a7 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Security.Cryptography.ProtectedData.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Security.Permissions.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Security.Permissions.dll new file mode 100644 index 00000000..8f01a8b9 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Security.Permissions.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Windows.Extensions.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Windows.Extensions.dll new file mode 100644 index 00000000..8a70d63e Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/System.Windows.Extensions.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ZstdSharp.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ZstdSharp.dll new file mode 100644 index 00000000..8b68efaf Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ZstdSharp.dll differ diff --git a/MinimalAPI/appsettings.Development.json b/backend/HardwarePerformance.API/bin/Debug/net9.0/appsettings.Development.json similarity index 100% rename from MinimalAPI/appsettings.Development.json rename to backend/HardwarePerformance.API/bin/Debug/net9.0/appsettings.Development.json diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/appsettings.json b/backend/HardwarePerformance.API/bin/Debug/net9.0/appsettings.json new file mode 100644 index 00000000..55f230eb --- /dev/null +++ b/backend/HardwarePerformance.API/bin/Debug/net9.0/appsettings.json @@ -0,0 +1,13 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Server=localhost;Database=HardwarePerformance;User=root;Password=123456;", + "Redis": "localhost:6379" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..4e90e209 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..8dcc1bdf Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..8ee4b4de Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..62b04226 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..180a8d9f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..4b7bae7f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..05da79f9 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..bd0bb72b Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..e1284078 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..6a98feb6 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..8e8ced10 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..970399ec Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..9e6afdd1 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..6cb47ace Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..76ddceb6 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..c41ed4c3 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..5fe6dd87 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..6eb37cb7 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..046c9530 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..368bb7bc Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..72bb9d56 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..6051d99d Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..ad0d2cd2 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..829ed5d0 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..9890df12 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..eaded8c9 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..47f3fd5e Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..28c43a13 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..203cc83b Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..208b1d93 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..895ca111 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..c712a379 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..4d5b1a35 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..4790c29c Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..05bc700a Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..eb61affd Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..ea192ccb Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..08eaeab0 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..fce2d362 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..e1420297 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..7c202091 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..be860336 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..4be51d2a Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..768264ca Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..0dc6fae0 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..85dd902f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..dfd0a6bf Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..f5e6b57a Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..cafdf215 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..ace0504d Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/comerr64.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/comerr64.dll new file mode 100644 index 00000000..0a48cb5b Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/comerr64.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/gssapi64.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/gssapi64.dll new file mode 100644 index 00000000..1628e384 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/gssapi64.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/k5sprt64.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/k5sprt64.dll new file mode 100644 index 00000000..9237ce9d Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/k5sprt64.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/krb5_64.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/krb5_64.dll new file mode 100644 index 00000000..582f680f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/krb5_64.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/krbcc64.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/krbcc64.dll new file mode 100644 index 00000000..ba5a5190 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win-x64/native/krbcc64.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win/lib/net8.0/System.Windows.Extensions.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win/lib/net8.0/System.Windows.Extensions.dll new file mode 100644 index 00000000..6e343ca2 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/runtimes/win/lib/net8.0/System.Windows.Extensions.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..9867f6fe Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..2a4742ee Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..8977db0c Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..8012969c Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..9a06288f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..e4b3c7aa Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..b51ee576 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..d1609258 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..e27e8bed Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..22b6e951 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll new file mode 100644 index 00000000..57e4d28e Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll new file mode 100644 index 00000000..305dfbf3 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll new file mode 100644 index 00000000..28a5c18a Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll new file mode 100644 index 00000000..cef3ebc6 Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll differ diff --git a/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll new file mode 100644 index 00000000..dce3bc0f Binary files /dev/null and b/backend/HardwarePerformance.API/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll differ diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.MvcApplicationPartsAssemblyInfo.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/Hardware.FE146BE6.Up2Date similarity index 100% rename from MinimalAPI/obj/Debug/net9.0/MinimalAPI.MvcApplicationPartsAssemblyInfo.cache rename to backend/HardwarePerformance.API/obj/Debug/net9.0/Hardware.FE146BE6.Up2Date diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfo.cs b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfo.cs index 4c1d89d2..dc571f9d 100644 --- a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfo.cs +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfo.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 +// This code was generated by a tool. // -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -14,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("HardwarePerformance.API")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a04b856674d8e31e95655605d640e36e54e848a")] [assembly: System.Reflection.AssemblyProductAttribute("HardwarePerformance.API")] [assembly: System.Reflection.AssemblyTitleAttribute("HardwarePerformance.API")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfoInputs.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfoInputs.cache index 3fa33545..d2a9c6b0 100644 --- a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfoInputs.cache +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.AssemblyInfoInputs.cache @@ -1 +1 @@ -c864e8af1f73ac3c0cfb752888ca009da1d159a83d0f6648240e670a9d6a467e +a98bbe73e90e8d52346416c348a6d275b7f58a7d88fc5a836e403d1cac34f6a0 diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GeneratedMSBuildEditorConfig.editorconfig b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GeneratedMSBuildEditorConfig.editorconfig index a84a047d..c7a764c9 100644 --- a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GeneratedMSBuildEditorConfig.editorconfig +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GeneratedMSBuildEditorConfig.editorconfig @@ -1,21 +1,31 @@ is_global = true build_property.TargetFramework = net9.0 +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = true +build_property.UsingMicrosoftNETSdkWeb = true +build_property.ProjectTypeGuids = build_property.ProjectTypeGuids = build_property.InvariantGlobalization = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = +build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v9.0 build_property.RootNamespace = HardwarePerformance.API build_property.RootNamespace = HardwarePerformance.API -build_property.ProjectDir = C:\work\电脑硬件-01\backend\HardwarePerformance.API\ +build_property.ProjectDir = D:\work\Demo\it\it\backend\HardwarePerformance.API\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.RazorLangVersion = 9.0 build_property.SupportLocalizedComponentNames = build_property.GenerateRazorMetadataSourceChecksumAttributes = -build_property.MSBuildProjectDirectory = C:\work\电脑硬件-01\backend\HardwarePerformance.API +build_property.MSBuildProjectDirectory = D:\work\Demo\it\it\backend\HardwarePerformance.API build_property._RazorSourceGeneratorDebug = build_property.EffectiveAnalysisLevelStyle = 9.0 build_property.EnableCodeStyleSeverity = diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GlobalUsings.g.cs b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GlobalUsings.g.cs index 025530a2..5e6145d2 100644 --- a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GlobalUsings.g.cs +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.GlobalUsings.g.cs @@ -1,17 +1,17 @@ // -global using global::Microsoft.AspNetCore.Builder; -global using global::Microsoft.AspNetCore.Hosting; -global using global::Microsoft.AspNetCore.Http; -global using global::Microsoft.AspNetCore.Routing; -global using global::Microsoft.Extensions.Configuration; -global using global::Microsoft.Extensions.DependencyInjection; -global using global::Microsoft.Extensions.Hosting; -global using global::Microsoft.Extensions.Logging; -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Net.Http.Json; -global using global::System.Threading; -global using global::System.Threading.Tasks; +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 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; diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.MvcApplicationPartsAssemblyInfo.cs b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.MvcApplicationPartsAssemblyInfo.cs new file mode 100644 index 00000000..f0cf1ff7 --- /dev/null +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.MvcApplicationPartsAssemblyInfo.cs @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Microsoft.AspNetCore.OpenApi")] +[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")] + +// 由 MSBuild WriteCodeFragment 类生成。 + diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.assets.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.assets.cache index bec9074b..340672c2 100644 Binary files a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.assets.cache and b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.assets.cache differ diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.AssemblyReference.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.AssemblyReference.cache index 3e0a808e..c134cd77 100644 Binary files a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.AssemblyReference.cache and b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.AssemblyReference.cache differ diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.CoreCompileInputs.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.CoreCompileInputs.cache index a4cff6c3..a233fac3 100644 --- a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.CoreCompileInputs.cache +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -e5921e7a1919c86641a4559f89f9c7d56174547a0006dc67be9c5fd271f1bbad +7acff186db2923166c30b9adf805a0aef45f66c08a81ba124244cdc54113c85e diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.FileListAbsolute.txt b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.FileListAbsolute.txt index 2fdc33c9..668ca82d 100644 --- a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.FileListAbsolute.txt +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.csproj.FileListAbsolute.txt @@ -5,3 +5,153 @@ C:\work\电脑硬件-01\backend\HardwarePerformance.API\obj\Debug\net9.0\Hardwar C:\work\电脑硬件-01\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.AssemblyInfo.cs C:\work\电脑硬件-01\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.csproj.CoreCompileInputs.cache C:\work\电脑硬件-01\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.MvcApplicationPartsAssemblyInfo.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.csproj.AssemblyReference.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\rpswa.dswa.cache.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.GeneratedMSBuildEditorConfig.editorconfig +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.AssemblyInfoInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.AssemblyInfo.cs +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.csproj.CoreCompileInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.MvcApplicationPartsAssemblyInfo.cs +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.MvcApplicationPartsAssemblyInfo.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\appsettings.Development.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\appsettings.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.API.staticwebassets.endpoints.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.API.exe +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.API.deps.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.API.runtimeconfig.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.API.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.API.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\BouncyCastle.Cryptography.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Google.Protobuf.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Humanizer.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\K4os.Compression.LZ4.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\K4os.Compression.LZ4.Streams.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\K4os.Hash.xxHash.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.AspNetCore.OpenApi.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.Bcl.AsyncInterfaces.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.Build.Locator.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.CodeAnalysis.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.MSBuild.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Abstractions.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Design.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Relational.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.Extensions.Caching.StackExchangeRedis.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.Extensions.DependencyModel.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Microsoft.OpenApi.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Mono.TextTemplating.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\MySql.Data.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\MySqlConnector.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Pipelines.Sockets.Unofficial.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Pomelo.EntityFrameworkCore.MySql.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\StackExchange.Redis.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Swashbuckle.AspNetCore.Swagger.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Swashbuckle.AspNetCore.SwaggerGen.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\Swashbuckle.AspNetCore.SwaggerUI.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.CodeDom.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Composition.AttributedModel.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Composition.Convention.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Composition.Hosting.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Composition.Runtime.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Composition.TypedParts.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Configuration.ConfigurationManager.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Security.Cryptography.ProtectedData.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Security.Permissions.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\System.Windows.Extensions.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ZstdSharp.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\runtimes\win-x64\native\comerr64.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\runtimes\win-x64\native\gssapi64.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\runtimes\win-x64\native\k5sprt64.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\runtimes\win-x64\native\krb5_64.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\runtimes\win-x64\native\krbcc64.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\runtimes\win\lib\net8.0\System.Windows.Extensions.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.Application.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.Core.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.Infrastructure.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.Application.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.Infrastructure.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.API\bin\Debug\net9.0\HardwarePerformance.Core.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\rjimswa.dswa.cache.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\rjsmrazor.dswa.cache.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\scopedcss\bundle\HardwarePerformance.API.styles.css +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\staticwebassets.build.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\staticwebassets.build.json.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\staticwebassets.development.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\staticwebassets.build.endpoints.json +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\swae.build.ex.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\Hardware.FE146BE6.Up2Date +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\refint\HardwarePerformance.API.dll +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\HardwarePerformance.API.genruntimeconfig.cache +D:\work\Demo\it\it\backend\HardwarePerformance.API\obj\Debug\net9.0\ref\HardwarePerformance.API.dll diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.dll b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.dll new file mode 100644 index 00000000..a26811b2 Binary files /dev/null and b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.dll differ diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.genruntimeconfig.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.genruntimeconfig.cache new file mode 100644 index 00000000..b6ebd9a8 --- /dev/null +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.genruntimeconfig.cache @@ -0,0 +1 @@ +694db21fc575462db7ff73dae796436b26a9c05b8f3354425b970aae7198b204 diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.pdb b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.pdb new file mode 100644 index 00000000..376abc5c Binary files /dev/null and b/backend/HardwarePerformance.API/obj/Debug/net9.0/HardwarePerformance.API.pdb differ diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/apphost.exe b/backend/HardwarePerformance.API/obj/Debug/net9.0/apphost.exe new file mode 100644 index 00000000..83a34f0f Binary files /dev/null and b/backend/HardwarePerformance.API/obj/Debug/net9.0/apphost.exe differ diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/ref/HardwarePerformance.API.dll b/backend/HardwarePerformance.API/obj/Debug/net9.0/ref/HardwarePerformance.API.dll new file mode 100644 index 00000000..cf1db08a Binary files /dev/null and b/backend/HardwarePerformance.API/obj/Debug/net9.0/ref/HardwarePerformance.API.dll differ diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/refint/HardwarePerformance.API.dll b/backend/HardwarePerformance.API/obj/Debug/net9.0/refint/HardwarePerformance.API.dll new file mode 100644 index 00000000..cf1db08a Binary files /dev/null and b/backend/HardwarePerformance.API/obj/Debug/net9.0/refint/HardwarePerformance.API.dll differ diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json b/backend/HardwarePerformance.API/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json new file mode 100644 index 00000000..6c00a610 --- /dev/null +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json @@ -0,0 +1 @@ +{"GlobalPropertiesHash":"BrOWxlWPn8MggOoWe2ZqRzlcfZA15Bjp2VFNK8zw5YU=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["U19PJgiZ9h\u002B0U6Kjc2sF6xnFK5eW/vL5feh2La\u002BYrqg=","AvKwjvlr0zn8EuoQ1Sw77pI/p0pMBl8pix68S3IOGvY=","FuUEKdfTSMRRQwE/Ugl1hzFiNDOMIA0LAWctogllGfg=","g4cyrNnTSX7g6YYjVGj0J/O7HeXQmSf3MG8x1PahzQ4=","HeK0vrQMt3m7mMNbjIYsRiSGDnIuIYSgU3BHzSEYMJQ="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/rjsmrazor.dswa.cache.json b/backend/HardwarePerformance.API/obj/Debug/net9.0/rjsmrazor.dswa.cache.json new file mode 100644 index 00000000..c8707b8c --- /dev/null +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/rjsmrazor.dswa.cache.json @@ -0,0 +1 @@ +{"GlobalPropertiesHash":"vokW56/saH/n8IPrLftwsR/n7vQ2/z6tMjUA+SKdGZ4=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["U19PJgiZ9h\u002B0U6Kjc2sF6xnFK5eW/vL5feh2La\u002BYrqg=","AvKwjvlr0zn8EuoQ1Sw77pI/p0pMBl8pix68S3IOGvY=","FuUEKdfTSMRRQwE/Ugl1hzFiNDOMIA0LAWctogllGfg=","g4cyrNnTSX7g6YYjVGj0J/O7HeXQmSf3MG8x1PahzQ4=","HeK0vrQMt3m7mMNbjIYsRiSGDnIuIYSgU3BHzSEYMJQ="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/rpswa.dswa.cache.json b/backend/HardwarePerformance.API/obj/Debug/net9.0/rpswa.dswa.cache.json index bf127962..156c72ff 100644 --- a/backend/HardwarePerformance.API/obj/Debug/net9.0/rpswa.dswa.cache.json +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/rpswa.dswa.cache.json @@ -1 +1 @@ -{"GlobalPropertiesHash":"iWexcF6oOYdga2d9awG8b+J7CuzlMv2HGwFcrf0LVc0=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["BX3rnoxloELJyRpTcP/qR1aocjFsd8x57atK9sOV7lw=","P2fT07pEO/tA2nDzvyPju\u002BR2V67D1LAa\u002Bk2qYNEReD4="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file +{"GlobalPropertiesHash":"JvNpt/sWLZ5GKz/IhpUlr4h0pVJHXJDmix3R4ah9UTE=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["U19PJgiZ9h\u002B0U6Kjc2sF6xnFK5eW/vL5feh2La\u002BYrqg=","AvKwjvlr0zn8EuoQ1Sw77pI/p0pMBl8pix68S3IOGvY="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/MinimalAPI/obj/Debug/net9.0/staticwebassets.build.endpoints.json b/backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.endpoints.json similarity index 100% rename from MinimalAPI/obj/Debug/net9.0/staticwebassets.build.endpoints.json rename to backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.endpoints.json diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.json b/backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.json new file mode 100644 index 00000000..ee1326db --- /dev/null +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.json @@ -0,0 +1 @@ +{"Version":1,"Hash":"i2oJg07NyShmRQ5ZTqZ1/FLHHQPmFenaxNt6PsWjCCs=","Source":"HardwarePerformance.API","BasePath":"/","Mode":"Root","ManifestType":"Build","ReferencedProjectsConfiguration":[],"DiscoveryPatterns":[],"Assets":[],"Endpoints":[]} \ No newline at end of file diff --git a/backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.json.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.json.cache new file mode 100644 index 00000000..7948abb0 --- /dev/null +++ b/backend/HardwarePerformance.API/obj/Debug/net9.0/staticwebassets.build.json.cache @@ -0,0 +1 @@ +i2oJg07NyShmRQ5ZTqZ1/FLHHQPmFenaxNt6PsWjCCs= \ No newline at end of file diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.MvcApplicationPartsAssemblyInfo.cache b/backend/HardwarePerformance.API/obj/Debug/net9.0/swae.build.ex.cache similarity index 100% rename from TestAPI/obj/Debug/net9.0/TestAPI.MvcApplicationPartsAssemblyInfo.cache rename to backend/HardwarePerformance.API/obj/Debug/net9.0/swae.build.ex.cache diff --git a/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.dgspec.json b/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.dgspec.json index 57a494ea..62f7b5f5 100644 --- a/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.dgspec.json +++ b/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.dgspec.json @@ -1,24 +1,24 @@ { "format": 1, "restore": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj": {} + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj": {} }, "projects": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", "projectName": "HardwarePerformance.API", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -26,19 +26,19 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" }, - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj" } } } @@ -53,7 +53,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -77,7 +77,7 @@ }, "StackExchange.Redis": { "target": "Package", - "version": "[2.7.10, )" + "version": "[2.7.27, )" }, "Swashbuckle.AspNetCore": { "target": "Package", @@ -95,6 +95,24 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Host.win-x64", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.AspNetCore.App": { "privateAssets": "none" @@ -103,25 +121,25 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } }, - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", "projectName": "HardwarePerformance.Application", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -129,16 +147,16 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" } } } @@ -153,7 +171,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -169,30 +187,44 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } }, - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", "projectName": "HardwarePerformance.Core", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -200,9 +232,9 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { @@ -220,7 +252,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -236,30 +268,44 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } }, - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", "projectName": "HardwarePerformance.Infrastructure", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -267,16 +313,19 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" } } } @@ -291,7 +340,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -309,6 +358,18 @@ "target": "Package", "version": "[9.0.0, )" }, + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.Logging.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, "MySql.Data": { "target": "Package", "version": "[9.0.0, )" @@ -316,6 +377,10 @@ "Pomelo.EntityFrameworkCore.MySql": { "target": "Package", "version": "[9.0.0, )" + }, + "StackExchange.Redis": { + "target": "Package", + "version": "[2.7.27, )" } }, "imports": [ @@ -329,12 +394,26 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } } diff --git a/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.props b/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.props index b085de15..44194626 100644 --- a/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.props +++ b/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.props @@ -5,12 +5,24 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + C:\Users\Administrator\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.14.0 + 7.0.0 - + + + + + + + + + + C:\Users\Administrator\.nuget\packages\microsoft.extensions.apidescription.server\6.0.5 + C:\Users\Administrator\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.4 + C:\Users\Administrator\.nuget\packages\microsoft.entityframeworkcore.tools\9.0.0 + \ No newline at end of file diff --git a/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.targets b/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.targets index 3dc06ef3..a6192610 100644 --- a/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.targets +++ b/backend/HardwarePerformance.API/obj/HardwarePerformance.API.csproj.nuget.g.targets @@ -1,2 +1,11 @@  - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/backend/HardwarePerformance.API/obj/project.assets.json b/backend/HardwarePerformance.API/obj/project.assets.json index 04c7abd6..0462cdf9 100644 --- a/backend/HardwarePerformance.API/obj/project.assets.json +++ b/backend/HardwarePerformance.API/obj/project.assets.json @@ -1,38 +1,5086 @@ { "version": 3, "targets": { - "net9.0": {} + "net9.0": { + "BouncyCastle.Cryptography/2.3.1": { + "type": "package", + "compile": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "related": ".xml" + } + } + }, + "Google.Protobuf/3.26.1": { + "type": "package", + "compile": { + "lib/net5.0/Google.Protobuf.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net5.0/Google.Protobuf.dll": { + "related": ".pdb;.xml" + } + } + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "compile": { + "lib/net6.0/Humanizer.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Humanizer.dll": { + "related": ".xml" + } + } + }, + "K4os.Compression.LZ4/1.3.8": { + "type": "package", + "compile": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "related": ".xml" + } + } + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "type": "package", + "dependencies": { + "K4os.Compression.LZ4": "1.3.8", + "K4os.Hash.xxHash": "1.0.8", + "System.IO.Pipelines": "6.0.3" + }, + "compile": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "related": ".xml" + } + } + }, + "K4os.Hash.xxHash/1.0.8": { + "type": "package", + "compile": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "related": ".xml" + } + } + }, + "Microsoft.AspNetCore.Http.Abstractions/2.2.0": { + "type": "package", + "dependencies": { + "Microsoft.AspNetCore.Http.Features": "2.2.0", + "System.Text.Encodings.Web": "4.5.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.AspNetCore.Http.Extensions/2.2.0": { + "type": "package", + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Net.Http.Headers": "2.2.0", + "System.Buffers": "4.5.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Extensions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.AspNetCore.Http.Features/2.2.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": { + "related": ".xml" + } + } + }, + "Microsoft.AspNetCore.OpenApi/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.OpenApi": "1.6.17" + }, + "compile": { + "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": { + "related": ".xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ] + }, + "Microsoft.AspNetCore.ResponseCompression/2.2.0": { + "type": "package", + "dependencies": { + "Microsoft.AspNetCore.Http.Extensions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + }, + "compile": { + "lib/netcoreapp2.1/Microsoft.AspNetCore.ResponseCompression.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.AspNetCore.ResponseCompression.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "type": "package", + "compile": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Build.Framework/17.8.3": { + "type": "package", + "compile": { + "ref/net8.0/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.Build.Locator/1.7.8": { + "type": "package", + "compile": { + "lib/net6.0/Microsoft.Build.Locator.dll": {} + }, + "runtime": { + "lib/net6.0/Microsoft.Build.Locator.dll": {} + }, + "build": { + "build/_._": {} + } + }, + "Microsoft.CodeAnalysis.Analyzers/3.3.4": { + "type": "package", + "build": { + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props": {}, + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets": {} + } + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.4", + "System.Collections.Immutable": "7.0.0", + "System.Reflection.Metadata": "7.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[4.8.0]" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "[4.8.0]", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "System.Composition": "7.0.0", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Channels": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.Build.Framework": "16.10.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]", + "System.Text.Json": "7.0.3" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "related": ".pdb;.runtimeconfig.json;.xml" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "related": ".BuildHost.pdb;.BuildHost.runtimeconfig.json;.BuildHost.xml;.pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "related": ".pdb;.runtimeconfig.json;.xml" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "related": ".BuildHost.pdb;.BuildHost.runtimeconfig.json;.BuildHost.xml;.pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "9.0.0", + "Microsoft.EntityFrameworkCore.Analyzers": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/9.0.0": { + "type": "package" + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Framework": "17.8.3", + "Microsoft.Build.Locator": "1.7.8", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0", + "Microsoft.EntityFrameworkCore.Relational": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyModel": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0", + "Mono.TextTemplating": "3.0.0", + "System.Text.Json": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "related": ".xml" + } + }, + "build": { + "build/net8.0/Microsoft.EntityFrameworkCore.Design.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Tools/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": "9.0.0" + } + }, + "Microsoft.Extensions.ApiDescription.Server/6.0.5": { + "type": "package", + "build": { + "build/Microsoft.Extensions.ApiDescription.Server.props": {}, + "build/Microsoft.Extensions.ApiDescription.Server.targets": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props": {}, + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets": {} + } + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Caching.StackExchangeRedis/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", + "StackExchange.Redis": "2.7.27" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Logging/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {} + } + }, + "Microsoft.Extensions.Options/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {} + } + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Net.Http.Headers/2.2.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0", + "System.Buffers": "4.5.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": { + "related": ".xml" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.OpenApi/1.6.17": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.OpenApi.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.OpenApi.dll": { + "related": ".pdb;.xml" + } + } + }, + "Mono.TextTemplating/3.0.0": { + "type": "package", + "dependencies": { + "System.CodeDom": "6.0.0" + }, + "compile": { + "lib/net6.0/Mono.TextTemplating.dll": {} + }, + "runtime": { + "lib/net6.0/Mono.TextTemplating.dll": {} + }, + "build": { + "buildTransitive/Mono.TextTemplating.targets": {} + } + }, + "MySql.Data/9.0.0": { + "type": "package", + "dependencies": { + "BouncyCastle.Cryptography": "2.3.1", + "Google.Protobuf": "3.26.1", + "K4os.Compression.LZ4.Streams": "1.3.8", + "System.Buffers": "4.5.1", + "System.Configuration.ConfigurationManager": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Runtime.Loader": "4.3.0", + "System.Security.Permissions": "8.0.0", + "System.Text.Encoding.CodePages": "8.0.0", + "System.Text.Json": "8.0.3", + "System.Threading.Tasks.Extensions": "4.5.4", + "ZstdSharp.Port": "0.8.0" + }, + "compile": { + "lib/net8.0/MySql.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MySql.Data.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win-x64/native/comerr64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/gssapi64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/k5sprt64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/krb5_64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/krbcc64.dll": { + "assetType": "native", + "rid": "win-x64" + } + } + }, + "MySqlConnector/2.4.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "compile": { + "lib/net9.0/MySqlConnector.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/MySqlConnector.dll": { + "related": ".xml" + } + } + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "type": "package", + "dependencies": { + "System.IO.Pipelines": "5.0.1" + }, + "compile": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "related": ".xml" + } + } + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Relational": "[9.0.0, 9.0.999]", + "MySqlConnector": "2.4.0" + }, + "compile": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "related": ".xml" + } + } + }, + "StackExchange.Redis/2.7.27": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Pipelines.Sockets.Unofficial": "2.2.8" + }, + "compile": { + "lib/net6.0/StackExchange.Redis.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/StackExchange.Redis.dll": { + "related": ".xml" + } + } + }, + "Swashbuckle.AspNetCore/6.6.2": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.ApiDescription.Server": "6.0.5", + "Swashbuckle.AspNetCore.Swagger": "6.6.2", + "Swashbuckle.AspNetCore.SwaggerGen": "6.6.2", + "Swashbuckle.AspNetCore.SwaggerUI": "6.6.2" + }, + "build": { + "build/Swashbuckle.AspNetCore.props": {} + } + }, + "Swashbuckle.AspNetCore.Swagger/6.6.2": { + "type": "package", + "dependencies": { + "Microsoft.OpenApi": "1.6.14" + }, + "compile": { + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.dll": { + "related": ".pdb;.xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ] + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.6.2": { + "type": "package", + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "6.6.2" + }, + "compile": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "related": ".pdb;.xml" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.6.2": { + "type": "package", + "compile": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "related": ".pdb;.xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ] + }, + "System.Buffers/4.5.1": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.CodeDom/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.EventLog": "8.0.0", + "System.Security.Cryptography.ProtectedData": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/8.0.1": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Diagnostics.EventLog/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { + "assetType": "runtime", + "rid": "win" + }, + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.IO.dll": { + "related": ".xml" + } + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Reflection.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Runtime.Loader/4.3.0": { + "type": "package", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.Loader.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.5/System.Runtime.Loader.dll": {} + } + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Security.Permissions/8.0.0": { + "type": "package", + "dependencies": { + "System.Windows.Extensions": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encoding.CodePages/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encodings.Web/4.5.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + } + }, + "System.Text.Json/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/System.Text.Json.targets": {} + } + }, + "System.Threading.Channels/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": { + "related": ".xml" + } + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Windows.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "ZstdSharp.Port/0.8.0": { + "type": "package", + "compile": { + "lib/net8.0/ZstdSharp.dll": {} + }, + "runtime": { + "lib/net8.0/ZstdSharp.dll": {} + } + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "dependencies": { + "HardwarePerformance.Core": "1.0.0" + }, + "compile": { + "bin/placeholder/HardwarePerformance.Application.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Application.dll": {} + } + }, + "HardwarePerformance.Core/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "compile": { + "bin/placeholder/HardwarePerformance.Core.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Core.dll": {} + } + }, + "HardwarePerformance.Infrastructure/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "dependencies": { + "HardwarePerformance.Application": "1.0.0", + "HardwarePerformance.Core": "1.0.0", + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.EntityFrameworkCore.Design": "9.0.0", + "Microsoft.EntityFrameworkCore.Tools": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "MySql.Data": "9.0.0", + "Pomelo.EntityFrameworkCore.MySql": "9.0.0", + "StackExchange.Redis": "2.7.27" + }, + "compile": { + "bin/placeholder/HardwarePerformance.Infrastructure.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Infrastructure.dll": {} + } + } + } + }, + "libraries": { + "BouncyCastle.Cryptography/2.3.1": { + "sha512": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==", + "type": "package", + "path": "bouncycastle.cryptography/2.3.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "bouncycastle.cryptography.2.3.1.nupkg.sha512", + "bouncycastle.cryptography.nuspec", + "lib/net461/BouncyCastle.Cryptography.dll", + "lib/net461/BouncyCastle.Cryptography.xml", + "lib/net6.0/BouncyCastle.Cryptography.dll", + "lib/net6.0/BouncyCastle.Cryptography.xml", + "lib/netstandard2.0/BouncyCastle.Cryptography.dll", + "lib/netstandard2.0/BouncyCastle.Cryptography.xml", + "packageIcon.png" + ] + }, + "Google.Protobuf/3.26.1": { + "sha512": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==", + "type": "package", + "path": "google.protobuf/3.26.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "google.protobuf.3.26.1.nupkg.sha512", + "google.protobuf.nuspec", + "lib/net45/Google.Protobuf.dll", + "lib/net45/Google.Protobuf.pdb", + "lib/net45/Google.Protobuf.xml", + "lib/net5.0/Google.Protobuf.dll", + "lib/net5.0/Google.Protobuf.pdb", + "lib/net5.0/Google.Protobuf.xml", + "lib/netstandard1.1/Google.Protobuf.dll", + "lib/netstandard1.1/Google.Protobuf.pdb", + "lib/netstandard1.1/Google.Protobuf.xml", + "lib/netstandard2.0/Google.Protobuf.dll", + "lib/netstandard2.0/Google.Protobuf.pdb", + "lib/netstandard2.0/Google.Protobuf.xml" + ] + }, + "Humanizer.Core/2.14.1": { + "sha512": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "type": "package", + "path": "humanizer.core/2.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "humanizer.core.2.14.1.nupkg.sha512", + "humanizer.core.nuspec", + "lib/net6.0/Humanizer.dll", + "lib/net6.0/Humanizer.xml", + "lib/netstandard1.0/Humanizer.dll", + "lib/netstandard1.0/Humanizer.xml", + "lib/netstandard2.0/Humanizer.dll", + "lib/netstandard2.0/Humanizer.xml", + "logo.png" + ] + }, + "K4os.Compression.LZ4/1.3.8": { + "sha512": "LhwlPa7c1zs1OV2XadMtAWdImjLIsqFJPoRcIWAadSRn0Ri1DepK65UbWLPmt4riLqx2d40xjXRk0ogpqNtK7g==", + "type": "package", + "path": "k4os.compression.lz4/1.3.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.compression.lz4.1.3.8.nupkg.sha512", + "k4os.compression.lz4.nuspec", + "lib/net462/K4os.Compression.LZ4.dll", + "lib/net462/K4os.Compression.LZ4.xml", + "lib/net5.0/K4os.Compression.LZ4.dll", + "lib/net5.0/K4os.Compression.LZ4.xml", + "lib/net6.0/K4os.Compression.LZ4.dll", + "lib/net6.0/K4os.Compression.LZ4.xml", + "lib/netstandard2.0/K4os.Compression.LZ4.dll", + "lib/netstandard2.0/K4os.Compression.LZ4.xml", + "lib/netstandard2.1/K4os.Compression.LZ4.dll", + "lib/netstandard2.1/K4os.Compression.LZ4.xml" + ] + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "sha512": "P15qr8dZAeo9GvYbUIPEYFQ0MEJ0i5iqr37wsYeRC3la2uCldOoeCa6to0CZ1taiwxIV+Mk8NGuZi+4iWivK9w==", + "type": "package", + "path": "k4os.compression.lz4.streams/1.3.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.compression.lz4.streams.1.3.8.nupkg.sha512", + "k4os.compression.lz4.streams.nuspec", + "lib/net462/K4os.Compression.LZ4.Streams.dll", + "lib/net462/K4os.Compression.LZ4.Streams.xml", + "lib/net5.0/K4os.Compression.LZ4.Streams.dll", + "lib/net5.0/K4os.Compression.LZ4.Streams.xml", + "lib/net6.0/K4os.Compression.LZ4.Streams.dll", + "lib/net6.0/K4os.Compression.LZ4.Streams.xml", + "lib/netstandard2.0/K4os.Compression.LZ4.Streams.dll", + "lib/netstandard2.0/K4os.Compression.LZ4.Streams.xml", + "lib/netstandard2.1/K4os.Compression.LZ4.Streams.dll", + "lib/netstandard2.1/K4os.Compression.LZ4.Streams.xml" + ] + }, + "K4os.Hash.xxHash/1.0.8": { + "sha512": "Wp2F7BamQ2Q/7Hk834nV9vRQapgcr8kgv9Jvfm8J3D0IhDqZMMl+a2yxUq5ltJitvXvQfB8W6K4F4fCbw/P6YQ==", + "type": "package", + "path": "k4os.hash.xxhash/1.0.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.hash.xxhash.1.0.8.nupkg.sha512", + "k4os.hash.xxhash.nuspec", + "lib/net462/K4os.Hash.xxHash.dll", + "lib/net462/K4os.Hash.xxHash.xml", + "lib/net5.0/K4os.Hash.xxHash.dll", + "lib/net5.0/K4os.Hash.xxHash.xml", + "lib/net6.0/K4os.Hash.xxHash.dll", + "lib/net6.0/K4os.Hash.xxHash.xml", + "lib/netstandard2.0/K4os.Hash.xxHash.dll", + "lib/netstandard2.0/K4os.Hash.xxHash.xml", + "lib/netstandard2.1/K4os.Hash.xxHash.dll", + "lib/netstandard2.1/K4os.Hash.xxHash.xml" + ] + }, + "Microsoft.AspNetCore.Http.Abstractions/2.2.0": { + "sha512": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==", + "type": "package", + "path": "microsoft.aspnetcore.http.abstractions/2.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll", + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.xml", + "microsoft.aspnetcore.http.abstractions.2.2.0.nupkg.sha512", + "microsoft.aspnetcore.http.abstractions.nuspec" + ] + }, + "Microsoft.AspNetCore.Http.Extensions/2.2.0": { + "sha512": "2DgZ9rWrJtuR7RYiew01nGRzuQBDaGHGmK56Rk54vsLLsCdzuFUPqbDTJCS1qJQWTbmbIQ9wGIOjpxA1t0l7/w==", + "type": "package", + "path": "microsoft.aspnetcore.http.extensions/2.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Extensions.dll", + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Extensions.xml", + "microsoft.aspnetcore.http.extensions.2.2.0.nupkg.sha512", + "microsoft.aspnetcore.http.extensions.nuspec" + ] + }, + "Microsoft.AspNetCore.Http.Features/2.2.0": { + "sha512": "ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==", + "type": "package", + "path": "microsoft.aspnetcore.http.features/2.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll", + "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.xml", + "microsoft.aspnetcore.http.features.2.2.0.nupkg.sha512", + "microsoft.aspnetcore.http.features.nuspec" + ] + }, + "Microsoft.AspNetCore.OpenApi/9.0.0": { + "sha512": "FqUK5j1EOPNuFT7IafltZQ3cakqhSwVzH5ZW1MhZDe4pPXs9sJ2M5jom1Omsu+mwF2tNKKlRAzLRHQTZzbd+6Q==", + "type": "package", + "path": "microsoft.aspnetcore.openapi/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll", + "lib/net9.0/Microsoft.AspNetCore.OpenApi.xml", + "microsoft.aspnetcore.openapi.9.0.0.nupkg.sha512", + "microsoft.aspnetcore.openapi.nuspec" + ] + }, + "Microsoft.AspNetCore.ResponseCompression/2.2.0": { + "sha512": "RvSstOhebIMDdRLd4iWjA6z2o2kGGwEYGPajvTXwndOA3TZpWH3FOIV4L7mehN/HoKrbTbX5vZ54ZFDwWoAFKA==", + "type": "package", + "path": "microsoft.aspnetcore.responsecompression/2.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/Microsoft.AspNetCore.ResponseCompression.dll", + "lib/net461/Microsoft.AspNetCore.ResponseCompression.xml", + "lib/netcoreapp2.1/Microsoft.AspNetCore.ResponseCompression.dll", + "lib/netcoreapp2.1/Microsoft.AspNetCore.ResponseCompression.xml", + "lib/netstandard2.0/Microsoft.AspNetCore.ResponseCompression.dll", + "lib/netstandard2.0/Microsoft.AspNetCore.ResponseCompression.xml", + "microsoft.aspnetcore.responsecompression.2.2.0.nupkg.sha512", + "microsoft.aspnetcore.responsecompression.nuspec" + ] + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "sha512": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==", + "type": "package", + "path": "microsoft.bcl.asyncinterfaces/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Bcl.AsyncInterfaces.targets", + "buildTransitive/net462/_._", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.xml", + "microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512", + "microsoft.bcl.asyncinterfaces.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Build.Framework/17.8.3": { + "sha512": "NrQZJW8TlKVPx72yltGb8SVz3P5mNRk9fNiD/ao8jRSk48WqIIdCn99q4IjlVmPcruuQ+yLdjNQLL8Rb4c916g==", + "type": "package", + "path": "microsoft.build.framework/17.8.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "README.md", + "lib/net472/Microsoft.Build.Framework.dll", + "lib/net472/Microsoft.Build.Framework.pdb", + "lib/net472/Microsoft.Build.Framework.xml", + "lib/net8.0/Microsoft.Build.Framework.dll", + "lib/net8.0/Microsoft.Build.Framework.pdb", + "lib/net8.0/Microsoft.Build.Framework.xml", + "microsoft.build.framework.17.8.3.nupkg.sha512", + "microsoft.build.framework.nuspec", + "notices/THIRDPARTYNOTICES.txt", + "ref/net472/Microsoft.Build.Framework.dll", + "ref/net472/Microsoft.Build.Framework.xml", + "ref/net8.0/Microsoft.Build.Framework.dll", + "ref/net8.0/Microsoft.Build.Framework.xml", + "ref/netstandard2.0/Microsoft.Build.Framework.dll", + "ref/netstandard2.0/Microsoft.Build.Framework.xml" + ] + }, + "Microsoft.Build.Locator/1.7.8": { + "sha512": "sPy10x527Ph16S2u0yGME4S6ohBKJ69WfjeGG/bvELYeZVmJdKjxgnlL8cJJJLGV/cZIRqSfB12UDB8ICakOog==", + "type": "package", + "path": "microsoft.build.locator/1.7.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "build/Microsoft.Build.Locator.props", + "build/Microsoft.Build.Locator.targets", + "lib/net46/Microsoft.Build.Locator.dll", + "lib/net6.0/Microsoft.Build.Locator.dll", + "microsoft.build.locator.1.7.8.nupkg.sha512", + "microsoft.build.locator.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Analyzers/3.3.4": { + "sha512": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==", + "type": "package", + "path": "microsoft.codeanalysis.analyzers/3.3.4", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.txt", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll", + "analyzers/dotnet/cs/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll", + "analyzers/dotnet/vb/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets", + "buildTransitive/config/analysislevel_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_all.globalconfig", + "buildTransitive/config/analysislevel_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_default.globalconfig", + "buildTransitive/config/analysislevel_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_none.globalconfig", + "buildTransitive/config/analysislevel_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended_warnaserror.globalconfig", + "documentation/Analyzer Configuration.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.sarif", + "editorconfig/AllRulesDefault/.editorconfig", + "editorconfig/AllRulesDisabled/.editorconfig", + "editorconfig/AllRulesEnabled/.editorconfig", + "editorconfig/CorrectnessRulesDefault/.editorconfig", + "editorconfig/CorrectnessRulesEnabled/.editorconfig", + "editorconfig/DataflowRulesDefault/.editorconfig", + "editorconfig/DataflowRulesEnabled/.editorconfig", + "editorconfig/LibraryRulesDefault/.editorconfig", + "editorconfig/LibraryRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled/.editorconfig", + "editorconfig/PortedFromFxCopRulesDefault/.editorconfig", + "editorconfig/PortedFromFxCopRulesEnabled/.editorconfig", + "microsoft.codeanalysis.analyzers.3.3.4.nupkg.sha512", + "microsoft.codeanalysis.analyzers.nuspec", + "rulesets/AllRulesDefault.ruleset", + "rulesets/AllRulesDisabled.ruleset", + "rulesets/AllRulesEnabled.ruleset", + "rulesets/CorrectnessRulesDefault.ruleset", + "rulesets/CorrectnessRulesEnabled.ruleset", + "rulesets/DataflowRulesDefault.ruleset", + "rulesets/DataflowRulesEnabled.ruleset", + "rulesets/LibraryRulesDefault.ruleset", + "rulesets/LibraryRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled.ruleset", + "rulesets/PortedFromFxCopRulesDefault.ruleset", + "rulesets/PortedFromFxCopRulesEnabled.ruleset", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "sha512": "/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "type": "package", + "path": "microsoft.codeanalysis.common/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.dll", + "lib/net6.0/Microsoft.CodeAnalysis.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.dll", + "lib/net7.0/Microsoft.CodeAnalysis.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "microsoft.codeanalysis.common.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "sha512": "+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "type": "package", + "path": "microsoft.codeanalysis.csharp/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "sha512": "3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "type": "package", + "path": "microsoft.codeanalysis.csharp.workspaces/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.workspaces.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "sha512": "LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.common/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "sha512": "IEYreI82QZKklp54yPHxZNG9EKSK6nHEkeuf+0Asie9llgS1gp0V1hw7ODG+QyoB7MuAnNQHmeV1Per/ECpv6A==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.msbuild/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.exe", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net472/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.runtimeconfig.json", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.runtimeconfig.json", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.msbuild.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "sha512": "wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==", + "type": "package", + "path": "microsoft.entityframeworkcore/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props", + "lib/net8.0/Microsoft.EntityFrameworkCore.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.xml", + "microsoft.entityframeworkcore.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "sha512": "fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==", + "type": "package", + "path": "microsoft.entityframeworkcore.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.xml", + "microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.abstractions.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Analyzers/9.0.0": { + "sha512": "Qje+DzXJOKiXF72SL0XxNlDtTkvWWvmwknuZtFahY5hIQpRKO59qnGuERIQ3qlzuq5x4bAJ8WMbgU5DLhBgeOQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.analyzers/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.analyzers.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.analyzers.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "sha512": "Pqo8I+yHJ3VQrAoY0hiSncf+5P7gN/RkNilK5e+/K/yKh+yAWxdUAI6t0TG26a9VPlCa9FhyklzyFvRyj3YG9A==", + "type": "package", + "path": "microsoft.entityframeworkcore.design/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "build/net8.0/Microsoft.EntityFrameworkCore.Design.props", + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.xml", + "microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.design.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "sha512": "j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==", + "type": "package", + "path": "microsoft.entityframeworkcore.relational/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.xml", + "microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.relational.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Tools/9.0.0": { + "sha512": "qjw+3/CaWiWnyVblvKHY11rQKH5eHQDSbtxjgxVhxGJrOpmjZ3JxtD0pjwkr4y/ELubsXr6xDfBcRJSkX/9hWQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.tools/9.0.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.tools.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.tools.nuspec", + "tools/EntityFrameworkCore.PS2.psd1", + "tools/EntityFrameworkCore.PS2.psm1", + "tools/EntityFrameworkCore.psd1", + "tools/EntityFrameworkCore.psm1", + "tools/about_EntityFrameworkCore.help.txt", + "tools/init.ps1", + "tools/net472/any/ef.exe", + "tools/net472/win-arm64/ef.exe", + "tools/net472/win-x86/ef.exe", + "tools/netcoreapp2.0/any/ef.dll", + "tools/netcoreapp2.0/any/ef.runtimeconfig.json" + ] + }, + "Microsoft.Extensions.ApiDescription.Server/6.0.5": { + "sha512": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==", + "type": "package", + "path": "microsoft.extensions.apidescription.server/6.0.5", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "build/Microsoft.Extensions.ApiDescription.Server.props", + "build/Microsoft.Extensions.ApiDescription.Server.targets", + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props", + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets", + "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512", + "microsoft.extensions.apidescription.server.nuspec", + "tools/Newtonsoft.Json.dll", + "tools/dotnet-getdocument.deps.json", + "tools/dotnet-getdocument.dll", + "tools/dotnet-getdocument.runtimeconfig.json", + "tools/net461-x86/GetDocument.Insider.exe", + "tools/net461-x86/GetDocument.Insider.exe.config", + "tools/net461-x86/Microsoft.Win32.Primitives.dll", + "tools/net461-x86/System.AppContext.dll", + "tools/net461-x86/System.Buffers.dll", + "tools/net461-x86/System.Collections.Concurrent.dll", + "tools/net461-x86/System.Collections.NonGeneric.dll", + "tools/net461-x86/System.Collections.Specialized.dll", + "tools/net461-x86/System.Collections.dll", + "tools/net461-x86/System.ComponentModel.EventBasedAsync.dll", + "tools/net461-x86/System.ComponentModel.Primitives.dll", + "tools/net461-x86/System.ComponentModel.TypeConverter.dll", + "tools/net461-x86/System.ComponentModel.dll", + "tools/net461-x86/System.Console.dll", + "tools/net461-x86/System.Data.Common.dll", + "tools/net461-x86/System.Diagnostics.Contracts.dll", + "tools/net461-x86/System.Diagnostics.Debug.dll", + "tools/net461-x86/System.Diagnostics.DiagnosticSource.dll", + "tools/net461-x86/System.Diagnostics.FileVersionInfo.dll", + "tools/net461-x86/System.Diagnostics.Process.dll", + "tools/net461-x86/System.Diagnostics.StackTrace.dll", + "tools/net461-x86/System.Diagnostics.TextWriterTraceListener.dll", + "tools/net461-x86/System.Diagnostics.Tools.dll", + "tools/net461-x86/System.Diagnostics.TraceSource.dll", + "tools/net461-x86/System.Diagnostics.Tracing.dll", + "tools/net461-x86/System.Drawing.Primitives.dll", + "tools/net461-x86/System.Dynamic.Runtime.dll", + "tools/net461-x86/System.Globalization.Calendars.dll", + "tools/net461-x86/System.Globalization.Extensions.dll", + "tools/net461-x86/System.Globalization.dll", + "tools/net461-x86/System.IO.Compression.ZipFile.dll", + "tools/net461-x86/System.IO.Compression.dll", + "tools/net461-x86/System.IO.FileSystem.DriveInfo.dll", + "tools/net461-x86/System.IO.FileSystem.Primitives.dll", + "tools/net461-x86/System.IO.FileSystem.Watcher.dll", + "tools/net461-x86/System.IO.FileSystem.dll", + "tools/net461-x86/System.IO.IsolatedStorage.dll", + "tools/net461-x86/System.IO.MemoryMappedFiles.dll", + "tools/net461-x86/System.IO.Pipes.dll", + "tools/net461-x86/System.IO.UnmanagedMemoryStream.dll", + "tools/net461-x86/System.IO.dll", + "tools/net461-x86/System.Linq.Expressions.dll", + "tools/net461-x86/System.Linq.Parallel.dll", + "tools/net461-x86/System.Linq.Queryable.dll", + "tools/net461-x86/System.Linq.dll", + "tools/net461-x86/System.Memory.dll", + "tools/net461-x86/System.Net.Http.dll", + "tools/net461-x86/System.Net.NameResolution.dll", + "tools/net461-x86/System.Net.NetworkInformation.dll", + "tools/net461-x86/System.Net.Ping.dll", + "tools/net461-x86/System.Net.Primitives.dll", + "tools/net461-x86/System.Net.Requests.dll", + "tools/net461-x86/System.Net.Security.dll", + "tools/net461-x86/System.Net.Sockets.dll", + "tools/net461-x86/System.Net.WebHeaderCollection.dll", + "tools/net461-x86/System.Net.WebSockets.Client.dll", + "tools/net461-x86/System.Net.WebSockets.dll", + "tools/net461-x86/System.Numerics.Vectors.dll", + "tools/net461-x86/System.ObjectModel.dll", + "tools/net461-x86/System.Reflection.Extensions.dll", + "tools/net461-x86/System.Reflection.Primitives.dll", + "tools/net461-x86/System.Reflection.dll", + "tools/net461-x86/System.Resources.Reader.dll", + "tools/net461-x86/System.Resources.ResourceManager.dll", + "tools/net461-x86/System.Resources.Writer.dll", + "tools/net461-x86/System.Runtime.CompilerServices.Unsafe.dll", + "tools/net461-x86/System.Runtime.CompilerServices.VisualC.dll", + "tools/net461-x86/System.Runtime.Extensions.dll", + "tools/net461-x86/System.Runtime.Handles.dll", + "tools/net461-x86/System.Runtime.InteropServices.RuntimeInformation.dll", + "tools/net461-x86/System.Runtime.InteropServices.dll", + "tools/net461-x86/System.Runtime.Numerics.dll", + "tools/net461-x86/System.Runtime.Serialization.Formatters.dll", + "tools/net461-x86/System.Runtime.Serialization.Json.dll", + "tools/net461-x86/System.Runtime.Serialization.Primitives.dll", + "tools/net461-x86/System.Runtime.Serialization.Xml.dll", + "tools/net461-x86/System.Runtime.dll", + "tools/net461-x86/System.Security.Claims.dll", + "tools/net461-x86/System.Security.Cryptography.Algorithms.dll", + "tools/net461-x86/System.Security.Cryptography.Csp.dll", + "tools/net461-x86/System.Security.Cryptography.Encoding.dll", + "tools/net461-x86/System.Security.Cryptography.Primitives.dll", + "tools/net461-x86/System.Security.Cryptography.X509Certificates.dll", + "tools/net461-x86/System.Security.Principal.dll", + "tools/net461-x86/System.Security.SecureString.dll", + "tools/net461-x86/System.Text.Encoding.Extensions.dll", + "tools/net461-x86/System.Text.Encoding.dll", + "tools/net461-x86/System.Text.RegularExpressions.dll", + "tools/net461-x86/System.Threading.Overlapped.dll", + "tools/net461-x86/System.Threading.Tasks.Parallel.dll", + "tools/net461-x86/System.Threading.Tasks.dll", + "tools/net461-x86/System.Threading.Thread.dll", + "tools/net461-x86/System.Threading.ThreadPool.dll", + "tools/net461-x86/System.Threading.Timer.dll", + "tools/net461-x86/System.Threading.dll", + "tools/net461-x86/System.ValueTuple.dll", + "tools/net461-x86/System.Xml.ReaderWriter.dll", + "tools/net461-x86/System.Xml.XDocument.dll", + "tools/net461-x86/System.Xml.XPath.XDocument.dll", + "tools/net461-x86/System.Xml.XPath.dll", + "tools/net461-x86/System.Xml.XmlDocument.dll", + "tools/net461-x86/System.Xml.XmlSerializer.dll", + "tools/net461-x86/netstandard.dll", + "tools/net461/GetDocument.Insider.exe", + "tools/net461/GetDocument.Insider.exe.config", + "tools/net461/Microsoft.Win32.Primitives.dll", + "tools/net461/System.AppContext.dll", + "tools/net461/System.Buffers.dll", + "tools/net461/System.Collections.Concurrent.dll", + "tools/net461/System.Collections.NonGeneric.dll", + "tools/net461/System.Collections.Specialized.dll", + "tools/net461/System.Collections.dll", + "tools/net461/System.ComponentModel.EventBasedAsync.dll", + "tools/net461/System.ComponentModel.Primitives.dll", + "tools/net461/System.ComponentModel.TypeConverter.dll", + "tools/net461/System.ComponentModel.dll", + "tools/net461/System.Console.dll", + "tools/net461/System.Data.Common.dll", + "tools/net461/System.Diagnostics.Contracts.dll", + "tools/net461/System.Diagnostics.Debug.dll", + "tools/net461/System.Diagnostics.DiagnosticSource.dll", + "tools/net461/System.Diagnostics.FileVersionInfo.dll", + "tools/net461/System.Diagnostics.Process.dll", + "tools/net461/System.Diagnostics.StackTrace.dll", + "tools/net461/System.Diagnostics.TextWriterTraceListener.dll", + "tools/net461/System.Diagnostics.Tools.dll", + "tools/net461/System.Diagnostics.TraceSource.dll", + "tools/net461/System.Diagnostics.Tracing.dll", + "tools/net461/System.Drawing.Primitives.dll", + "tools/net461/System.Dynamic.Runtime.dll", + "tools/net461/System.Globalization.Calendars.dll", + "tools/net461/System.Globalization.Extensions.dll", + "tools/net461/System.Globalization.dll", + "tools/net461/System.IO.Compression.ZipFile.dll", + "tools/net461/System.IO.Compression.dll", + "tools/net461/System.IO.FileSystem.DriveInfo.dll", + "tools/net461/System.IO.FileSystem.Primitives.dll", + "tools/net461/System.IO.FileSystem.Watcher.dll", + "tools/net461/System.IO.FileSystem.dll", + "tools/net461/System.IO.IsolatedStorage.dll", + "tools/net461/System.IO.MemoryMappedFiles.dll", + "tools/net461/System.IO.Pipes.dll", + "tools/net461/System.IO.UnmanagedMemoryStream.dll", + "tools/net461/System.IO.dll", + "tools/net461/System.Linq.Expressions.dll", + "tools/net461/System.Linq.Parallel.dll", + "tools/net461/System.Linq.Queryable.dll", + "tools/net461/System.Linq.dll", + "tools/net461/System.Memory.dll", + "tools/net461/System.Net.Http.dll", + "tools/net461/System.Net.NameResolution.dll", + "tools/net461/System.Net.NetworkInformation.dll", + "tools/net461/System.Net.Ping.dll", + "tools/net461/System.Net.Primitives.dll", + "tools/net461/System.Net.Requests.dll", + "tools/net461/System.Net.Security.dll", + "tools/net461/System.Net.Sockets.dll", + "tools/net461/System.Net.WebHeaderCollection.dll", + "tools/net461/System.Net.WebSockets.Client.dll", + "tools/net461/System.Net.WebSockets.dll", + "tools/net461/System.Numerics.Vectors.dll", + "tools/net461/System.ObjectModel.dll", + "tools/net461/System.Reflection.Extensions.dll", + "tools/net461/System.Reflection.Primitives.dll", + "tools/net461/System.Reflection.dll", + "tools/net461/System.Resources.Reader.dll", + "tools/net461/System.Resources.ResourceManager.dll", + "tools/net461/System.Resources.Writer.dll", + "tools/net461/System.Runtime.CompilerServices.Unsafe.dll", + "tools/net461/System.Runtime.CompilerServices.VisualC.dll", + "tools/net461/System.Runtime.Extensions.dll", + "tools/net461/System.Runtime.Handles.dll", + "tools/net461/System.Runtime.InteropServices.RuntimeInformation.dll", + "tools/net461/System.Runtime.InteropServices.dll", + "tools/net461/System.Runtime.Numerics.dll", + "tools/net461/System.Runtime.Serialization.Formatters.dll", + "tools/net461/System.Runtime.Serialization.Json.dll", + "tools/net461/System.Runtime.Serialization.Primitives.dll", + "tools/net461/System.Runtime.Serialization.Xml.dll", + "tools/net461/System.Runtime.dll", + "tools/net461/System.Security.Claims.dll", + "tools/net461/System.Security.Cryptography.Algorithms.dll", + "tools/net461/System.Security.Cryptography.Csp.dll", + "tools/net461/System.Security.Cryptography.Encoding.dll", + "tools/net461/System.Security.Cryptography.Primitives.dll", + "tools/net461/System.Security.Cryptography.X509Certificates.dll", + "tools/net461/System.Security.Principal.dll", + "tools/net461/System.Security.SecureString.dll", + "tools/net461/System.Text.Encoding.Extensions.dll", + "tools/net461/System.Text.Encoding.dll", + "tools/net461/System.Text.RegularExpressions.dll", + "tools/net461/System.Threading.Overlapped.dll", + "tools/net461/System.Threading.Tasks.Parallel.dll", + "tools/net461/System.Threading.Tasks.dll", + "tools/net461/System.Threading.Thread.dll", + "tools/net461/System.Threading.ThreadPool.dll", + "tools/net461/System.Threading.Timer.dll", + "tools/net461/System.Threading.dll", + "tools/net461/System.ValueTuple.dll", + "tools/net461/System.Xml.ReaderWriter.dll", + "tools/net461/System.Xml.XDocument.dll", + "tools/net461/System.Xml.XPath.XDocument.dll", + "tools/net461/System.Xml.XPath.dll", + "tools/net461/System.Xml.XmlDocument.dll", + "tools/net461/System.Xml.XmlSerializer.dll", + "tools/net461/netstandard.dll", + "tools/netcoreapp2.1/GetDocument.Insider.deps.json", + "tools/netcoreapp2.1/GetDocument.Insider.dll", + "tools/netcoreapp2.1/GetDocument.Insider.runtimeconfig.json", + "tools/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll" + ] + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "sha512": "FPWZAa9c0H4dvOj351iR1jkUIs4u9ykL4Bm592yhjDyO5lCoWd+TMAHx2EMbarzUvCvgjWjJIoC6//Q9kH6YhA==", + "type": "package", + "path": "microsoft.extensions.caching.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml", + "microsoft.extensions.caching.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.caching.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "sha512": "zbnPX/JQ0pETRSUG9fNPBvpIq42Aufvs15gGYyNIMhCun9yhmWihz0WgsI7bSDPjxWTKBf8oX/zv6v2uZ3W9OQ==", + "type": "package", + "path": "microsoft.extensions.caching.memory/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Memory.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Memory.targets", + "lib/net462/Microsoft.Extensions.Caching.Memory.dll", + "lib/net462/Microsoft.Extensions.Caching.Memory.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml", + "microsoft.extensions.caching.memory.9.0.0.nupkg.sha512", + "microsoft.extensions.caching.memory.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Caching.StackExchangeRedis/9.0.0": { + "sha512": "sxxJa+S6++s+J7tipY1DjdhAIO279hAOItCMKnpeEOXrU4SNqcjKNjemssgSJ1uMN5rgbuv52CzMf7UWnLYgiw==", + "type": "package", + "path": "microsoft.extensions.caching.stackexchangeredis/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "lib/net462/Microsoft.Extensions.Caching.StackExchangeRedis.dll", + "lib/net462/Microsoft.Extensions.Caching.StackExchangeRedis.xml", + "lib/net8.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll", + "lib/net8.0/Microsoft.Extensions.Caching.StackExchangeRedis.xml", + "lib/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll", + "lib/net9.0/Microsoft.Extensions.Caching.StackExchangeRedis.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.StackExchangeRedis.xml", + "microsoft.extensions.caching.stackexchangeredis.9.0.0.nupkg.sha512", + "microsoft.extensions.caching.stackexchangeredis.nuspec" + ] + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "sha512": "lqvd7W3FGKUO1+ZoUEMaZ5XDJeWvjpy2/M/ptCGz3tXLD4HWVaSzjufsAsjemasBEg+2SxXVtYVvGt5r2nKDlg==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "sha512": "MCPrg7v3QgNMr0vX4vzRXvkNGgLg8vKWX0nKCWUxu2uPyMsaRgiRc1tHBnbTcfJMhMKj2slE/j2M9oGkd25DNw==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", + "microsoft.extensions.dependencyinjection.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "sha512": "+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "sha512": "saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==", + "type": "package", + "path": "microsoft.extensions.dependencymodel/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyModel.targets", + "lib/net462/Microsoft.Extensions.DependencyModel.dll", + "lib/net462/Microsoft.Extensions.DependencyModel.xml", + "lib/net8.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net8.0/Microsoft.Extensions.DependencyModel.xml", + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net9.0/Microsoft.Extensions.DependencyModel.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.xml", + "microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencymodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": { + "sha512": "EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==", + "type": "package", + "path": "microsoft.extensions.fileproviders.abstractions/2.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "microsoft.extensions.fileproviders.abstractions.2.2.0.nupkg.sha512", + "microsoft.extensions.fileproviders.abstractions.nuspec" + ] + }, + "Microsoft.Extensions.Logging/9.0.0": { + "sha512": "crjWyORoug0kK7RSNJBTeSE6VX8IQgLf3nUpTB9m62bPXp/tzbnOsnbe8TXEG0AASNaKZddnpHKw7fET8E++Pg==", + "type": "package", + "path": "microsoft.extensions.logging/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.targets", + "lib/net462/Microsoft.Extensions.Logging.dll", + "lib/net462/Microsoft.Extensions.Logging.xml", + "lib/net8.0/Microsoft.Extensions.Logging.dll", + "lib/net8.0/Microsoft.Extensions.Logging.xml", + "lib/net9.0/Microsoft.Extensions.Logging.dll", + "lib/net9.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", + "microsoft.extensions.logging.9.0.0.nupkg.sha512", + "microsoft.extensions.logging.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "sha512": "g0UfujELzlLbHoVG8kPKVBaW470Ewi+jnptGS9KUi6jcb+k2StujtK3m26DFSGGwQ/+bVgZfsWqNzlP6YOejvw==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options/9.0.0": { + "sha512": "y2146b3jrPI3Q0lokKXdKLpmXqakYbDIPDV6r3M8SqvSf45WwOTzkyfDpxnZXJsJQEpAsAqjUq5Pu8RCJMjubg==", + "type": "package", + "path": "microsoft.extensions.options/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Options.targets", + "buildTransitive/net462/Microsoft.Extensions.Options.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Options.targets", + "lib/net462/Microsoft.Extensions.Options.dll", + "lib/net462/Microsoft.Extensions.Options.xml", + "lib/net8.0/Microsoft.Extensions.Options.dll", + "lib/net8.0/Microsoft.Extensions.Options.xml", + "lib/net9.0/Microsoft.Extensions.Options.dll", + "lib/net9.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.1/Microsoft.Extensions.Options.dll", + "lib/netstandard2.1/Microsoft.Extensions.Options.xml", + "microsoft.extensions.options.9.0.0.nupkg.sha512", + "microsoft.extensions.options.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "sha512": "N3qEBzmLMYiASUlKxxFIISP4AiwuPTHF5uCh+2CWSwwzAJiIYx0kBJsS30cp1nvhSySFAVi30jecD307jV+8Kg==", + "type": "package", + "path": "microsoft.extensions.primitives/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net8.0/Microsoft.Extensions.Primitives.dll", + "lib/net8.0/Microsoft.Extensions.Primitives.xml", + "lib/net9.0/Microsoft.Extensions.Primitives.dll", + "lib/net9.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.9.0.0.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Net.Http.Headers/2.2.0": { + "sha512": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==", + "type": "package", + "path": "microsoft.net.http.headers/2.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/Microsoft.Net.Http.Headers.dll", + "lib/netstandard2.0/Microsoft.Net.Http.Headers.xml", + "microsoft.net.http.headers.2.2.0.nupkg.sha512", + "microsoft.net.http.headers.nuspec" + ] + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Microsoft.OpenApi/1.6.17": { + "sha512": "Le+kehlmrlQfuDFUt1zZ2dVwrhFQtKREdKBo+rexOwaCoYP0/qpgT9tLxCsZjsgR5Itk1UKPcbgO+FyaNid/bA==", + "type": "package", + "path": "microsoft.openapi/1.6.17", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/netstandard2.0/Microsoft.OpenApi.dll", + "lib/netstandard2.0/Microsoft.OpenApi.pdb", + "lib/netstandard2.0/Microsoft.OpenApi.xml", + "microsoft.openapi.1.6.17.nupkg.sha512", + "microsoft.openapi.nuspec" + ] + }, + "Mono.TextTemplating/3.0.0": { + "sha512": "YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==", + "type": "package", + "path": "mono.texttemplating/3.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt/LICENSE", + "buildTransitive/Mono.TextTemplating.targets", + "lib/net472/Mono.TextTemplating.dll", + "lib/net6.0/Mono.TextTemplating.dll", + "lib/netstandard2.0/Mono.TextTemplating.dll", + "mono.texttemplating.3.0.0.nupkg.sha512", + "mono.texttemplating.nuspec", + "readme.md" + ] + }, + "MySql.Data/9.0.0": { + "sha512": "YT2/fdDy3FBx5ZK0qsupEs9Gt0iFo/mZR+ND5cJwrr+6xguAOXyYpYUbEj27UcLZER5InOUrJQYyUaPIDil2Xw==", + "type": "package", + "path": "mysql.data/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net462/MySql.Data.dll", + "lib/net462/MySql.Data.xml", + "lib/net48/MySql.Data.dll", + "lib/net48/MySql.Data.xml", + "lib/net6.0/MySql.Data.dll", + "lib/net6.0/MySql.Data.xml", + "lib/net8.0/MySql.Data.dll", + "lib/net8.0/MySql.Data.xml", + "lib/netstandard2.0/MySql.Data.dll", + "lib/netstandard2.0/MySql.Data.xml", + "lib/netstandard2.1/MySql.Data.dll", + "lib/netstandard2.1/MySql.Data.xml", + "logo-mysql-170x115.png", + "mysql.data.9.0.0.nupkg.sha512", + "mysql.data.nuspec", + "runtimes/win-x64/native/comerr64.dll", + "runtimes/win-x64/native/gssapi64.dll", + "runtimes/win-x64/native/k5sprt64.dll", + "runtimes/win-x64/native/krb5_64.dll", + "runtimes/win-x64/native/krbcc64.dll" + ] + }, + "MySqlConnector/2.4.0": { + "sha512": "78M+gVOjbdZEDIyXQqcA7EYlCGS3tpbUELHvn6638A2w0pkPI625ixnzsa5staAd3N9/xFmPJtkKDYwsXpFi/w==", + "type": "package", + "path": "mysqlconnector/2.4.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net462/MySqlConnector.dll", + "lib/net462/MySqlConnector.xml", + "lib/net471/MySqlConnector.dll", + "lib/net471/MySqlConnector.xml", + "lib/net48/MySqlConnector.dll", + "lib/net48/MySqlConnector.xml", + "lib/net6.0/MySqlConnector.dll", + "lib/net6.0/MySqlConnector.xml", + "lib/net8.0/MySqlConnector.dll", + "lib/net8.0/MySqlConnector.xml", + "lib/net9.0/MySqlConnector.dll", + "lib/net9.0/MySqlConnector.xml", + "lib/netstandard2.0/MySqlConnector.dll", + "lib/netstandard2.0/MySqlConnector.xml", + "lib/netstandard2.1/MySqlConnector.dll", + "lib/netstandard2.1/MySqlConnector.xml", + "logo.png", + "mysqlconnector.2.4.0.nupkg.sha512", + "mysqlconnector.nuspec" + ] + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "sha512": "zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==", + "type": "package", + "path": "pipelines.sockets.unofficial/2.2.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/Pipelines.Sockets.Unofficial.dll", + "lib/net461/Pipelines.Sockets.Unofficial.xml", + "lib/net472/Pipelines.Sockets.Unofficial.dll", + "lib/net472/Pipelines.Sockets.Unofficial.xml", + "lib/net5.0/Pipelines.Sockets.Unofficial.dll", + "lib/net5.0/Pipelines.Sockets.Unofficial.xml", + "lib/netcoreapp3.1/Pipelines.Sockets.Unofficial.dll", + "lib/netcoreapp3.1/Pipelines.Sockets.Unofficial.xml", + "lib/netstandard2.0/Pipelines.Sockets.Unofficial.dll", + "lib/netstandard2.0/Pipelines.Sockets.Unofficial.xml", + "lib/netstandard2.1/Pipelines.Sockets.Unofficial.dll", + "lib/netstandard2.1/Pipelines.Sockets.Unofficial.xml", + "pipelines.sockets.unofficial.2.2.8.nupkg.sha512", + "pipelines.sockets.unofficial.nuspec" + ] + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "sha512": "cl7S4s6CbJno0LjNxrBHNc2xxmCliR5i40ATPZk/eTywVaAbHCbdc9vbGc3QThvwGjHqrDHT8vY9m1VF/47o0g==", + "type": "package", + "path": "pomelo.entityframeworkcore.mysql/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "icon.png", + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll", + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.xml", + "pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512", + "pomelo.entityframeworkcore.mysql.nuspec" + ] + }, + "StackExchange.Redis/2.7.27": { + "sha512": "Uqc2OQHglqj9/FfGQ6RkKFkZfHySfZlfmbCl+hc+u2I/IqunfelQ7QJi7ZhvAJxUtu80pildVX6NPLdDaUffOw==", + "type": "package", + "path": "stackexchange.redis/2.7.27", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/StackExchange.Redis.dll", + "lib/net461/StackExchange.Redis.xml", + "lib/net472/StackExchange.Redis.dll", + "lib/net472/StackExchange.Redis.xml", + "lib/net6.0/StackExchange.Redis.dll", + "lib/net6.0/StackExchange.Redis.xml", + "lib/netcoreapp3.1/StackExchange.Redis.dll", + "lib/netcoreapp3.1/StackExchange.Redis.xml", + "lib/netstandard2.0/StackExchange.Redis.dll", + "lib/netstandard2.0/StackExchange.Redis.xml", + "stackexchange.redis.2.7.27.nupkg.sha512", + "stackexchange.redis.nuspec" + ] + }, + "Swashbuckle.AspNetCore/6.6.2": { + "sha512": "+NB4UYVYN6AhDSjW0IJAd1AGD8V33gemFNLPaxKTtPkHB+HaKAKf9MGAEUPivEWvqeQfcKIw8lJaHq6LHljRuw==", + "type": "package", + "path": "swashbuckle.aspnetcore/6.6.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/Swashbuckle.AspNetCore.props", + "swashbuckle.aspnetcore.6.6.2.nupkg.sha512", + "swashbuckle.aspnetcore.nuspec" + ] + }, + "Swashbuckle.AspNetCore.Swagger/6.6.2": { + "sha512": "ovgPTSYX83UrQUWiS5vzDcJ8TEX1MAxBgDFMK45rC24MorHEPQlZAHlaXj/yth4Zf6xcktpUgTEBvffRQVwDKA==", + "type": "package", + "path": "swashbuckle.aspnetcore.swagger/6.6.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net5.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/net5.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/net5.0/Swashbuckle.AspNetCore.Swagger.xml", + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.xml", + "lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/net7.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/net7.0/Swashbuckle.AspNetCore.Swagger.xml", + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.xml", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.xml", + "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.xml", + "package-readme.md", + "swashbuckle.aspnetcore.swagger.6.6.2.nupkg.sha512", + "swashbuckle.aspnetcore.swagger.nuspec" + ] + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.6.2": { + "sha512": "zv4ikn4AT1VYuOsDCpktLq4QDq08e7Utzbir86M5/ZkRaLXbCPF11E1/vTmOiDzRTl0zTZINQU2qLKwTcHgfrA==", + "type": "package", + "path": "swashbuckle.aspnetcore.swaggergen/6.6.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "package-readme.md", + "swashbuckle.aspnetcore.swaggergen.6.6.2.nupkg.sha512", + "swashbuckle.aspnetcore.swaggergen.nuspec" + ] + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.6.2": { + "sha512": "mBBb+/8Hm2Q3Wygag+hu2jj69tZW5psuv0vMRXY07Wy+Rrj40vRP8ZTbKBhs91r45/HXT4aY4z0iSBYx1h6JvA==", + "type": "package", + "path": "swashbuckle.aspnetcore.swaggerui/6.6.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "package-readme.md", + "swashbuckle.aspnetcore.swaggerui.6.6.2.nupkg.sha512", + "swashbuckle.aspnetcore.swaggerui.nuspec" + ] + }, + "System.Buffers/4.5.1": { + "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "type": "package", + "path": "system.buffers/4.5.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Buffers.dll", + "lib/net461/System.Buffers.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Buffers.dll", + "lib/netstandard1.1/System.Buffers.xml", + "lib/netstandard2.0/System.Buffers.dll", + "lib/netstandard2.0/System.Buffers.xml", + "lib/uap10.0.16299/_._", + "ref/net45/System.Buffers.dll", + "ref/net45/System.Buffers.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Buffers.dll", + "ref/netstandard1.1/System.Buffers.xml", + "ref/netstandard2.0/System.Buffers.dll", + "ref/netstandard2.0/System.Buffers.xml", + "ref/uap10.0.16299/_._", + "system.buffers.4.5.1.nupkg.sha512", + "system.buffers.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.CodeDom/6.0.0": { + "sha512": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==", + "type": "package", + "path": "system.codedom/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.CodeDom.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.CodeDom.dll", + "lib/net461/System.CodeDom.xml", + "lib/net6.0/System.CodeDom.dll", + "lib/net6.0/System.CodeDom.xml", + "lib/netstandard2.0/System.CodeDom.dll", + "lib/netstandard2.0/System.CodeDom.xml", + "system.codedom.6.0.0.nupkg.sha512", + "system.codedom.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Collections.Immutable/7.0.0": { + "sha512": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==", + "type": "package", + "path": "system.collections.immutable/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Collections.Immutable.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets", + "lib/net462/System.Collections.Immutable.dll", + "lib/net462/System.Collections.Immutable.xml", + "lib/net6.0/System.Collections.Immutable.dll", + "lib/net6.0/System.Collections.Immutable.xml", + "lib/net7.0/System.Collections.Immutable.dll", + "lib/net7.0/System.Collections.Immutable.xml", + "lib/netstandard2.0/System.Collections.Immutable.dll", + "lib/netstandard2.0/System.Collections.Immutable.xml", + "system.collections.immutable.7.0.0.nupkg.sha512", + "system.collections.immutable.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition/7.0.0": { + "sha512": "tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "type": "package", + "path": "system.composition/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.targets", + "lib/net461/_._", + "lib/netcoreapp2.0/_._", + "lib/netstandard2.0/_._", + "system.composition.7.0.0.nupkg.sha512", + "system.composition.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.AttributedModel/7.0.0": { + "sha512": "2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==", + "type": "package", + "path": "system.composition.attributedmodel/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.AttributedModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.AttributedModel.targets", + "lib/net462/System.Composition.AttributedModel.dll", + "lib/net462/System.Composition.AttributedModel.xml", + "lib/net6.0/System.Composition.AttributedModel.dll", + "lib/net6.0/System.Composition.AttributedModel.xml", + "lib/net7.0/System.Composition.AttributedModel.dll", + "lib/net7.0/System.Composition.AttributedModel.xml", + "lib/netstandard2.0/System.Composition.AttributedModel.dll", + "lib/netstandard2.0/System.Composition.AttributedModel.xml", + "system.composition.attributedmodel.7.0.0.nupkg.sha512", + "system.composition.attributedmodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Convention/7.0.0": { + "sha512": "IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "type": "package", + "path": "system.composition.convention/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Convention.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Convention.targets", + "lib/net462/System.Composition.Convention.dll", + "lib/net462/System.Composition.Convention.xml", + "lib/net6.0/System.Composition.Convention.dll", + "lib/net6.0/System.Composition.Convention.xml", + "lib/net7.0/System.Composition.Convention.dll", + "lib/net7.0/System.Composition.Convention.xml", + "lib/netstandard2.0/System.Composition.Convention.dll", + "lib/netstandard2.0/System.Composition.Convention.xml", + "system.composition.convention.7.0.0.nupkg.sha512", + "system.composition.convention.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Hosting/7.0.0": { + "sha512": "eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "type": "package", + "path": "system.composition.hosting/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Hosting.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Hosting.targets", + "lib/net462/System.Composition.Hosting.dll", + "lib/net462/System.Composition.Hosting.xml", + "lib/net6.0/System.Composition.Hosting.dll", + "lib/net6.0/System.Composition.Hosting.xml", + "lib/net7.0/System.Composition.Hosting.dll", + "lib/net7.0/System.Composition.Hosting.xml", + "lib/netstandard2.0/System.Composition.Hosting.dll", + "lib/netstandard2.0/System.Composition.Hosting.xml", + "system.composition.hosting.7.0.0.nupkg.sha512", + "system.composition.hosting.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Runtime/7.0.0": { + "sha512": "aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==", + "type": "package", + "path": "system.composition.runtime/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Runtime.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Runtime.targets", + "lib/net462/System.Composition.Runtime.dll", + "lib/net462/System.Composition.Runtime.xml", + "lib/net6.0/System.Composition.Runtime.dll", + "lib/net6.0/System.Composition.Runtime.xml", + "lib/net7.0/System.Composition.Runtime.dll", + "lib/net7.0/System.Composition.Runtime.xml", + "lib/netstandard2.0/System.Composition.Runtime.dll", + "lib/netstandard2.0/System.Composition.Runtime.xml", + "system.composition.runtime.7.0.0.nupkg.sha512", + "system.composition.runtime.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.TypedParts/7.0.0": { + "sha512": "ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "type": "package", + "path": "system.composition.typedparts/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.TypedParts.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.TypedParts.targets", + "lib/net462/System.Composition.TypedParts.dll", + "lib/net462/System.Composition.TypedParts.xml", + "lib/net6.0/System.Composition.TypedParts.dll", + "lib/net6.0/System.Composition.TypedParts.xml", + "lib/net7.0/System.Composition.TypedParts.dll", + "lib/net7.0/System.Composition.TypedParts.xml", + "lib/netstandard2.0/System.Composition.TypedParts.dll", + "lib/netstandard2.0/System.Composition.TypedParts.xml", + "system.composition.typedparts.7.0.0.nupkg.sha512", + "system.composition.typedparts.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "sha512": "JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==", + "type": "package", + "path": "system.configuration.configurationmanager/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Configuration.ConfigurationManager.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Configuration.ConfigurationManager.targets", + "lib/net462/System.Configuration.ConfigurationManager.dll", + "lib/net462/System.Configuration.ConfigurationManager.xml", + "lib/net6.0/System.Configuration.ConfigurationManager.dll", + "lib/net6.0/System.Configuration.ConfigurationManager.xml", + "lib/net7.0/System.Configuration.ConfigurationManager.dll", + "lib/net7.0/System.Configuration.ConfigurationManager.xml", + "lib/net8.0/System.Configuration.ConfigurationManager.dll", + "lib/net8.0/System.Configuration.ConfigurationManager.xml", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "system.configuration.configurationmanager.8.0.0.nupkg.sha512", + "system.configuration.configurationmanager.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.DiagnosticSource/8.0.1": { + "sha512": "vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==", + "type": "package", + "path": "system.diagnostics.diagnosticsource/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets", + "lib/net462/System.Diagnostics.DiagnosticSource.dll", + "lib/net462/System.Diagnostics.DiagnosticSource.xml", + "lib/net6.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net6.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net7.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net7.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net8.0/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml", + "system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512", + "system.diagnostics.diagnosticsource.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.EventLog/8.0.0": { + "sha512": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", + "type": "package", + "path": "system.diagnostics.eventlog/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.EventLog.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.EventLog.targets", + "lib/net462/System.Diagnostics.EventLog.dll", + "lib/net462/System.Diagnostics.EventLog.xml", + "lib/net6.0/System.Diagnostics.EventLog.dll", + "lib/net6.0/System.Diagnostics.EventLog.xml", + "lib/net7.0/System.Diagnostics.EventLog.dll", + "lib/net7.0/System.Diagnostics.EventLog.xml", + "lib/net8.0/System.Diagnostics.EventLog.dll", + "lib/net8.0/System.Diagnostics.EventLog.xml", + "lib/netstandard2.0/System.Diagnostics.EventLog.dll", + "lib/netstandard2.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.xml", + "system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "system.diagnostics.eventlog.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.IO.Pipelines/7.0.0": { + "sha512": "jRn6JYnNPW6xgQazROBLSfpdoczRw694vO5kKvMcNnpXuolEixUyw6IBuBs2Y2mlSX/LdLvyyWmfXhaI3ND1Yg==", + "type": "package", + "path": "system.io.pipelines/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.IO.Pipelines.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets", + "lib/net462/System.IO.Pipelines.dll", + "lib/net462/System.IO.Pipelines.xml", + "lib/net6.0/System.IO.Pipelines.dll", + "lib/net6.0/System.IO.Pipelines.xml", + "lib/net7.0/System.IO.Pipelines.dll", + "lib/net7.0/System.IO.Pipelines.xml", + "lib/netstandard2.0/System.IO.Pipelines.dll", + "lib/netstandard2.0/System.IO.Pipelines.xml", + "system.io.pipelines.7.0.0.nupkg.sha512", + "system.io.pipelines.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Metadata/7.0.0": { + "sha512": "MclTG61lsD9sYdpNz9xsKBzjsmsfCtcMZYXz/IUr2zlhaTaABonlr1ESeompTgM+Xk+IwtGYU7/voh3YWB/fWw==", + "type": "package", + "path": "system.reflection.metadata/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Reflection.Metadata.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Reflection.Metadata.targets", + "lib/net462/System.Reflection.Metadata.dll", + "lib/net462/System.Reflection.Metadata.xml", + "lib/net6.0/System.Reflection.Metadata.dll", + "lib/net6.0/System.Reflection.Metadata.xml", + "lib/net7.0/System.Reflection.Metadata.dll", + "lib/net7.0/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "system.reflection.metadata.7.0.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "type": "package", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net461/System.Runtime.CompilerServices.Unsafe.xml", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "system.runtime.compilerservices.unsafe.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Runtime.Loader/4.3.0": { + "sha512": "DHMaRn8D8YCK2GG2pw+UzNxn/OHVfaWx7OTLBD/hPegHZZgcZh3H6seWegrC4BYwsfuGrywIuT+MQs+rPqRLTQ==", + "type": "package", + "path": "system.runtime.loader/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/_._", + "lib/netstandard1.5/System.Runtime.Loader.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/netstandard1.5/System.Runtime.Loader.dll", + "ref/netstandard1.5/System.Runtime.Loader.xml", + "ref/netstandard1.5/de/System.Runtime.Loader.xml", + "ref/netstandard1.5/es/System.Runtime.Loader.xml", + "ref/netstandard1.5/fr/System.Runtime.Loader.xml", + "ref/netstandard1.5/it/System.Runtime.Loader.xml", + "ref/netstandard1.5/ja/System.Runtime.Loader.xml", + "ref/netstandard1.5/ko/System.Runtime.Loader.xml", + "ref/netstandard1.5/ru/System.Runtime.Loader.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Loader.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Loader.xml", + "system.runtime.loader.4.3.0.nupkg.sha512", + "system.runtime.loader.nuspec" + ] + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "sha512": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==", + "type": "package", + "path": "system.security.cryptography.protecteddata/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Security.Cryptography.ProtectedData.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Security.Cryptography.ProtectedData.targets", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/System.Security.Cryptography.ProtectedData.dll", + "lib/net462/System.Security.Cryptography.ProtectedData.xml", + "lib/net6.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net6.0/System.Security.Cryptography.ProtectedData.xml", + "lib/net7.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net7.0/System.Security.Cryptography.ProtectedData.xml", + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net8.0/System.Security.Cryptography.ProtectedData.xml", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "system.security.cryptography.protecteddata.8.0.0.nupkg.sha512", + "system.security.cryptography.protecteddata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Security.Permissions/8.0.0": { + "sha512": "v/BBylw7XevuAsHXoX9dDUUfmBIcUf7Lkz8K3ZXIKz3YRKpw8YftpSir4n4e/jDTKFoaK37AsC3xnk+GNFI1Ow==", + "type": "package", + "path": "system.security.permissions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Security.Permissions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Security.Permissions.targets", + "lib/net462/System.Security.Permissions.dll", + "lib/net462/System.Security.Permissions.xml", + "lib/net6.0/System.Security.Permissions.dll", + "lib/net6.0/System.Security.Permissions.xml", + "lib/net7.0/System.Security.Permissions.dll", + "lib/net7.0/System.Security.Permissions.xml", + "lib/net8.0/System.Security.Permissions.dll", + "lib/net8.0/System.Security.Permissions.xml", + "lib/netstandard2.0/System.Security.Permissions.dll", + "lib/netstandard2.0/System.Security.Permissions.xml", + "system.security.permissions.8.0.0.nupkg.sha512", + "system.security.permissions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Text.Encoding.CodePages/8.0.0": { + "sha512": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==", + "type": "package", + "path": "system.text.encoding.codepages/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encoding.CodePages.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encoding.CodePages.targets", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/System.Text.Encoding.CodePages.dll", + "lib/net462/System.Text.Encoding.CodePages.xml", + "lib/net6.0/System.Text.Encoding.CodePages.dll", + "lib/net6.0/System.Text.Encoding.CodePages.xml", + "lib/net7.0/System.Text.Encoding.CodePages.dll", + "lib/net7.0/System.Text.Encoding.CodePages.xml", + "lib/net8.0/System.Text.Encoding.CodePages.dll", + "lib/net8.0/System.Text.Encoding.CodePages.xml", + "lib/netstandard2.0/System.Text.Encoding.CodePages.dll", + "lib/netstandard2.0/System.Text.Encoding.CodePages.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.xml", + "runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.xml", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.xml", + "system.text.encoding.codepages.8.0.0.nupkg.sha512", + "system.text.encoding.codepages.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Encodings.Web/4.5.0": { + "sha512": "Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==", + "type": "package", + "path": "system.text.encodings.web/4.5.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netstandard1.0/System.Text.Encodings.Web.dll", + "lib/netstandard1.0/System.Text.Encodings.Web.xml", + "lib/netstandard2.0/System.Text.Encodings.Web.dll", + "lib/netstandard2.0/System.Text.Encodings.Web.xml", + "system.text.encodings.web.4.5.0.nupkg.sha512", + "system.text.encodings.web.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Text.Json/9.0.0": { + "sha512": "js7+qAu/9mQvnhA4EfGMZNEzXtJCDxgkgj8ohuxq/Qxv+R56G+ljefhiJHOxTNiw54q8vmABCWUwkMulNdlZ4A==", + "type": "package", + "path": "system.text.json/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "buildTransitive/net461/System.Text.Json.targets", + "buildTransitive/net462/System.Text.Json.targets", + "buildTransitive/net8.0/System.Text.Json.targets", + "buildTransitive/netcoreapp2.0/System.Text.Json.targets", + "buildTransitive/netstandard2.0/System.Text.Json.targets", + "lib/net462/System.Text.Json.dll", + "lib/net462/System.Text.Json.xml", + "lib/net8.0/System.Text.Json.dll", + "lib/net8.0/System.Text.Json.xml", + "lib/net9.0/System.Text.Json.dll", + "lib/net9.0/System.Text.Json.xml", + "lib/netstandard2.0/System.Text.Json.dll", + "lib/netstandard2.0/System.Text.Json.xml", + "system.text.json.9.0.0.nupkg.sha512", + "system.text.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Channels/7.0.0": { + "sha512": "qmeeYNROMsONF6ndEZcIQ+VxR4Q/TX/7uIVLJqtwIWL7dDWeh0l1UIqgo4wYyjG//5lUNhwkLDSFl+pAWO6oiA==", + "type": "package", + "path": "system.threading.channels/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Threading.Channels.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Threading.Channels.targets", + "lib/net462/System.Threading.Channels.dll", + "lib/net462/System.Threading.Channels.xml", + "lib/net6.0/System.Threading.Channels.dll", + "lib/net6.0/System.Threading.Channels.xml", + "lib/net7.0/System.Threading.Channels.dll", + "lib/net7.0/System.Threading.Channels.xml", + "lib/netstandard2.0/System.Threading.Channels.dll", + "lib/netstandard2.0/System.Threading.Channels.xml", + "lib/netstandard2.1/System.Threading.Channels.dll", + "lib/netstandard2.1/System.Threading.Channels.xml", + "system.threading.channels.7.0.0.nupkg.sha512", + "system.threading.channels.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "type": "package", + "path": "system.threading.tasks.extensions/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Threading.Tasks.Extensions.dll", + "lib/net461/System.Threading.Tasks.Extensions.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netcoreapp2.1/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "system.threading.tasks.extensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Windows.Extensions/8.0.0": { + "sha512": "Obg3a90MkOw9mYKxrardLpY2u0axDMrSmy4JCdq2cYbelM2cUwmUir5Bomvd1yxmPL9h5LVHU1tuKBZpUjfASg==", + "type": "package", + "path": "system.windows.extensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net6.0/System.Windows.Extensions.dll", + "lib/net6.0/System.Windows.Extensions.xml", + "lib/net7.0/System.Windows.Extensions.dll", + "lib/net7.0/System.Windows.Extensions.xml", + "lib/net8.0/System.Windows.Extensions.dll", + "lib/net8.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net6.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net6.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net7.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net7.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net8.0/System.Windows.Extensions.xml", + "system.windows.extensions.8.0.0.nupkg.sha512", + "system.windows.extensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "ZstdSharp.Port/0.8.0": { + "sha512": "Z62eNBIu8E8YtbqlMy57tK3dV1+m2b9NhPeaYovB5exmLKvrGCqOhJTzrEUH5VyUWU6vwX3c1XHJGhW5HVs8dA==", + "type": "package", + "path": "zstdsharp.port/0.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net462/ZstdSharp.dll", + "lib/net5.0/ZstdSharp.dll", + "lib/net6.0/ZstdSharp.dll", + "lib/net7.0/ZstdSharp.dll", + "lib/net8.0/ZstdSharp.dll", + "lib/netcoreapp3.1/ZstdSharp.dll", + "lib/netstandard2.0/ZstdSharp.dll", + "lib/netstandard2.1/ZstdSharp.dll", + "zstdsharp.port.0.8.0.nupkg.sha512", + "zstdsharp.port.nuspec" + ] + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Application/HardwarePerformance.Application.csproj", + "msbuildProject": "../HardwarePerformance.Application/HardwarePerformance.Application.csproj" + }, + "HardwarePerformance.Core/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Core/HardwarePerformance.Core.csproj", + "msbuildProject": "../HardwarePerformance.Core/HardwarePerformance.Core.csproj" + }, + "HardwarePerformance.Infrastructure/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj", + "msbuildProject": "../HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj" + } }, - "libraries": {}, "projectFileDependencyGroups": { "net9.0": [ + "HardwarePerformance.Application >= 1.0.0", + "HardwarePerformance.Infrastructure >= 1.0.0", "Microsoft.AspNetCore.OpenApi >= 9.0.0", "Microsoft.AspNetCore.ResponseCompression >= 2.2.0", "Microsoft.EntityFrameworkCore.Design >= 9.0.0", "Microsoft.Extensions.Caching.StackExchangeRedis >= 9.0.0", - "StackExchange.Redis >= 2.7.10", + "StackExchange.Redis >= 2.7.27", "Swashbuckle.AspNetCore >= 6.6.2" ] }, "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, + "C:\\Users\\Administrator\\.nuget\\packages\\": {}, "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} }, "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", "projectName": "HardwarePerformance.API", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -40,19 +5088,19 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" }, - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj" } } } @@ -67,7 +5115,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -91,7 +5139,7 @@ }, "StackExchange.Redis": { "target": "Package", - "version": "[2.7.10, )" + "version": "[2.7.27, )" }, "Swashbuckle.AspNetCore": { "target": "Package", @@ -109,6 +5157,24 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Host.win-x64", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.AspNetCore.App": { "privateAssets": "none" @@ -117,16 +5183,8 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } - }, - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "无法加载源 https://nuget.cdn.azure.cn/v3/index.json 的服务索引。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "Microsoft.EntityFrameworkCore.Design" - } - ] + } } \ No newline at end of file diff --git a/backend/HardwarePerformance.API/obj/project.nuget.cache b/backend/HardwarePerformance.API/obj/project.nuget.cache index b51d154c..5157152e 100644 --- a/backend/HardwarePerformance.API/obj/project.nuget.cache +++ b/backend/HardwarePerformance.API/obj/project.nuget.cache @@ -1,18 +1,97 @@ { "version": 2, - "dgSpecHash": "rxPvbZQQnrI=", - "success": false, - "projectFilePath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", - "expectedPackageFiles": [], - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "无法加载源 https://nuget.cdn.azure.cn/v3/index.json 的服务索引。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", - "filePath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", - "libraryId": "Microsoft.EntityFrameworkCore.Design", - "targetGraphs": [] - } - ] + "dgSpecHash": "Y4Oq6qd+9r4=", + "success": true, + "projectFilePath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.API\\HardwarePerformance.API.csproj", + "expectedPackageFiles": [ + "C:\\Users\\Administrator\\.nuget\\packages\\bouncycastle.cryptography\\2.3.1\\bouncycastle.cryptography.2.3.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\google.protobuf\\3.26.1\\google.protobuf.3.26.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\humanizer.core\\2.14.1\\humanizer.core.2.14.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.compression.lz4\\1.3.8\\k4os.compression.lz4.1.3.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.compression.lz4.streams\\1.3.8\\k4os.compression.lz4.streams.1.3.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.hash.xxhash\\1.0.8\\k4os.hash.xxhash.1.0.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.http.abstractions\\2.2.0\\microsoft.aspnetcore.http.abstractions.2.2.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.http.extensions\\2.2.0\\microsoft.aspnetcore.http.extensions.2.2.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.http.features\\2.2.0\\microsoft.aspnetcore.http.features.2.2.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.openapi\\9.0.0\\microsoft.aspnetcore.openapi.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.responsecompression\\2.2.0\\microsoft.aspnetcore.responsecompression.2.2.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\7.0.0\\microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.build.framework\\17.8.3\\microsoft.build.framework.17.8.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.build.locator\\1.7.8\\microsoft.build.locator.1.7.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.analyzers\\3.3.4\\microsoft.codeanalysis.analyzers.3.3.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.common\\4.8.0\\microsoft.codeanalysis.common.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.csharp\\4.8.0\\microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.csharp.workspaces\\4.8.0\\microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.workspaces.common\\4.8.0\\microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.workspaces.msbuild\\4.8.0\\microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore\\9.0.0\\microsoft.entityframeworkcore.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\9.0.0\\microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.analyzers\\9.0.0\\microsoft.entityframeworkcore.analyzers.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.design\\9.0.0\\microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.relational\\9.0.0\\microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.tools\\9.0.0\\microsoft.entityframeworkcore.tools.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.apidescription.server\\6.0.5\\microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\9.0.0\\microsoft.extensions.caching.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.caching.memory\\9.0.0\\microsoft.extensions.caching.memory.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.caching.stackexchangeredis\\9.0.0\\microsoft.extensions.caching.stackexchangeredis.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\9.0.0\\microsoft.extensions.configuration.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\9.0.0\\microsoft.extensions.dependencyinjection.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\9.0.0\\microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencymodel\\9.0.0\\microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\2.2.0\\microsoft.extensions.fileproviders.abstractions.2.2.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.logging\\9.0.0\\microsoft.extensions.logging.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\9.0.0\\microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.options\\9.0.0\\microsoft.extensions.options.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.primitives\\9.0.0\\microsoft.extensions.primitives.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.net.http.headers\\2.2.0\\microsoft.net.http.headers.2.2.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.openapi\\1.6.17\\microsoft.openapi.1.6.17.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mono.texttemplating\\3.0.0\\mono.texttemplating.3.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mysql.data\\9.0.0\\mysql.data.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mysqlconnector\\2.4.0\\mysqlconnector.2.4.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\pipelines.sockets.unofficial\\2.2.8\\pipelines.sockets.unofficial.2.2.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\pomelo.entityframeworkcore.mysql\\9.0.0\\pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\stackexchange.redis\\2.7.27\\stackexchange.redis.2.7.27.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\swashbuckle.aspnetcore\\6.6.2\\swashbuckle.aspnetcore.6.6.2.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\6.6.2\\swashbuckle.aspnetcore.swagger.6.6.2.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\swashbuckle.aspnetcore.swaggergen\\6.6.2\\swashbuckle.aspnetcore.swaggergen.6.6.2.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\swashbuckle.aspnetcore.swaggerui\\6.6.2\\swashbuckle.aspnetcore.swaggerui.6.6.2.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.codedom\\6.0.0\\system.codedom.6.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.collections.immutable\\7.0.0\\system.collections.immutable.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition\\7.0.0\\system.composition.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.attributedmodel\\7.0.0\\system.composition.attributedmodel.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.convention\\7.0.0\\system.composition.convention.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.hosting\\7.0.0\\system.composition.hosting.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.runtime\\7.0.0\\system.composition.runtime.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.typedparts\\7.0.0\\system.composition.typedparts.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.configuration.configurationmanager\\8.0.0\\system.configuration.configurationmanager.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.diagnostics.diagnosticsource\\8.0.1\\system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.diagnostics.eventlog\\8.0.0\\system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.io.pipelines\\7.0.0\\system.io.pipelines.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection.metadata\\7.0.0\\system.reflection.metadata.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime.loader\\4.3.0\\system.runtime.loader.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.security.cryptography.protecteddata\\8.0.0\\system.security.cryptography.protecteddata.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.security.permissions\\8.0.0\\system.security.permissions.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.encoding.codepages\\8.0.0\\system.text.encoding.codepages.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.encodings.web\\4.5.0\\system.text.encodings.web.4.5.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.json\\9.0.0\\system.text.json.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.channels\\7.0.0\\system.threading.channels.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.windows.extensions\\8.0.0\\system.windows.extensions.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\zstdsharp.port\\0.8.0\\zstdsharp.port.0.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.app.ref\\9.0.10\\microsoft.netcore.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\9.0.10\\microsoft.windowsdesktop.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\9.0.10\\microsoft.aspnetcore.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.app.host.win-x64\\9.0.10\\microsoft.netcore.app.host.win-x64.9.0.10.nupkg.sha512" + ], + "logs": [] } \ No newline at end of file diff --git a/backend/HardwarePerformance.Application/Interfaces/ICategoryRepository.cs b/backend/HardwarePerformance.Application/Interfaces/ICategoryRepository.cs new file mode 100644 index 00000000..278a4380 --- /dev/null +++ b/backend/HardwarePerformance.Application/Interfaces/ICategoryRepository.cs @@ -0,0 +1,31 @@ +using HardwarePerformance.Core.Entities; + +namespace HardwarePerformance.Application.Interfaces +{ + /// + /// 类别Repository接口 + /// + public interface ICategoryRepository : IRepository + { + /// + /// 根据名称获取类别 + /// + /// 类别名称 + /// 类别对象 + Task GetByNameAsync(string name); + + /// + /// 获取类别及其产品数量 + /// + /// 类别列表及产品数量 + Task> GetCategoriesWithProductCountAsync(); + + /// + /// 检查类别名称是否已存在 + /// + /// 类别名称 + /// 排除的类别ID(用于更新时检查) + /// 是否已存在 + Task IsNameExistsAsync(string name, int? excludeId = null); + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Application/Interfaces/IProductRepository.cs b/backend/HardwarePerformance.Application/Interfaces/IProductRepository.cs new file mode 100644 index 00000000..0c43f995 --- /dev/null +++ b/backend/HardwarePerformance.Application/Interfaces/IProductRepository.cs @@ -0,0 +1,120 @@ +using HardwarePerformance.Core.Entities; + +namespace HardwarePerformance.Application.Interfaces +{ + /// + /// 产品Repository接口 + /// + public interface IProductRepository : IRepository + { + /// + /// 根据类别ID获取产品列表(支持分页和排序) + /// + /// 类别ID + /// 页码 + /// 每页大小 + /// 排序字段 + /// 是否升序 + /// 产品列表 + Task<(IEnumerable products, int totalCount)> GetByCategoryAsync( + int categoryId, + int pageNumber = 1, + int pageSize = 20, + string sortBy = "CurrentRank", + bool ascending = true); + + /// + /// 搜索产品(按名称、型号、品牌) + /// + /// 搜索关键词 + /// 类别ID(可选) + /// 页码 + /// 每页大小 + /// 产品列表 + Task<(IEnumerable products, int totalCount)> SearchAsync( + string searchTerm, + int? categoryId = null, + int pageNumber = 1, + int pageSize = 20); + + /// + /// 筛选产品(按性能分数区间、发布年份、品牌) + /// + /// 类别ID + /// 最低分数 + /// 最高分数 + /// 最早年份 + /// 最晚年份 + /// 品牌 + /// 页码 + /// 每页大小 + /// 产品列表 + Task<(IEnumerable products, int totalCount)> FilterAsync( + int categoryId, + int? minScore = null, + int? maxScore = null, + int? minYear = null, + int? maxYear = null, + string? manufacturer = null, + int pageNumber = 1, + int pageSize = 20); + + /// + /// 获取产品详情(包含规格参数和性能分数) + /// + /// 产品ID + /// 产品详情 + Task GetWithDetailsAsync(int id); + + /// + /// 获取多个产品(用于对比) + /// + /// 产品ID列表 + /// 产品列表 + Task> GetByIdsAsync(IEnumerable productIds); + + /// + /// 获取品牌列表 + /// + /// 类别ID(可选) + /// 品牌列表 + Task> GetManufacturersAsync(int? categoryId = null); + + /// + /// 获取排名变化历史 + /// + /// 产品ID + /// 月份数 + /// 排名历史 + Task> GetRankingHistoryAsync(int productId, int months = 12); + + /// + /// 根据制造商获取产品列表 + /// + /// 制造商名称 + /// 类别ID(可选) + /// 页码 + /// 每页大小 + /// 产品列表 + Task<(IEnumerable products, int totalCount)> GetByManufacturerAsync( + string manufacturer, + int? categoryId = null, + int pageNumber = 1, + int pageSize = 20); + + /// + /// 根据型号获取产品 + /// + /// 型号 + /// 产品 + Task GetByModelAsync(string model); + + /// + /// 获取类别中排名前N的产品 + /// + /// 类别ID + /// 数量 + /// 产品列表 + Task> GetTopNByCategoryAsync(int categoryId, int n); + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Application/Interfaces/IRepository.cs b/backend/HardwarePerformance.Application/Interfaces/IRepository.cs new file mode 100644 index 00000000..32577459 --- /dev/null +++ b/backend/HardwarePerformance.Application/Interfaces/IRepository.cs @@ -0,0 +1,86 @@ +using System.Linq.Expressions; + +namespace HardwarePerformance.Application.Interfaces +{ + /// + /// 通用Repository接口,定义基本的CRUD操作 + /// + /// 实体类型 + public interface IRepository where T : class + { + /// + /// 根据ID获取实体 + /// + /// 实体ID + /// 实体对象 + Task GetByIdAsync(int id); + + /// + /// 获取所有实体 + /// + /// 实体列表 + Task> GetAllAsync(); + + /// + /// 根据条件查询实体 + /// + /// 查询条件 + /// 符合条件的实体列表 + Task> FindAsync(Expression> predicate); + + /// + /// 检查是否存在符合条件的实体 + /// + /// 查询条件 + /// 是否存在 + Task ExistsAsync(Expression> predicate); + + /// + /// 添加实体 + /// + /// 要添加的实体 + /// 添加后的实体 + Task AddAsync(T entity); + + /// + /// 批量添加实体 + /// + /// 要添加的实体列表 + /// 添加后的实体列表 + Task> AddRangeAsync(IEnumerable entities); + + /// + /// 更新实体 + /// + /// 要更新的实体 + /// 更新后的实体 + Task UpdateAsync(T entity); + + /// + /// 删除实体 + /// + /// 要删除的实体 + /// 是否删除成功 + Task DeleteAsync(T entity); + + /// + /// 根据ID删除实体 + /// + /// 实体ID + /// 是否删除成功 + Task DeleteByIdAsync(int id); + + /// + /// 获取实体数量 + /// + /// 实体总数 + Task CountAsync(); + + /// + /// 根据条件获取实体数量 + /// + /// 查询条件 + /// 符合条件的实体数量 + Task CountAsync(Expression> predicate); + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.dll b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.dll index 858e5de4..c210c427 100644 Binary files a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.dll and b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.dll differ diff --git a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.pdb b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.pdb index f8e0ea1e..14c18d01 100644 Binary files a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.pdb and b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Application.pdb differ diff --git a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.dll b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.dll index c63399d7..839eb618 100644 Binary files a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.dll and b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.dll differ diff --git a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.pdb b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.pdb index 28d66296..c4cfadaf 100644 Binary files a/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.pdb and b/backend/HardwarePerformance.Application/bin/Debug/net9.0/HardwarePerformance.Core.pdb differ diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfo.cs b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfo.cs index 47c0efed..89ad30f4 100644 --- a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfo.cs +++ b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfo.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 +// This code was generated by a tool. // -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -14,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("HardwarePerformance.Application")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a04b856674d8e31e95655605d640e36e54e848a")] [assembly: System.Reflection.AssemblyProductAttribute("HardwarePerformance.Application")] [assembly: System.Reflection.AssemblyTitleAttribute("HardwarePerformance.Application")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfoInputs.cache b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfoInputs.cache index 9636c2a6..8e9b979c 100644 --- a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfoInputs.cache +++ b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.AssemblyInfoInputs.cache @@ -1 +1 @@ -47ace040dd573a6e7d73bc27be6f43fbae68038e279bb072bfa7078bb1c58834 +cbafcb4d083ddedf5dba09788cf2db2a61f46253ae3229553809ff8b52b3d51a diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GeneratedMSBuildEditorConfig.editorconfig b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GeneratedMSBuildEditorConfig.editorconfig index d46fe36d..8cdb61c4 100644 --- a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GeneratedMSBuildEditorConfig.editorconfig +++ b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GeneratedMSBuildEditorConfig.editorconfig @@ -1,5 +1,7 @@ is_global = true build_property.TargetFramework = net9.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v9.0 build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = build_property.ProjectTypeGuids = @@ -8,7 +10,7 @@ build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = HardwarePerformance.Application -build_property.ProjectDir = c:\work\电脑硬件-01\backend\HardwarePerformance.Application\ +build_property.ProjectDir = D:\work\Demo\it\it\backend\HardwarePerformance.Application\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 9.0 diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GlobalUsings.g.cs b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GlobalUsings.g.cs index 8578f3d0..d12bcbc7 100644 --- a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GlobalUsings.g.cs +++ b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.GlobalUsings.g.cs @@ -1,8 +1,8 @@ // -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Threading; -global using global::System.Threading.Tasks; +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.assets.cache b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.assets.cache index 2572a531..9fa0c6a7 100644 Binary files a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.assets.cache and b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.assets.cache differ diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.AssemblyReference.cache b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.AssemblyReference.cache index 3210f425..c9fd933d 100644 Binary files a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.AssemblyReference.cache and b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.AssemblyReference.cache differ diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.CoreCompileInputs.cache b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.CoreCompileInputs.cache index 9a3e0737..4e7e7595 100644 --- a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.CoreCompileInputs.cache +++ b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -aeab2ef3e033460ff4326980bc90f1b0dc64d280b740f7a22c976cbecf4593d4 +9692aac03722f83dd77329d56f7534a910e1113c27448a86ce04e799390060d2 diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.FileListAbsolute.txt b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.FileListAbsolute.txt index 6bdadc9a..e9a92e37 100644 --- a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.FileListAbsolute.txt +++ b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.csproj.FileListAbsolute.txt @@ -13,3 +13,18 @@ C:\work\电脑硬件-01\backend\HardwarePerformance.Application\obj\Debug\net9.0 C:\work\电脑硬件-01\backend\HardwarePerformance.Application\obj\Debug\net9.0\refint\HardwarePerformance.Application.dll C:\work\电脑硬件-01\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.pdb C:\work\电脑硬件-01\backend\HardwarePerformance.Application\obj\Debug\net9.0\ref\HardwarePerformance.Application.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\refint\HardwarePerformance.Application.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Application\bin\Debug\net9.0\HardwarePerformance.Application.deps.json +D:\work\Demo\it\it\backend\HardwarePerformance.Application\bin\Debug\net9.0\HardwarePerformance.Application.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Application\bin\Debug\net9.0\HardwarePerformance.Application.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Application\bin\Debug\net9.0\HardwarePerformance.Core.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Application\bin\Debug\net9.0\HardwarePerformance.Core.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.csproj.AssemblyReference.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.GeneratedMSBuildEditorConfig.editorconfig +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.AssemblyInfoInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.AssemblyInfo.cs +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\HardwarePerformance.Application.csproj.CoreCompileInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\Hardware.84873EFD.Up2Date +D:\work\Demo\it\it\backend\HardwarePerformance.Application\obj\Debug\net9.0\ref\HardwarePerformance.Application.dll diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.dll b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.dll index 858e5de4..c210c427 100644 Binary files a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.dll and b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.dll differ diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.pdb b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.pdb index f8e0ea1e..14c18d01 100644 Binary files a/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.pdb and b/backend/HardwarePerformance.Application/obj/Debug/net9.0/HardwarePerformance.Application.pdb differ diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/ref/HardwarePerformance.Application.dll b/backend/HardwarePerformance.Application/obj/Debug/net9.0/ref/HardwarePerformance.Application.dll index 699f16dc..a91d20b6 100644 Binary files a/backend/HardwarePerformance.Application/obj/Debug/net9.0/ref/HardwarePerformance.Application.dll and b/backend/HardwarePerformance.Application/obj/Debug/net9.0/ref/HardwarePerformance.Application.dll differ diff --git a/backend/HardwarePerformance.Application/obj/Debug/net9.0/refint/HardwarePerformance.Application.dll b/backend/HardwarePerformance.Application/obj/Debug/net9.0/refint/HardwarePerformance.Application.dll index 699f16dc..a91d20b6 100644 Binary files a/backend/HardwarePerformance.Application/obj/Debug/net9.0/refint/HardwarePerformance.Application.dll and b/backend/HardwarePerformance.Application/obj/Debug/net9.0/refint/HardwarePerformance.Application.dll differ diff --git a/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.dgspec.json b/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.dgspec.json index 38231fbd..d047d535 100644 --- a/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.dgspec.json +++ b/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.dgspec.json @@ -1,24 +1,24 @@ { "format": 1, "restore": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": {} + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": {} }, "projects": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", "projectName": "HardwarePerformance.Application", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -26,16 +26,16 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" } } } @@ -50,7 +50,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -66,30 +66,44 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } }, - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", "projectName": "HardwarePerformance.Core", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -97,9 +111,9 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { @@ -117,7 +131,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -133,12 +147,26 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } } diff --git a/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.g.props b/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.g.props index b085de15..bd33aac1 100644 --- a/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.g.props +++ b/backend/HardwarePerformance.Application/obj/HardwarePerformance.Application.csproj.nuget.g.props @@ -5,12 +5,12 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + C:\Users\Administrator\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.14.0 + 7.0.0 - + \ No newline at end of file diff --git a/backend/HardwarePerformance.Application/obj/project.assets.json b/backend/HardwarePerformance.Application/obj/project.assets.json index 3e30eb98..80affd58 100644 --- a/backend/HardwarePerformance.Application/obj/project.assets.json +++ b/backend/HardwarePerformance.Application/obj/project.assets.json @@ -27,24 +27,24 @@ ] }, "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, + "C:\\Users\\Administrator\\.nuget\\packages\\": {}, "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} }, "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", "projectName": "HardwarePerformance.Application", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -52,16 +52,16 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" } } } @@ -76,7 +76,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -92,12 +92,26 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } } diff --git a/backend/HardwarePerformance.Application/obj/project.nuget.cache b/backend/HardwarePerformance.Application/obj/project.nuget.cache index 9db6af4f..e5b36aa0 100644 --- a/backend/HardwarePerformance.Application/obj/project.nuget.cache +++ b/backend/HardwarePerformance.Application/obj/project.nuget.cache @@ -1,8 +1,12 @@ { "version": 2, - "dgSpecHash": "vK7SRP5Q/lo=", + "dgSpecHash": "X7iXo0OMZ6U=", "success": true, - "projectFilePath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", - "expectedPackageFiles": [], + "projectFilePath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "expectedPackageFiles": [ + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.app.ref\\9.0.10\\microsoft.netcore.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\9.0.10\\microsoft.windowsdesktop.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\9.0.10\\microsoft.aspnetcore.app.ref.9.0.10.nupkg.sha512" + ], "logs": [] } \ No newline at end of file diff --git a/backend/HardwarePerformance.Core/Entities/BaseEntity.cs b/backend/HardwarePerformance.Core/Entities/BaseEntity.cs new file mode 100644 index 00000000..f87593aa --- /dev/null +++ b/backend/HardwarePerformance.Core/Entities/BaseEntity.cs @@ -0,0 +1,18 @@ +namespace HardwarePerformance.Core.Entities +{ + /// + /// 实体基类 + /// + public abstract class BaseEntity + { + /// + /// 创建时间 + /// + public DateTime CreatedAt { get; set; } = DateTime.UtcNow; + + /// + /// 更新时间 + /// + public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Core/Entities/Category.cs b/backend/HardwarePerformance.Core/Entities/Category.cs index 543734cc..7478b0f4 100644 --- a/backend/HardwarePerformance.Core/Entities/Category.cs +++ b/backend/HardwarePerformance.Core/Entities/Category.cs @@ -6,7 +6,7 @@ namespace HardwarePerformance.Core.Entities /// /// 产品类别实体 /// - public class Category : Infrastructure.Data.BaseEntity + public class Category : BaseEntity { public int Id { get; set; } diff --git a/backend/HardwarePerformance.Core/Entities/DataSource.cs b/backend/HardwarePerformance.Core/Entities/DataSource.cs index 412a8d51..cb5ae0e0 100644 --- a/backend/HardwarePerformance.Core/Entities/DataSource.cs +++ b/backend/HardwarePerformance.Core/Entities/DataSource.cs @@ -6,7 +6,7 @@ namespace HardwarePerformance.Core.Entities /// /// 数据源实体 /// - public class DataSource : Infrastructure.Data.BaseEntity + public class DataSource : BaseEntity { public int Id { get; set; } diff --git a/backend/HardwarePerformance.Core/Entities/PerformanceScore.cs b/backend/HardwarePerformance.Core/Entities/PerformanceScore.cs index 53a1852e..502ee5b1 100644 --- a/backend/HardwarePerformance.Core/Entities/PerformanceScore.cs +++ b/backend/HardwarePerformance.Core/Entities/PerformanceScore.cs @@ -6,7 +6,7 @@ namespace HardwarePerformance.Core.Entities /// /// 性能分数实体 /// - public class PerformanceScore : Infrastructure.Data.BaseEntity + public class PerformanceScore : BaseEntity { public int Id { get; set; } diff --git a/backend/HardwarePerformance.Core/Entities/Product.cs b/backend/HardwarePerformance.Core/Entities/Product.cs index e04c0938..ba264452 100644 --- a/backend/HardwarePerformance.Core/Entities/Product.cs +++ b/backend/HardwarePerformance.Core/Entities/Product.cs @@ -6,7 +6,7 @@ namespace HardwarePerformance.Core.Entities /// /// 产品实体 /// - public class Product : Infrastructure.Data.BaseEntity + public class Product : BaseEntity { public int Id { get; set; } diff --git a/backend/HardwarePerformance.Core/Entities/RankingHistory.cs b/backend/HardwarePerformance.Core/Entities/RankingHistory.cs index 8fda2598..95ecc209 100644 --- a/backend/HardwarePerformance.Core/Entities/RankingHistory.cs +++ b/backend/HardwarePerformance.Core/Entities/RankingHistory.cs @@ -6,7 +6,7 @@ namespace HardwarePerformance.Core.Entities /// /// 排名历史实体 /// - public class RankingHistory : Infrastructure.Data.BaseEntity + public class RankingHistory : BaseEntity { public int Id { get; set; } diff --git a/backend/HardwarePerformance.Core/Entities/Specification.cs b/backend/HardwarePerformance.Core/Entities/Specification.cs index 6b6e26b1..a86bfff8 100644 --- a/backend/HardwarePerformance.Core/Entities/Specification.cs +++ b/backend/HardwarePerformance.Core/Entities/Specification.cs @@ -6,7 +6,7 @@ namespace HardwarePerformance.Core.Entities /// /// 产品规格参数实体 /// - public class Specification : Infrastructure.Data.BaseEntity + public class Specification : BaseEntity { public int Id { get; set; } diff --git a/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.dll b/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.dll index c63399d7..839eb618 100644 Binary files a/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.dll and b/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.dll differ diff --git a/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.pdb b/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.pdb index 28d66296..c4cfadaf 100644 Binary files a/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.pdb and b/backend/HardwarePerformance.Core/bin/Debug/net9.0/HardwarePerformance.Core.pdb differ diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfo.cs b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfo.cs index 23286e90..941ab4d4 100644 --- a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfo.cs +++ b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfo.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 +// This code was generated by a tool. // -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -14,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("HardwarePerformance.Core")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a04b856674d8e31e95655605d640e36e54e848a")] [assembly: System.Reflection.AssemblyProductAttribute("HardwarePerformance.Core")] [assembly: System.Reflection.AssemblyTitleAttribute("HardwarePerformance.Core")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfoInputs.cache b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfoInputs.cache index 3e9622a9..dc3741f4 100644 --- a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfoInputs.cache +++ b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.AssemblyInfoInputs.cache @@ -1 +1 @@ -47fb7408a33db12e565d87964c656fd47a21dcfbee73d3b0be85e656da215d8e +5c5b14aadb3a2c1daf65493f050da895ec2f52762a246aaf9a8a23a50a43f17b diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GeneratedMSBuildEditorConfig.editorconfig b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GeneratedMSBuildEditorConfig.editorconfig index 3021fb55..fe966594 100644 --- a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GeneratedMSBuildEditorConfig.editorconfig +++ b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GeneratedMSBuildEditorConfig.editorconfig @@ -1,5 +1,7 @@ is_global = true build_property.TargetFramework = net9.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v9.0 build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = build_property.ProjectTypeGuids = @@ -8,7 +10,7 @@ build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = HardwarePerformance.Core -build_property.ProjectDir = c:\work\电脑硬件-01\backend\HardwarePerformance.Core\ +build_property.ProjectDir = D:\work\Demo\it\it\backend\HardwarePerformance.Core\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 9.0 diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GlobalUsings.g.cs b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GlobalUsings.g.cs index 8578f3d0..d12bcbc7 100644 --- a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GlobalUsings.g.cs +++ b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.GlobalUsings.g.cs @@ -1,8 +1,8 @@ // -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Threading; -global using global::System.Threading.Tasks; +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.assets.cache b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.assets.cache index a96e765c..acc2d6db 100644 Binary files a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.assets.cache and b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.assets.cache differ diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.CoreCompileInputs.cache b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.CoreCompileInputs.cache index f615947f..3572883d 100644 --- a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.CoreCompileInputs.cache +++ b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -aea687805272a99f2d3351b970987a76ce0be622ef66272aa203a6cebba2e9bb +38a9822f53279d0086166a93f569881684238fdcc61b020f50fcbf4ec4e044f4 diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.FileListAbsolute.txt b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.FileListAbsolute.txt index 1262d84a..9760f016 100644 --- a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.FileListAbsolute.txt +++ b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.csproj.FileListAbsolute.txt @@ -9,3 +9,14 @@ C:\work\电脑硬件-01\backend\HardwarePerformance.Core\obj\Debug\net9.0\Hardwa C:\work\电脑硬件-01\backend\HardwarePerformance.Core\obj\Debug\net9.0\refint\HardwarePerformance.Core.dll C:\work\电脑硬件-01\backend\HardwarePerformance.Core\obj\Debug\net9.0\HardwarePerformance.Core.pdb C:\work\电脑硬件-01\backend\HardwarePerformance.Core\obj\Debug\net9.0\ref\HardwarePerformance.Core.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\HardwarePerformance.Core.GeneratedMSBuildEditorConfig.editorconfig +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\HardwarePerformance.Core.AssemblyInfoInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\HardwarePerformance.Core.AssemblyInfo.cs +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\HardwarePerformance.Core.csproj.CoreCompileInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\HardwarePerformance.Core.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\refint\HardwarePerformance.Core.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\HardwarePerformance.Core.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Core\bin\Debug\net9.0\HardwarePerformance.Core.deps.json +D:\work\Demo\it\it\backend\HardwarePerformance.Core\bin\Debug\net9.0\HardwarePerformance.Core.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Core\bin\Debug\net9.0\HardwarePerformance.Core.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Core\obj\Debug\net9.0\ref\HardwarePerformance.Core.dll diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.dll b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.dll index c63399d7..839eb618 100644 Binary files a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.dll and b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.dll differ diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.pdb b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.pdb index 28d66296..c4cfadaf 100644 Binary files a/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.pdb and b/backend/HardwarePerformance.Core/obj/Debug/net9.0/HardwarePerformance.Core.pdb differ diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/ref/HardwarePerformance.Core.dll b/backend/HardwarePerformance.Core/obj/Debug/net9.0/ref/HardwarePerformance.Core.dll index 30ab0656..cfacd4b1 100644 Binary files a/backend/HardwarePerformance.Core/obj/Debug/net9.0/ref/HardwarePerformance.Core.dll and b/backend/HardwarePerformance.Core/obj/Debug/net9.0/ref/HardwarePerformance.Core.dll differ diff --git a/backend/HardwarePerformance.Core/obj/Debug/net9.0/refint/HardwarePerformance.Core.dll b/backend/HardwarePerformance.Core/obj/Debug/net9.0/refint/HardwarePerformance.Core.dll index 30ab0656..cfacd4b1 100644 Binary files a/backend/HardwarePerformance.Core/obj/Debug/net9.0/refint/HardwarePerformance.Core.dll and b/backend/HardwarePerformance.Core/obj/Debug/net9.0/refint/HardwarePerformance.Core.dll differ diff --git a/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.dgspec.json b/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.dgspec.json index eba95216..dbfa33b7 100644 --- a/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.dgspec.json +++ b/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.dgspec.json @@ -1,24 +1,24 @@ { "format": 1, "restore": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": {} + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": {} }, "projects": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", "projectName": "HardwarePerformance.Core", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -26,9 +26,9 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { @@ -46,7 +46,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -62,12 +62,26 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } } diff --git a/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.g.props b/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.g.props index b085de15..bd33aac1 100644 --- a/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.g.props +++ b/backend/HardwarePerformance.Core/obj/HardwarePerformance.Core.csproj.nuget.g.props @@ -5,12 +5,12 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + C:\Users\Administrator\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.14.0 + 7.0.0 - + \ No newline at end of file diff --git a/backend/HardwarePerformance.Core/obj/project.assets.json b/backend/HardwarePerformance.Core/obj/project.assets.json index 673e4169..e75bfc93 100644 --- a/backend/HardwarePerformance.Core/obj/project.assets.json +++ b/backend/HardwarePerformance.Core/obj/project.assets.json @@ -8,24 +8,24 @@ "net9.0": [] }, "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, + "C:\\Users\\Administrator\\.nuget\\packages\\": {}, "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} }, "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", "projectName": "HardwarePerformance.Core", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -33,9 +33,9 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { @@ -53,7 +53,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -69,12 +69,26 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } } diff --git a/backend/HardwarePerformance.Core/obj/project.nuget.cache b/backend/HardwarePerformance.Core/obj/project.nuget.cache index f720e509..350f17e4 100644 --- a/backend/HardwarePerformance.Core/obj/project.nuget.cache +++ b/backend/HardwarePerformance.Core/obj/project.nuget.cache @@ -1,8 +1,12 @@ { "version": 2, - "dgSpecHash": "IaGf00VQysw=", + "dgSpecHash": "ePlb2hnOFq8=", "success": true, - "projectFilePath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", - "expectedPackageFiles": [], + "projectFilePath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "expectedPackageFiles": [ + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.app.ref\\9.0.10\\microsoft.netcore.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\9.0.10\\microsoft.windowsdesktop.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\9.0.10\\microsoft.aspnetcore.app.ref.9.0.10.nupkg.sha512" + ], "logs": [] } \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/HardwarePerformance.Infrastructure.Tests.csproj b/backend/HardwarePerformance.Infrastructure.Tests/HardwarePerformance.Infrastructure.Tests.csproj new file mode 100644 index 00000000..32ceabff --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/HardwarePerformance.Infrastructure.Tests.csproj @@ -0,0 +1,29 @@ + + + + net9.0 + enable + enable + false + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/Repositories/CategoryRepositoryTests.cs b/backend/HardwarePerformance.Infrastructure.Tests/Repositories/CategoryRepositoryTests.cs new file mode 100644 index 00000000..44468e7a --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/Repositories/CategoryRepositoryTests.cs @@ -0,0 +1,293 @@ +using Microsoft.EntityFrameworkCore; +using HardwarePerformance.Application.Interfaces; +using HardwarePerformance.Core.Entities; +using HardwarePerformance.Infrastructure.Data; +using HardwarePerformance.Infrastructure.Repositories; + +namespace HardwarePerformance.Infrastructure.Tests.Repositories +{ + /// + /// CategoryRepository单元测试 + /// + public class CategoryRepositoryTests : TestBase + { + private readonly ICategoryRepository _categoryRepository; + + public CategoryRepositoryTests() + { + _categoryRepository = new CategoryRepository(_context); + } + + [Fact] + public async Task GetByIdAsync_WithValidId_ReturnsCategory() + { + // Arrange + var categoryId = 1; + + // Act + var result = await _categoryRepository.GetByIdAsync(categoryId); + + // Assert + Assert.NotNull(result); + Assert.Equal(categoryId, result.Id); + Assert.Equal("手机CPU", result.Name); + } + + [Fact] + public async Task GetByIdAsync_WithInvalidId_ReturnsNull() + { + // Arrange + var categoryId = 999; + + // Act + var result = await _categoryRepository.GetByIdAsync(categoryId); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task GetAllAsync_ReturnsAllCategories() + { + // Act + var result = await _categoryRepository.GetAllAsync(); + + // Assert + Assert.NotNull(result); + Assert.Equal(4, result.Count()); + } + + [Fact] + public async Task FindAsync_WithValidPredicate_ReturnsFilteredCategories() + { + // Arrange + var predicate = (Category c) => c.Name.Contains("CPU"); + + // Act + var result = await _categoryRepository.FindAsync(predicate); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Count()); + Assert.All(result, c => Assert.Contains("CPU", c.Name)); + } + + [Fact] + public async Task ExistsAsync_WithExistingCategory_ReturnsTrue() + { + // Arrange + var predicate = (Category c) => c.Name == "手机CPU"; + + // Act + var result = await _categoryRepository.ExistsAsync(predicate); + + // Assert + Assert.True(result); + } + + [Fact] + public async Task ExistsAsync_WithNonExistingCategory_ReturnsFalse() + { + // Arrange + var predicate = (Category c) => c.Name == "不存在的类别"; + + // Act + var result = await _categoryRepository.ExistsAsync(predicate); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task AddAsync_WithValidCategory_ReturnsAddedCategory() + { + // Arrange + var newCategory = new Category + { + Name = "测试类别", + Description = "测试类别描述", + Icon = "test" + }; + + // Act + var result = await _categoryRepository.AddAsync(newCategory); + + // Assert + Assert.NotNull(result); + Assert.True(result.Id > 0); + Assert.Equal("测试类别", result.Name); + + // 验证是否已添加到数据库 + var savedCategory = await _categoryRepository.GetByIdAsync(result.Id); + Assert.NotNull(savedCategory); + Assert.Equal("测试类别", savedCategory.Name); + } + + [Fact] + public async Task UpdateAsync_WithValidCategory_ReturnsUpdatedCategory() + { + // Arrange + var category = await _categoryRepository.GetByIdAsync(1); + category.Description = "更新后的描述"; + + // Act + var result = await _categoryRepository.UpdateAsync(category); + + // Assert + Assert.NotNull(result); + Assert.Equal("更新后的描述", result.Description); + + // 验证是否已更新到数据库 + var savedCategory = await _categoryRepository.GetByIdAsync(1); + Assert.Equal("更新后的描述", savedCategory.Description); + } + + [Fact] + public async Task DeleteAsync_WithValidCategory_ReturnsTrue() + { + // Arrange + var category = await _categoryRepository.GetByIdAsync(1); + + // Act + var result = await _categoryRepository.DeleteAsync(category); + + // Assert + Assert.True(result); + + // 验证是否已从数据库删除 + var deletedCategory = await _categoryRepository.GetByIdAsync(1); + Assert.Null(deletedCategory); + } + + [Fact] + public async Task DeleteByIdAsync_WithValidId_ReturnsTrue() + { + // Arrange + var categoryId = 1; + + // Act + var result = await _categoryRepository.DeleteByIdAsync(categoryId); + + // Assert + Assert.True(result); + + // 验证是否已从数据库删除 + var deletedCategory = await _categoryRepository.GetByIdAsync(categoryId); + Assert.Null(deletedCategory); + } + + [Fact] + public async Task DeleteByIdAsync_WithInvalidId_ReturnsFalse() + { + // Arrange + var categoryId = 999; + + // Act + var result = await _categoryRepository.DeleteByIdAsync(categoryId); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task CountAsync_ReturnsCorrectCount() + { + // Act + var result = await _categoryRepository.CountAsync(); + + // Assert + Assert.Equal(4, result); + } + + [Fact] + public async Task CountAsync_WithPredicate_ReturnsCorrectCount() + { + // Arrange + var predicate = (Category c) => c.Name.Contains("CPU"); + + // Act + var result = await _categoryRepository.CountAsync(predicate); + + // Assert + Assert.Equal(2, result); + } + + [Fact] + public async Task GetByNameAsync_WithExistingName_ReturnsCategory() + { + // Arrange + var categoryName = "手机CPU"; + + // Act + var result = await _categoryRepository.GetByNameAsync(categoryName); + + // Assert + Assert.NotNull(result); + Assert.Equal(categoryName, result.Name); + } + + [Fact] + public async Task GetByNameAsync_WithNonExistingName_ReturnsNull() + { + // Arrange + var categoryName = "不存在的类别"; + + // Act + var result = await _categoryRepository.GetByNameAsync(categoryName); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task GetCategoriesWithProductCountAsync_ReturnsCategories() + { + // Act + var result = await _categoryRepository.GetCategoriesWithProductCountAsync(); + + // Assert + Assert.NotNull(result); + Assert.Equal(4, result.Count()); + } + + [Fact] + public async Task IsNameExistsAsync_WithExistingName_ReturnsTrue() + { + // Arrange + var categoryName = "手机CPU"; + + // Act + var result = await _categoryRepository.IsNameExistsAsync(categoryName); + + // Assert + Assert.True(result); + } + + [Fact] + public async Task IsNameExistsAsync_WithNonExistingName_ReturnsFalse() + { + // Arrange + var categoryName = "不存在的类别"; + + // Act + var result = await _categoryRepository.IsNameExistsAsync(categoryName); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task IsNameExistsAsync_WithExistingNameAndExcludeId_ReturnsFalse() + { + // Arrange + var categoryName = "手机CPU"; + var excludeId = 1; + + // Act + var result = await _categoryRepository.IsNameExistsAsync(categoryName, excludeId); + + // Assert + Assert.False(result); + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/Repositories/ProductRepositoryTests.cs b/backend/HardwarePerformance.Infrastructure.Tests/Repositories/ProductRepositoryTests.cs new file mode 100644 index 00000000..11398278 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/Repositories/ProductRepositoryTests.cs @@ -0,0 +1,561 @@ +using Microsoft.EntityFrameworkCore; +using HardwarePerformance.Application.Interfaces; +using HardwarePerformance.Core.Entities; +using HardwarePerformance.Infrastructure.Data; +using HardwarePerformance.Infrastructure.Repositories; + +namespace HardwarePerformance.Infrastructure.Tests.Repositories +{ + /// + /// ProductRepository单元测试 + /// + public class ProductRepositoryTests : TestBase + { + private readonly IProductRepository _productRepository; + + public ProductRepositoryTests() + { + _productRepository = new ProductRepository(_context); + } + + [Fact] + public async Task GetByIdAsync_WithValidId_ReturnsProduct() + { + // Arrange + var productId = 1; + + // Act + var result = await _productRepository.GetByIdAsync(productId); + + // Assert + Assert.NotNull(result); + Assert.Equal(productId, result.Id); + Assert.Equal("Snapdragon 8 Gen 3", result.Name); + } + + [Fact] + public async Task GetByIdAsync_WithInvalidId_ReturnsNull() + { + // Arrange + var productId = 999; + + // Act + var result = await _productRepository.GetByIdAsync(productId); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task GetAllAsync_ReturnsAllProducts() + { + // Act + var result = await _productRepository.GetAllAsync(); + + // Assert + Assert.NotNull(result); + Assert.Equal(6, result.Count()); + } + + [Fact] + public async Task FindAsync_WithValidPredicate_ReturnsFilteredProducts() + { + // Arrange + Expression> predicate = p => p.CategoryId == 1; + + // Act + var result = await _productRepository.FindAsync(predicate); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Count()); + Assert.All(result, p => Assert.Equal(1, p.CategoryId)); + } + + [Fact] + public async Task ExistsAsync_WithExistingProduct_ReturnsTrue() + { + // Arrange + Expression> predicate = p => p.Name == "Snapdragon 8 Gen 3"; + + // Act + var result = await _productRepository.ExistsAsync(predicate); + + // Assert + Assert.True(result); + } + + [Fact] + public async Task ExistsAsync_WithNonExistingProduct_ReturnsFalse() + { + // Arrange + Expression> predicate = p => p.Name == "不存在的产品"; + + // Act + var result = await _productRepository.ExistsAsync(predicate); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task AddAsync_WithValidProduct_ReturnsAddedProduct() + { + // Arrange + var newProduct = new Product + { + Name = "测试产品", + Model = "Test-001", + Manufacturer = "测试厂商", + CategoryId = 1, + ReleaseDate = DateTime.Now, + ImageUrl = "test.jpg", + Description = "测试产品描述", + CurrentRank = 0 + }; + + // Act + var result = await _productRepository.AddAsync(newProduct); + + // Assert + Assert.NotNull(result); + Assert.True(result.Id > 0); + Assert.Equal("测试产品", result.Name); + + // 验证是否已添加到数据库 + var savedProduct = await _productRepository.GetByIdAsync(result.Id); + Assert.NotNull(savedProduct); + Assert.Equal("测试产品", savedProduct.Name); + } + + [Fact] + public async Task UpdateAsync_WithValidProduct_ReturnsUpdatedProduct() + { + // Arrange + var product = await _productRepository.GetByIdAsync(1); + product.Description = "更新后的描述"; + + // Act + var result = await _productRepository.UpdateAsync(product); + + // Assert + Assert.NotNull(result); + Assert.Equal("更新后的描述", result.Description); + + // 验证是否已更新到数据库 + var savedProduct = await _productRepository.GetByIdAsync(1); + Assert.Equal("更新后的描述", savedProduct.Description); + } + + [Fact] + public async Task DeleteAsync_WithValidProduct_ReturnsTrue() + { + // Arrange + var product = await _productRepository.GetByIdAsync(1); + + // Act + var result = await _productRepository.DeleteAsync(product); + + // Assert + Assert.True(result); + + // 验证是否已从数据库删除 + var deletedProduct = await _productRepository.GetByIdAsync(1); + Assert.Null(deletedProduct); + } + + [Fact] + public async Task DeleteByIdAsync_WithValidId_ReturnsTrue() + { + // Arrange + var productId = 1; + + // Act + var result = await _productRepository.DeleteByIdAsync(productId); + + // Assert + Assert.True(result); + + // 验证是否已从数据库删除 + var deletedProduct = await _productRepository.GetByIdAsync(productId); + Assert.Null(deletedProduct); + } + + [Fact] + public async Task DeleteByIdAsync_WithInvalidId_ReturnsFalse() + { + // Arrange + var productId = 999; + + // Act + var result = await _productRepository.DeleteByIdAsync(productId); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task CountAsync_ReturnsCorrectCount() + { + // Act + var result = await _productRepository.CountAsync(); + + // Assert + Assert.Equal(6, result); + } + + [Fact] + public async Task CountAsync_WithPredicate_ReturnsCorrectCount() + { + // Arrange + Expression> predicate = p => p.CategoryId == 1; + + // Act + var result = await _productRepository.CountAsync(predicate); + + // Assert + Assert.Equal(2, result); + } + + [Fact] + public async Task GetByCategoryAsync_WithValidCategory_ReturnsPagedProducts() + { + // Arrange + var categoryId = 1; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.GetByCategoryAsync(categoryId, page, pageSize, sortBy, ascending); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Items.Count()); + Assert.Equal(2, result.TotalCount); + Assert.Equal(1, result.Page); + Assert.Equal(10, result.PageSize); + Assert.Equal(1, result.TotalPages); + } + + [Fact] + public async Task GetByCategoryAsync_WithInvalidCategory_ReturnsEmptyResult() + { + // Arrange + var categoryId = 999; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.GetByCategoryAsync(categoryId, page, pageSize, sortBy, ascending); + + // Assert + Assert.NotNull(result); + Assert.Empty(result.Items); + Assert.Equal(0, result.TotalCount); + Assert.Equal(1, result.Page); + Assert.Equal(10, result.PageSize); + Assert.Equal(0, result.TotalPages); + } + + [Fact] + public async Task GetByCategoryAsync_WithPagination_ReturnsCorrectPage() + { + // Arrange + var categoryId = 1; + var page = 1; + var pageSize = 1; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.GetByCategoryAsync(categoryId, page, pageSize, sortBy, ascending); + + // Assert + Assert.NotNull(result); + Assert.Single(result.Items); + Assert.Equal(2, result.TotalCount); + Assert.Equal(1, result.Page); + Assert.Equal(1, result.PageSize); + Assert.Equal(2, result.TotalPages); + } + + [Fact] + public async Task GetByCategoryAsync_WithSortByScore_ReturnsSortedProducts() + { + // Arrange + var categoryId = 1; + var page = 1; + var pageSize = 10; + var sortBy = "PerformanceScore"; + var ascending = false; + + // Act + var result = await _productRepository.GetByCategoryAsync(categoryId, page, pageSize, sortBy, ascending); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Items.Count()); + + // 验证按性能分数降序排列 + var products = result.Items.ToList(); + Assert.True(products[0].PerformanceScore >= products[1].PerformanceScore); + } + + [Fact] + public async Task SearchAsync_WithValidQuery_ReturnsPagedResults() + { + // Arrange + var query = "Snapdragon"; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.SearchAsync(query, page, pageSize, sortBy, ascending); + + // Assert + Assert.NotNull(result); + Assert.Single(result.Items); + Assert.Equal(1, result.TotalCount); + Assert.Equal(1, result.Page); + Assert.Equal(10, result.PageSize); + Assert.Equal(1, result.TotalPages); + } + + [Fact] + public async Task SearchAsync_WithInvalidQuery_ReturnsEmptyResult() + { + // Arrange + var query = "不存在的产品"; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.SearchAsync(query, page, pageSize, sortBy, ascending); + + // Assert + Assert.NotNull(result); + Assert.Empty(result.Items); + Assert.Equal(0, result.TotalCount); + Assert.Equal(1, result.Page); + Assert.Equal(10, result.PageSize); + Assert.Equal(0, result.TotalPages); + } + + [Fact] + public async Task SearchAsync_WithCategoryFilter_ReturnsFilteredResults() + { + // Arrange + var query = "Gen"; + var categoryId = 1; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.SearchAsync(query, page, pageSize, sortBy, ascending, categoryId); + + // Assert + Assert.NotNull(result); + Assert.Single(result.Items); + Assert.Equal(1, result.TotalCount); + Assert.Equal(1, result.Items.First().CategoryId); + } + + [Fact] + public async Task SearchAsync_WithManufacturerFilter_ReturnsFilteredResults() + { + // Arrange + var query = "Gen"; + var manufacturer = "Qualcomm"; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.SearchAsync(query, page, pageSize, sortBy, ascending, null, manufacturer); + + // Assert + Assert.NotNull(result); + Assert.Single(result.Items); + Assert.Equal("Qualcomm", result.Items.First().Manufacturer); + } + + [Fact] + public async Task FilterAsync_WithScoreRange_ReturnsFilteredResults() + { + // Arrange + var minScore = 2000; + var maxScore = 3000; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.FilterAsync(minScore, maxScore, page, pageSize, sortBy, ascending); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Items.Count()); + Assert.Equal(2, result.TotalCount); + Assert.All(result.Items, p => Assert.True(p.PerformanceScore >= minScore && p.PerformanceScore <= maxScore)); + } + + [Fact] + public async Task FilterAsync_WithYearFilter_ReturnsFilteredResults() + { + // Arrange + var year = 2023; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.FilterAsync(null, null, page, pageSize, sortBy, ascending, year); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Items.Count()); + Assert.Equal(2, result.TotalCount); + Assert.All(result.Items, p => Assert.Equal(year, p.ReleaseDate.Year)); + } + + [Fact] + public async Task FilterAsync_WithManufacturerFilter_ReturnsFilteredResults() + { + // Arrange + var manufacturer = "Qualcomm"; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.FilterAsync(null, null, page, pageSize, sortBy, ascending, null, manufacturer); + + // Assert + Assert.NotNull(result); + Assert.Single(result.Items); + Assert.Equal(1, result.TotalCount); + Assert.Equal(manufacturer, result.Items.First().Manufacturer); + } + + [Fact] + public async Task FilterAsync_WithCategoryFilter_ReturnsFilteredResults() + { + // Arrange + var categoryId = 1; + var page = 1; + var pageSize = 10; + var sortBy = "Name"; + var ascending = true; + + // Act + var result = await _productRepository.FilterAsync(null, null, page, pageSize, sortBy, ascending, null, null, categoryId); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Items.Count()); + Assert.Equal(2, result.TotalCount); + Assert.All(result.Items, p => Assert.Equal(categoryId, p.CategoryId)); + } + + [Fact] + public async Task GetTopNByCategoryAsync_WithValidParameters_ReturnsTopProducts() + { + // Arrange + var categoryId = 1; + var n = 1; + + // Act + var result = await _productRepository.GetTopNByCategoryAsync(categoryId, n); + + // Assert + Assert.NotNull(result); + Assert.Single(result); + Assert.Equal(categoryId, result.First().CategoryId); + } + + [Fact] + public async Task GetTopNByCategoryAsync_WithInvalidCategory_ReturnsEmptyResult() + { + // Arrange + var categoryId = 999; + var n = 5; + + // Act + var result = await _productRepository.GetTopNByCategoryAsync(categoryId, n); + + // Assert + Assert.NotNull(result); + Assert.Empty(result); + } + + [Fact] + public async Task GetByModelAsync_WithExistingModel_ReturnsProduct() + { + // Arrange + var model = "SM-G998B"; + + // Act + var result = await _productRepository.GetByModelAsync(model); + + // Assert + Assert.NotNull(result); + Assert.Equal(model, result.Model); + } + + [Fact] + public async Task GetByModelAsync_WithNonExistingModel_ReturnsNull() + { + // Arrange + var model = "不存在的型号"; + + // Act + var result = await _productRepository.GetByModelAsync(model); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task GetByManufacturerAsync_WithExistingManufacturer_ReturnsProducts() + { + // Arrange + var manufacturer = "Qualcomm"; + + // Act + var result = await _productRepository.GetByManufacturerAsync(manufacturer); + + // Assert + Assert.NotNull(result); + Assert.Single(result); + Assert.Equal(manufacturer, result.First().Manufacturer); + } + + [Fact] + public async Task GetByManufacturerAsync_WithNonExistingManufacturer_ReturnsEmptyResult() + { + // Arrange + var manufacturer = "不存在的厂商"; + + // Act + var result = await _productRepository.GetByManufacturerAsync(manufacturer); + + // Assert + Assert.NotNull(result); + Assert.Empty(result); + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/Repositories/RepositoryTests.cs b/backend/HardwarePerformance.Infrastructure.Tests/Repositories/RepositoryTests.cs new file mode 100644 index 00000000..67deab97 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/Repositories/RepositoryTests.cs @@ -0,0 +1,394 @@ +using Microsoft.EntityFrameworkCore; +using HardwarePerformance.Core.Entities; +using HardwarePerformance.Infrastructure.Data; +using HardwarePerformance.Infrastructure.Repositories; + +namespace HardwarePerformance.Infrastructure.Tests.Repositories +{ + /// + /// Repository基类单元测试 + /// + public class RepositoryTests : TestBase + { + private readonly Repository _categoryRepository; + private readonly Repository _productRepository; + + public RepositoryTests() + { + _categoryRepository = new Repository(_context); + _productRepository = new Repository(_context); + } + + [Fact] + public async Task GetByIdAsync_WithValidId_ReturnsEntity() + { + // Arrange + var categoryId = 1; + + // Act + var result = await _categoryRepository.GetByIdAsync(categoryId); + + // Assert + Assert.NotNull(result); + Assert.Equal(categoryId, result.Id); + } + + [Fact] + public async Task GetByIdAsync_WithInvalidId_ReturnsNull() + { + // Arrange + var categoryId = 999; + + // Act + var result = await _categoryRepository.GetByIdAsync(categoryId); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task GetAllAsync_ReturnsAllEntities() + { + // Act + var result = await _categoryRepository.GetAllAsync(); + + // Assert + Assert.NotNull(result); + Assert.Equal(4, result.Count()); + } + + [Fact] + public async Task FindAsync_WithValidPredicate_ReturnsFilteredEntities() + { + // Arrange + var predicate = (Category c) => c.Name.Contains("CPU"); + + // Act + var result = await _categoryRepository.FindAsync(predicate); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Count()); + Assert.All(result, c => Assert.Contains("CPU", c.Name)); + } + + [Fact] + public async Task ExistsAsync_WithExistingEntity_ReturnsTrue() + { + // Arrange + var predicate = (Category c) => c.Name == "手机CPU"; + + // Act + var result = await _categoryRepository.ExistsAsync(predicate); + + // Assert + Assert.True(result); + } + + [Fact] + public async Task ExistsAsync_WithNonExistingEntity_ReturnsFalse() + { + // Arrange + var predicate = (Category c) => c.Name == "不存在的类别"; + + // Act + var result = await _categoryRepository.ExistsAsync(predicate); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task AddAsync_WithValidEntity_ReturnsAddedEntity() + { + // Arrange + var newCategory = new Category + { + Name = "测试类别", + Description = "测试类别描述", + Icon = "test" + }; + + // Act + var result = await _categoryRepository.AddAsync(newCategory); + + // Assert + Assert.NotNull(result); + Assert.True(result.Id > 0); + Assert.Equal("测试类别", result.Name); + + // 验证是否已添加到数据库 + var savedCategory = await _categoryRepository.GetByIdAsync(result.Id); + Assert.NotNull(savedCategory); + Assert.Equal("测试类别", savedCategory.Name); + } + + [Fact] + public async Task UpdateAsync_WithValidEntity_ReturnsUpdatedEntity() + { + // Arrange + var category = await _categoryRepository.GetByIdAsync(1); + category.Description = "更新后的描述"; + + // Act + var result = await _categoryRepository.UpdateAsync(category); + + // Assert + Assert.NotNull(result); + Assert.Equal("更新后的描述", result.Description); + + // 验证是否已更新到数据库 + var savedCategory = await _categoryRepository.GetByIdAsync(1); + Assert.Equal("更新后的描述", savedCategory.Description); + } + + [Fact] + public async Task DeleteAsync_WithValidEntity_ReturnsTrue() + { + // Arrange + var category = await _categoryRepository.GetByIdAsync(1); + + // Act + var result = await _categoryRepository.DeleteAsync(category); + + // Assert + Assert.True(result); + + // 验证是否已从数据库删除 + var deletedCategory = await _categoryRepository.GetByIdAsync(1); + Assert.Null(deletedCategory); + } + + [Fact] + public async Task DeleteByIdAsync_WithValidId_ReturnsTrue() + { + // Arrange + var categoryId = 1; + + // Act + var result = await _categoryRepository.DeleteByIdAsync(categoryId); + + // Assert + Assert.True(result); + + // 验证是否已从数据库删除 + var deletedCategory = await _categoryRepository.GetByIdAsync(categoryId); + Assert.Null(deletedCategory); + } + + [Fact] + public async Task DeleteByIdAsync_WithInvalidId_ReturnsFalse() + { + // Arrange + var categoryId = 999; + + // Act + var result = await _categoryRepository.DeleteByIdAsync(categoryId); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task CountAsync_ReturnsCorrectCount() + { + // Act + var result = await _categoryRepository.CountAsync(); + + // Assert + Assert.Equal(4, result); + } + + [Fact] + public async Task CountAsync_WithPredicate_ReturnsCorrectCount() + { + // Arrange + var predicate = (Category c) => c.Name.Contains("CPU"); + + // Act + var result = await _categoryRepository.CountAsync(predicate); + + // Assert + Assert.Equal(2, result); + } + + [Fact] + public async Task AddRangeAsync_WithValidEntities_ReturnsAddedEntities() + { + // Arrange + var newCategories = new List + { + new Category + { + Name = "测试类别1", + Description = "测试类别描述1", + Icon = "test1" + }, + new Category + { + Name = "测试类别2", + Description = "测试类别描述2", + Icon = "test2" + } + }; + + // Act + var result = await _categoryRepository.AddRangeAsync(newCategories); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Count()); + Assert.All(result, c => Assert.True(c.Id > 0)); + + // 验证是否已添加到数据库 + var savedCategories = await _categoryRepository.FindAsync(c => c.Name.Contains("测试类别")); + Assert.Equal(2, savedCategories.Count()); + } + + [Fact] + public async Task UpdateRangeAsync_WithValidEntities_ReturnsUpdatedEntities() + { + // Arrange + var categories = await _categoryRepository.FindAsync(c => c.Name.Contains("CPU")); + foreach (var category in categories) + { + category.Description = "更新后的描述"; + } + + // Act + var result = await _categoryRepository.UpdateRangeAsync(categories); + + // Assert + Assert.NotNull(result); + Assert.Equal(2, result.Count()); + Assert.All(result, c => Assert.Equal("更新后的描述", c.Description)); + + // 验证是否已更新到数据库 + var savedCategories = await _categoryRepository.FindAsync(c => c.Name.Contains("CPU")); + Assert.All(savedCategories, c => Assert.Equal("更新后的描述", c.Description)); + } + + [Fact] + public async Task DeleteRangeAsync_WithValidEntities_ReturnsTrue() + { + // Arrange + var categories = await _categoryRepository.FindAsync(c => c.Name.Contains("CPU")); + + // Act + var result = await _categoryRepository.DeleteRangeAsync(categories); + + // Assert + Assert.True(result); + + // 验证是否已从数据库删除 + var deletedCategories = await _categoryRepository.FindAsync(c => c.Name.Contains("CPU")); + Assert.Empty(deletedCategories); + } + + [Fact] + public async Task FirstOrDefaultAsync_WithValidPredicate_ReturnsEntity() + { + // Arrange + var predicate = (Category c) => c.Name.Contains("CPU"); + + // Act + var result = await _categoryRepository.FirstOrDefaultAsync(predicate); + + // Assert + Assert.NotNull(result); + Assert.Contains("CPU", result.Name); + } + + [Fact] + public async Task FirstOrDefaultAsync_WithInvalidPredicate_ReturnsNull() + { + // Arrange + var predicate = (Category c) => c.Name == "不存在的类别"; + + // Act + var result = await _categoryRepository.FirstOrDefaultAsync(predicate); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task LastOrDefaultAsync_WithValidPredicate_ReturnsEntity() + { + // Arrange + var predicate = (Category c) => c.Name.Contains("CPU"); + + // Act + var result = await _categoryRepository.LastOrDefaultAsync(predicate); + + // Assert + Assert.NotNull(result); + Assert.Contains("CPU", result.Name); + } + + [Fact] + public async Task LastOrDefaultAsync_WithInvalidPredicate_ReturnsNull() + { + // Arrange + var predicate = (Category c) => c.Name == "不存在的类别"; + + // Act + var result = await _categoryRepository.LastOrDefaultAsync(predicate); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task AnyAsync_WithValidPredicate_ReturnsTrue() + { + // Arrange + var predicate = (Category c) => c.Name.Contains("CPU"); + + // Act + var result = await _categoryRepository.AnyAsync(predicate); + + // Assert + Assert.True(result); + } + + [Fact] + public async Task AnyAsync_WithInvalidPredicate_ReturnsFalse() + { + // Arrange + var predicate = (Category c) => c.Name == "不存在的类别"; + + // Act + var result = await _categoryRepository.AnyAsync(predicate); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task AllAsync_WithValidPredicate_ReturnsTrue() + { + // Arrange + var predicate = (Category c) => !string.IsNullOrEmpty(c.Name); + + // Act + var result = await _categoryRepository.AllAsync(predicate); + + // Assert + Assert.True(result); + } + + [Fact] + public async Task AllAsync_WithInvalidPredicate_ReturnsFalse() + { + // Arrange + var predicate = (Category c) => c.Name == "手机CPU"; + + // Act + var result = await _categoryRepository.AllAsync(predicate); + + // Assert + Assert.False(result); + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/TestBase.cs b/backend/HardwarePerformance.Infrastructure.Tests/TestBase.cs new file mode 100644 index 00000000..3ce59259 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/TestBase.cs @@ -0,0 +1,194 @@ +using Microsoft.EntityFrameworkCore; +using HardwarePerformance.Core.Entities; +using HardwarePerformance.Infrastructure.Data; + +namespace HardwarePerformance.Infrastructure.Tests +{ + /// + /// 测试基类,提供InMemory数据库设置 + /// + public abstract class TestBase : IDisposable + { + protected AppDbContext _context; + protected DbContextOptions _options; + + public TestBase() + { + // 创建InMemory数据库选项 + _options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + // 创建数据库上下文 + _context = new AppDbContext(_options); + + // 初始化数据库 + SeedDatabase(); + } + + /// + /// 初始化测试数据 + /// + protected virtual void SeedDatabase() + { + // 创建测试类别 + var categories = new List + { + new Category { Id = 1, Name = "手机CPU", Description = "移动设备处理器", IconUrl = "cpu" }, + new Category { Id = 2, Name = "电脑CPU", Description = "桌面处理器", IconUrl = "desktop" }, + new Category { Id = 3, Name = "手机GPU", Description = "移动设备图形处理器", IconUrl = "gpu" }, + new Category { Id = 4, Name = "电脑GPU", Description = "桌面图形处理器", IconUrl = "graphics" } + }; + + _context.Categories.AddRange(categories); + + // 创建测试数据源 + var dataSources = new List + { + new DataSource { Id = 1, Name = "GeekBench", Description = "GeekBench基准测试", Url = "https://www.geekbench.com" }, + new DataSource { Id = 2, Name = "3DMark", Description = "3DMark图形性能测试", Url = "https://www.3dmark.com" }, + new DataSource { Id = 3, Name = "AnTuTu", Description = "AnTuTu综合性能测试", Url = "https://www.antutu.com" } + }; + + _context.DataSources.AddRange(dataSources); + + // 创建测试产品 + var products = new List + { + new Product + { + Id = 1, + Name = "Snapdragon 8 Gen 3", + Model = "SM8650-AB", + Manufacturer = "Qualcomm", + CategoryId = 1, + ReleaseDate = new DateTime(2023, 10, 24), + CurrentRank = 1, + ImageUrl = "https://example.com/snapdragon8gen3.jpg" + }, + new Product + { + Id = 2, + Name = "Apple A17 Pro", + Model = "A17 Pro", + Manufacturer = "Apple", + CategoryId = 1, + ReleaseDate = new DateTime(2023, 9, 12), + CurrentRank = 2, + ImageUrl = "https://example.com/a17pro.jpg" + }, + new Product + { + Id = 3, + Name = "Intel Core i9-13900K", + Model = "i9-13900K", + Manufacturer = "Intel", + CategoryId = 2, + ReleaseDate = new DateTime(2022, 10, 20), + CurrentRank = 1, + ImageUrl = "https://example.com/i913900k.jpg" + }, + new Product + { + Id = 4, + Name = "AMD Ryzen 9 7950X", + Model = "Ryzen 9 7950X", + Manufacturer = "AMD", + CategoryId = 2, + ReleaseDate = new DateTime(2022, 9, 27), + CurrentRank = 2, + ImageUrl = "https://example.com/ryzen97950x.jpg" + } + }; + + _context.Products.AddRange(products); + + // 创建测试性能分数 + var performanceScores = new List + { + new PerformanceScore + { + Id = 1, + ProductId = 1, + DataSourceId = 1, + Score = 7300, + TestType = "Single-Core", + TestDate = new DateTime(2023, 11, 1) + }, + new PerformanceScore + { + Id = 2, + ProductId = 1, + DataSourceId = 1, + Score = 22000, + TestType = "Multi-Core", + TestDate = new DateTime(2023, 11, 1) + }, + new PerformanceScore + { + Id = 3, + ProductId = 2, + DataSourceId = 1, + Score = 7100, + TestType = "Single-Core", + TestDate = new DateTime(2023, 10, 1) + }, + new PerformanceScore + { + Id = 4, + ProductId = 2, + DataSourceId = 1, + Score = 21000, + TestType = "Multi-Core", + TestDate = new DateTime(2023, 10, 1) + }, + new PerformanceScore + { + Id = 5, + ProductId = 3, + DataSourceId = 1, + Score = 3200, + TestType = "Single-Core", + TestDate = new DateTime(2022, 11, 1) + }, + new PerformanceScore + { + Id = 6, + ProductId = 3, + DataSourceId = 1, + Score = 22000, + TestType = "Multi-Core", + TestDate = new DateTime(2022, 11, 1) + }, + new PerformanceScore + { + Id = 7, + ProductId = 4, + DataSourceId = 1, + Score = 3100, + TestType = "Single-Core", + TestDate = new DateTime(2022, 10, 1) + }, + new PerformanceScore + { + Id = 8, + ProductId = 4, + DataSourceId = 1, + Score = 21000, + TestType = "Multi-Core", + TestDate = new DateTime(2022, 10, 1) + } + }; + + _context.PerformanceScores.AddRange(performanceScores); + + // 保存更改 + _context.SaveChanges(); + } + + public void Dispose() + { + _context.Dispose(); + } + } +} \ No newline at end of file diff --git a/HardwarePerformance.Tests/UnitTest1.cs b/backend/HardwarePerformance.Infrastructure.Tests/UnitTest1.cs similarity index 58% rename from HardwarePerformance.Tests/UnitTest1.cs rename to backend/HardwarePerformance.Infrastructure.Tests/UnitTest1.cs index 40595b82..2392fad0 100644 --- a/HardwarePerformance.Tests/UnitTest1.cs +++ b/backend/HardwarePerformance.Infrastructure.Tests/UnitTest1.cs @@ -1,4 +1,4 @@ -namespace HardwarePerformance.Tests; +namespace HardwarePerformance.Infrastructure.Tests; public class UnitTest1 { diff --git a/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net10.0/.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net10.0/.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests new file mode 100644 index 00000000..4bcfb21a Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net10.0/.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests differ diff --git a/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net10.0/CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net10.0/CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests new file mode 100644 index 00000000..4bcfb21a Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net10.0/CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests differ diff --git a/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net9.0/.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net9.0/.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests new file mode 100644 index 00000000..4bcfb21a Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net9.0/.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests differ diff --git a/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net9.0/CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net9.0/CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests new file mode 100644 index 00000000..4bcfb21a Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/bin/Debug/net9.0/CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests differ diff --git a/TestAPI/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs similarity index 63% rename from TestAPI/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs rename to backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs index feda5e9f..925b1351 100644 --- a/TestAPI/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs @@ -1,4 +1,4 @@ // using System; using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] diff --git a/TestAPI/obj/Debug/net9.0/TestAPI.AssemblyInfo.cs b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs similarity index 67% rename from TestAPI/obj/Debug/net9.0/TestAPI.AssemblyInfo.cs rename to backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs index 1c1c6cc2..21eb2d9a 100644 --- a/TestAPI/obj/Debug/net9.0/TestAPI.AssemblyInfo.cs +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs @@ -10,12 +10,12 @@ using System; using System.Reflection; -[assembly: System.Reflection.AssemblyCompanyAttribute("TestAPI")] +[assembly: System.Reflection.AssemblyCompanyAttribute("HardwarePerformance.Infrastructure.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("TestAPI")] -[assembly: System.Reflection.AssemblyTitleAttribute("TestAPI")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a04b856674d8e31e95655605d640e36e54e848a")] +[assembly: System.Reflection.AssemblyProductAttribute("HardwarePerformance.Infrastructure.Tests")] +[assembly: System.Reflection.AssemblyTitleAttribute("HardwarePerformance.Infrastructure.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] // 由 MSBuild WriteCodeFragment 类生成。 diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache new file mode 100644 index 00000000..ec3aeb40 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +7b902231c2e48ab332e65a2b4ef5c6c9d535f1bcd1f5ec979149f1c359df411a diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 00000000..552f224e --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,25 @@ +is_global = true +build_property.TargetFramework = net10.0 +build_property.TargetFramework = net10.0 +build_property.TargetPlatformMinVersion = +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v10.0 +build_property.RootNamespace = HardwarePerformance.Infrastructure.Tests +build_property.ProjectDir = D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 10.0 +build_property.EnableCodeStyleSeverity = diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.GlobalUsings.g.cs b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.GlobalUsings.g.cs new file mode 100644 index 00000000..fe437528 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.GlobalUsings.g.cs @@ -0,0 +1,9 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; +global using Xunit; diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.assets.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.assets.cache new file mode 100644 index 00000000..27750e40 Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.assets.cache differ diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache new file mode 100644 index 00000000..97e9cfa1 Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache differ diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache new file mode 100644 index 00000000..f974e604 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +5860a4ce971866dba35d44b2050be58702ea8ebb84bbdbbea4616f7f7b624bcb diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.FileListAbsolute.txt b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.FileListAbsolute.txt new file mode 100644 index 00000000..cfaaa015 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net10.0/HardwarePerformance.Infrastructure.Tests.csproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\bin\Debug\net10.0\.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\bin\Debug\net10.0\CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net10.0\HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net10.0\HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net10.0\HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net10.0\HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net10.0\HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache diff --git a/MinimalAPI/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs similarity index 100% rename from MinimalAPI/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs rename to backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs diff --git a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.AssemblyInfo.cs b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs similarity index 67% rename from MinimalAPI/obj/Debug/net9.0/MinimalAPI.AssemblyInfo.cs rename to backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs index ce23f3c6..21eb2d9a 100644 --- a/MinimalAPI/obj/Debug/net9.0/MinimalAPI.AssemblyInfo.cs +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs @@ -10,12 +10,12 @@ using System; using System.Reflection; -[assembly: System.Reflection.AssemblyCompanyAttribute("MinimalAPI")] +[assembly: System.Reflection.AssemblyCompanyAttribute("HardwarePerformance.Infrastructure.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("MinimalAPI")] -[assembly: System.Reflection.AssemblyTitleAttribute("MinimalAPI")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a04b856674d8e31e95655605d640e36e54e848a")] +[assembly: System.Reflection.AssemblyProductAttribute("HardwarePerformance.Infrastructure.Tests")] +[assembly: System.Reflection.AssemblyTitleAttribute("HardwarePerformance.Infrastructure.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] // 由 MSBuild WriteCodeFragment 类生成。 diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache new file mode 100644 index 00000000..ec3aeb40 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +7b902231c2e48ab332e65a2b4ef5c6c9d535f1bcd1f5ec979149f1c359df411a diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 00000000..5c868e1a --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,25 @@ +is_global = true +build_property.TargetFramework = net9.0 +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v9.0 +build_property.RootNamespace = HardwarePerformance.Infrastructure.Tests +build_property.ProjectDir = D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 9.0 +build_property.EnableCodeStyleSeverity = diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.GlobalUsings.g.cs b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.GlobalUsings.g.cs new file mode 100644 index 00000000..fe437528 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.GlobalUsings.g.cs @@ -0,0 +1,9 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; +global using Xunit; diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.assets.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.assets.cache new file mode 100644 index 00000000..71aa8799 Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.assets.cache differ diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache new file mode 100644 index 00000000..97e9cfa1 Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache differ diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache new file mode 100644 index 00000000..bde959ab --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +e6b1baa28f38e7bd8b31680a063e6a027707f05d15b6756c7e4e4c205ad503ce diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.FileListAbsolute.txt b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.FileListAbsolute.txt new file mode 100644 index 00000000..46f38fb2 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/Debug/net9.0/HardwarePerformance.Infrastructure.Tests.csproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\bin\Debug\net9.0\.msCoverageSourceRootsMapping_HardwarePerformance.Infrastructure.Tests +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\bin\Debug\net9.0\CoverletSourceRootsMapping_HardwarePerformance.Infrastructure.Tests +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net9.0\HardwarePerformance.Infrastructure.Tests.csproj.AssemblyReference.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net9.0\HardwarePerformance.Infrastructure.Tests.GeneratedMSBuildEditorConfig.editorconfig +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net9.0\HardwarePerformance.Infrastructure.Tests.AssemblyInfoInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net9.0\HardwarePerformance.Infrastructure.Tests.AssemblyInfo.cs +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure.Tests\obj\Debug\net9.0\HardwarePerformance.Infrastructure.Tests.csproj.CoreCompileInputs.cache diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.dgspec.json b/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.dgspec.json new file mode 100644 index 00000000..8e21d074 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.dgspec.json @@ -0,0 +1,417 @@ +{ + "format": 1, + "restore": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\HardwarePerformance.Infrastructure.Tests.csproj": {} + }, + "projects": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "projectName": "HardwarePerformance.Application", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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": [ + "net9.0" + ], + "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://nuget.cdn.azure.cn/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.100" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" + } + } + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "projectName": "HardwarePerformance.Core", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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": [ + "net9.0" + ], + "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://nuget.cdn.azure.cn/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.100" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" + } + } + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\HardwarePerformance.Infrastructure.Tests.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\HardwarePerformance.Infrastructure.Tests.csproj", + "projectName": "HardwarePerformance.Infrastructure.Tests", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\HardwarePerformance.Infrastructure.Tests.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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": [ + "net9.0" + ], + "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://nuget.cdn.azure.cn/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.100" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "Microsoft.EntityFrameworkCore.InMemory": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.14.1, )" + }, + "Moq": { + "target": "Package", + "version": "[4.20.72, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[6.0.4, )" + }, + "xunit": { + "target": "Package", + "version": "[2.9.3, )" + }, + "xunit.runner.visualstudio": { + "target": "Package", + "version": "[3.1.4, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" + } + } + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "projectName": "HardwarePerformance.Infrastructure", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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": [ + "net9.0" + ], + "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://nuget.cdn.azure.cn/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.100" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "Microsoft.EntityFrameworkCore": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.EntityFrameworkCore.Design": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.EntityFrameworkCore.Tools": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.Logging.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "MySql.Data": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Pomelo.EntityFrameworkCore.MySql": { + "target": "Package", + "version": "[9.0.0, )" + }, + "StackExchange.Redis": { + "target": "Package", + "version": "[2.7.27, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.g.props b/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.g.props new file mode 100644 index 00000000..ade00e9f --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.g.props @@ -0,0 +1,30 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\Administrator\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 7.0.0 + + + + + + + + + + + + + + + + C:\Users\Administrator\.nuget\packages\xunit.analyzers\1.18.0 + C:\Users\Administrator\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.4 + C:\Users\Administrator\.nuget\packages\microsoft.entityframeworkcore.tools\9.0.0 + + \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.g.targets b/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.g.targets new file mode 100644 index 00000000..b1bfe7db --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/HardwarePerformance.Infrastructure.Tests.csproj.nuget.g.targets @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/project.assets.json b/backend/HardwarePerformance.Infrastructure.Tests/obj/project.assets.json new file mode 100644 index 00000000..899291ef --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/project.assets.json @@ -0,0 +1,5468 @@ +{ + "version": 3, + "targets": { + "net9.0": { + "BouncyCastle.Cryptography/2.3.1": { + "type": "package", + "compile": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "related": ".xml" + } + } + }, + "Castle.Core/5.1.1": { + "type": "package", + "dependencies": { + "System.Diagnostics.EventLog": "6.0.0" + }, + "compile": { + "lib/net6.0/Castle.Core.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Castle.Core.dll": { + "related": ".xml" + } + } + }, + "coverlet.collector/6.0.4": { + "type": "package", + "build": { + "build/netstandard2.0/coverlet.collector.targets": {} + } + }, + "Google.Protobuf/3.26.1": { + "type": "package", + "compile": { + "lib/net5.0/Google.Protobuf.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net5.0/Google.Protobuf.dll": { + "related": ".pdb;.xml" + } + } + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "compile": { + "lib/net6.0/Humanizer.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Humanizer.dll": { + "related": ".xml" + } + } + }, + "K4os.Compression.LZ4/1.3.8": { + "type": "package", + "compile": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "related": ".xml" + } + } + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "type": "package", + "dependencies": { + "K4os.Compression.LZ4": "1.3.8", + "K4os.Hash.xxHash": "1.0.8", + "System.IO.Pipelines": "6.0.3" + }, + "compile": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "related": ".xml" + } + } + }, + "K4os.Hash.xxHash/1.0.8": { + "type": "package", + "compile": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "type": "package", + "compile": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Build.Framework/17.8.3": { + "type": "package", + "compile": { + "ref/net8.0/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.Build.Locator/1.7.8": { + "type": "package", + "compile": { + "lib/net6.0/Microsoft.Build.Locator.dll": {} + }, + "runtime": { + "lib/net6.0/Microsoft.Build.Locator.dll": {} + }, + "build": { + "build/_._": {} + } + }, + "Microsoft.CodeAnalysis.Analyzers/3.3.4": { + "type": "package", + "build": { + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props": {}, + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets": {} + } + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.4", + "System.Collections.Immutable": "7.0.0", + "System.Reflection.Metadata": "7.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[4.8.0]" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "[4.8.0]", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "System.Composition": "7.0.0", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Channels": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.Build.Framework": "16.10.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]", + "System.Text.Json": "7.0.3" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "related": ".pdb;.runtimeconfig.json;.xml" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "related": ".BuildHost.pdb;.BuildHost.runtimeconfig.json;.BuildHost.xml;.pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "related": ".pdb;.runtimeconfig.json;.xml" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "related": ".BuildHost.pdb;.BuildHost.runtimeconfig.json;.BuildHost.xml;.pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeCoverage/17.14.1": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "runtime": { + "lib/net8.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "build": { + "build/netstandard2.0/Microsoft.CodeCoverage.props": {}, + "build/netstandard2.0/Microsoft.CodeCoverage.targets": {} + } + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "9.0.0", + "Microsoft.EntityFrameworkCore.Analyzers": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/9.0.0": { + "type": "package" + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Framework": "17.8.3", + "Microsoft.Build.Locator": "1.7.8", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0", + "Microsoft.EntityFrameworkCore.Relational": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyModel": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0", + "Mono.TextTemplating": "3.0.0", + "System.Text.Json": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "related": ".xml" + } + }, + "build": { + "build/net8.0/_._": {} + } + }, + "Microsoft.EntityFrameworkCore.InMemory/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.InMemory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.InMemory.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Tools/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": "9.0.0" + } + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Logging/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {} + } + }, + "Microsoft.Extensions.Options/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {} + } + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.NET.Test.Sdk/17.14.1": { + "type": "package", + "dependencies": { + "Microsoft.CodeCoverage": "17.14.1", + "Microsoft.TestPlatform.TestHost": "17.14.1" + }, + "compile": { + "lib/net8.0/_._": {} + }, + "runtime": { + "lib/net8.0/_._": {} + }, + "build": { + "build/net8.0/Microsoft.NET.Test.Sdk.props": {}, + "build/net8.0/Microsoft.NET.Test.Sdk.targets": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.TestPlatform.ObjectModel/17.14.1": { + "type": "package", + "dependencies": { + "System.Reflection.Metadata": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "runtime": { + "lib/net8.0/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "resource": { + "lib/net8.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "cs" + }, + "lib/net8.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "cs" + }, + "lib/net8.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "de" + }, + "lib/net8.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "de" + }, + "lib/net8.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "es" + }, + "lib/net8.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "es" + }, + "lib/net8.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "fr" + }, + "lib/net8.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "fr" + }, + "lib/net8.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "it" + }, + "lib/net8.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "it" + }, + "lib/net8.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ja" + }, + "lib/net8.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ja" + }, + "lib/net8.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ko" + }, + "lib/net8.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ko" + }, + "lib/net8.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pl" + }, + "lib/net8.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pl" + }, + "lib/net8.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pt-BR" + }, + "lib/net8.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ru" + }, + "lib/net8.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ru" + }, + "lib/net8.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "tr" + }, + "lib/net8.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "tr" + }, + "lib/net8.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net8.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.TestPlatform.TestHost/17.14.1": { + "type": "package", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.14.1", + "Newtonsoft.Json": "13.0.3" + }, + "compile": { + "lib/net8.0/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/net8.0/testhost.dll": { + "related": ".deps.json" + } + }, + "runtime": { + "lib/net8.0/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/net8.0/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/net8.0/testhost.dll": { + "related": ".deps.json" + } + }, + "resource": { + "lib/net8.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "cs" + }, + "lib/net8.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "cs" + }, + "lib/net8.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "cs" + }, + "lib/net8.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "de" + }, + "lib/net8.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "de" + }, + "lib/net8.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "de" + }, + "lib/net8.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "es" + }, + "lib/net8.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "es" + }, + "lib/net8.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "es" + }, + "lib/net8.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "fr" + }, + "lib/net8.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "fr" + }, + "lib/net8.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "fr" + }, + "lib/net8.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "it" + }, + "lib/net8.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "it" + }, + "lib/net8.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "it" + }, + "lib/net8.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ja" + }, + "lib/net8.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ja" + }, + "lib/net8.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ja" + }, + "lib/net8.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ko" + }, + "lib/net8.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ko" + }, + "lib/net8.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ko" + }, + "lib/net8.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pl" + }, + "lib/net8.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pl" + }, + "lib/net8.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pl" + }, + "lib/net8.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/net8.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pt-BR" + }, + "lib/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pt-BR" + }, + "lib/net8.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ru" + }, + "lib/net8.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ru" + }, + "lib/net8.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ru" + }, + "lib/net8.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "tr" + }, + "lib/net8.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "tr" + }, + "lib/net8.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "tr" + }, + "lib/net8.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net8.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net8.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/net8.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hant" + }, + "lib/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hant" + } + }, + "build": { + "build/net8.0/Microsoft.TestPlatform.TestHost.props": {}, + "build/net8.0/Microsoft.TestPlatform.TestHost.targets": {} + } + }, + "Mono.TextTemplating/3.0.0": { + "type": "package", + "dependencies": { + "System.CodeDom": "6.0.0" + }, + "compile": { + "lib/net6.0/Mono.TextTemplating.dll": {} + }, + "runtime": { + "lib/net6.0/Mono.TextTemplating.dll": {} + }, + "build": { + "buildTransitive/Mono.TextTemplating.targets": {} + } + }, + "Moq/4.20.72": { + "type": "package", + "dependencies": { + "Castle.Core": "5.1.1" + }, + "compile": { + "lib/net6.0/Moq.dll": {} + }, + "runtime": { + "lib/net6.0/Moq.dll": {} + } + }, + "MySql.Data/9.0.0": { + "type": "package", + "dependencies": { + "BouncyCastle.Cryptography": "2.3.1", + "Google.Protobuf": "3.26.1", + "K4os.Compression.LZ4.Streams": "1.3.8", + "System.Buffers": "4.5.1", + "System.Configuration.ConfigurationManager": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Runtime.Loader": "4.3.0", + "System.Security.Permissions": "8.0.0", + "System.Text.Encoding.CodePages": "8.0.0", + "System.Text.Json": "8.0.3", + "System.Threading.Tasks.Extensions": "4.5.4", + "ZstdSharp.Port": "0.8.0" + }, + "compile": { + "lib/net8.0/MySql.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MySql.Data.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win-x64/native/comerr64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/gssapi64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/k5sprt64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/krb5_64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/krbcc64.dll": { + "assetType": "native", + "rid": "win-x64" + } + } + }, + "MySqlConnector/2.4.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "compile": { + "lib/net9.0/MySqlConnector.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/MySqlConnector.dll": { + "related": ".xml" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net6.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "type": "package", + "dependencies": { + "System.IO.Pipelines": "5.0.1" + }, + "compile": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "related": ".xml" + } + } + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Relational": "[9.0.0, 9.0.999]", + "MySqlConnector": "2.4.0" + }, + "compile": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "related": ".xml" + } + } + }, + "StackExchange.Redis/2.7.27": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Pipelines.Sockets.Unofficial": "2.2.8" + }, + "compile": { + "lib/net6.0/StackExchange.Redis.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/StackExchange.Redis.dll": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.CodeDom/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Collections.Immutable/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.EventLog": "8.0.0", + "System.Security.Cryptography.ProtectedData": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/8.0.1": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Diagnostics.EventLog/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { + "assetType": "runtime", + "rid": "win" + }, + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.IO.dll": { + "related": ".xml" + } + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Reflection.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Metadata/8.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Runtime.Loader/4.3.0": { + "type": "package", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.Loader.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.5/System.Runtime.Loader.dll": {} + } + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Security.Permissions/8.0.0": { + "type": "package", + "dependencies": { + "System.Windows.Extensions": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encoding.CodePages/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Json/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/System.Text.Json.targets": {} + } + }, + "System.Threading.Channels/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": { + "related": ".xml" + } + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Windows.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "xunit/2.9.3": { + "type": "package", + "dependencies": { + "xunit.analyzers": "1.18.0", + "xunit.assert": "2.9.3", + "xunit.core": "[2.9.3]" + } + }, + "xunit.abstractions/2.0.3": { + "type": "package", + "compile": { + "lib/netstandard2.0/xunit.abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/xunit.abstractions.dll": { + "related": ".xml" + } + } + }, + "xunit.analyzers/1.18.0": { + "type": "package" + }, + "xunit.assert/2.9.3": { + "type": "package", + "compile": { + "lib/net6.0/xunit.assert.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/xunit.assert.dll": { + "related": ".xml" + } + } + }, + "xunit.core/2.9.3": { + "type": "package", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]", + "xunit.extensibility.execution": "[2.9.3]" + }, + "build": { + "build/xunit.core.props": {}, + "build/xunit.core.targets": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/xunit.core.props": {}, + "buildMultiTargeting/xunit.core.targets": {} + } + }, + "xunit.extensibility.core/2.9.3": { + "type": "package", + "dependencies": { + "xunit.abstractions": "2.0.3" + }, + "compile": { + "lib/netstandard1.1/xunit.core.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.1/xunit.core.dll": { + "related": ".xml" + } + } + }, + "xunit.extensibility.execution/2.9.3": { + "type": "package", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]" + }, + "compile": { + "lib/netstandard1.1/xunit.execution.dotnet.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.1/xunit.execution.dotnet.dll": { + "related": ".xml" + } + } + }, + "xunit.runner.visualstudio/3.1.4": { + "type": "package", + "compile": { + "lib/net8.0/_._": {} + }, + "runtime": { + "lib/net8.0/_._": {} + }, + "build": { + "build/net8.0/xunit.runner.visualstudio.props": {} + } + }, + "ZstdSharp.Port/0.8.0": { + "type": "package", + "compile": { + "lib/net8.0/ZstdSharp.dll": {} + }, + "runtime": { + "lib/net8.0/ZstdSharp.dll": {} + } + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "dependencies": { + "HardwarePerformance.Core": "1.0.0" + }, + "compile": { + "bin/placeholder/HardwarePerformance.Application.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Application.dll": {} + } + }, + "HardwarePerformance.Core/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "compile": { + "bin/placeholder/HardwarePerformance.Core.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Core.dll": {} + } + }, + "HardwarePerformance.Infrastructure/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "dependencies": { + "HardwarePerformance.Application": "1.0.0", + "HardwarePerformance.Core": "1.0.0", + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.EntityFrameworkCore.Design": "9.0.0", + "Microsoft.EntityFrameworkCore.Tools": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "MySql.Data": "9.0.0", + "Pomelo.EntityFrameworkCore.MySql": "9.0.0", + "StackExchange.Redis": "2.7.27" + }, + "compile": { + "bin/placeholder/HardwarePerformance.Infrastructure.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Infrastructure.dll": {} + } + } + } + }, + "libraries": { + "BouncyCastle.Cryptography/2.3.1": { + "sha512": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==", + "type": "package", + "path": "bouncycastle.cryptography/2.3.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "bouncycastle.cryptography.2.3.1.nupkg.sha512", + "bouncycastle.cryptography.nuspec", + "lib/net461/BouncyCastle.Cryptography.dll", + "lib/net461/BouncyCastle.Cryptography.xml", + "lib/net6.0/BouncyCastle.Cryptography.dll", + "lib/net6.0/BouncyCastle.Cryptography.xml", + "lib/netstandard2.0/BouncyCastle.Cryptography.dll", + "lib/netstandard2.0/BouncyCastle.Cryptography.xml", + "packageIcon.png" + ] + }, + "Castle.Core/5.1.1": { + "sha512": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", + "type": "package", + "path": "castle.core/5.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ASL - Apache Software Foundation License.txt", + "CHANGELOG.md", + "LICENSE", + "castle-logo.png", + "castle.core.5.1.1.nupkg.sha512", + "castle.core.nuspec", + "lib/net462/Castle.Core.dll", + "lib/net462/Castle.Core.xml", + "lib/net6.0/Castle.Core.dll", + "lib/net6.0/Castle.Core.xml", + "lib/netstandard2.0/Castle.Core.dll", + "lib/netstandard2.0/Castle.Core.xml", + "lib/netstandard2.1/Castle.Core.dll", + "lib/netstandard2.1/Castle.Core.xml", + "readme.txt" + ] + }, + "coverlet.collector/6.0.4": { + "sha512": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==", + "type": "package", + "path": "coverlet.collector/6.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "VSTestIntegration.md", + "build/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll", + "build/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "build/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "build/netstandard2.0/Microsoft.Extensions.DependencyModel.dll", + "build/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "build/netstandard2.0/Microsoft.TestPlatform.CoreUtilities.dll", + "build/netstandard2.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netstandard2.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "build/netstandard2.0/Mono.Cecil.Mdb.dll", + "build/netstandard2.0/Mono.Cecil.Pdb.dll", + "build/netstandard2.0/Mono.Cecil.Rocks.dll", + "build/netstandard2.0/Mono.Cecil.dll", + "build/netstandard2.0/Newtonsoft.Json.dll", + "build/netstandard2.0/NuGet.Frameworks.dll", + "build/netstandard2.0/NuGet.Versioning.dll", + "build/netstandard2.0/System.Buffers.dll", + "build/netstandard2.0/System.Collections.Immutable.dll", + "build/netstandard2.0/System.Memory.dll", + "build/netstandard2.0/System.Numerics.Vectors.dll", + "build/netstandard2.0/System.Reflection.Metadata.dll", + "build/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "build/netstandard2.0/System.Text.Encodings.Web.dll", + "build/netstandard2.0/System.Text.Json.dll", + "build/netstandard2.0/System.Threading.Tasks.Extensions.dll", + "build/netstandard2.0/coverlet.collector.deps.json", + "build/netstandard2.0/coverlet.collector.dll", + "build/netstandard2.0/coverlet.collector.pdb", + "build/netstandard2.0/coverlet.collector.targets", + "build/netstandard2.0/coverlet.core.dll", + "build/netstandard2.0/coverlet.core.pdb", + "build/netstandard2.0/coverlet.core.xml", + "build/netstandard2.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/netstandard2.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "coverlet-icon.png", + "coverlet.collector.6.0.4.nupkg.sha512", + "coverlet.collector.nuspec" + ] + }, + "Google.Protobuf/3.26.1": { + "sha512": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==", + "type": "package", + "path": "google.protobuf/3.26.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "google.protobuf.3.26.1.nupkg.sha512", + "google.protobuf.nuspec", + "lib/net45/Google.Protobuf.dll", + "lib/net45/Google.Protobuf.pdb", + "lib/net45/Google.Protobuf.xml", + "lib/net5.0/Google.Protobuf.dll", + "lib/net5.0/Google.Protobuf.pdb", + "lib/net5.0/Google.Protobuf.xml", + "lib/netstandard1.1/Google.Protobuf.dll", + "lib/netstandard1.1/Google.Protobuf.pdb", + "lib/netstandard1.1/Google.Protobuf.xml", + "lib/netstandard2.0/Google.Protobuf.dll", + "lib/netstandard2.0/Google.Protobuf.pdb", + "lib/netstandard2.0/Google.Protobuf.xml" + ] + }, + "Humanizer.Core/2.14.1": { + "sha512": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "type": "package", + "path": "humanizer.core/2.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "humanizer.core.2.14.1.nupkg.sha512", + "humanizer.core.nuspec", + "lib/net6.0/Humanizer.dll", + "lib/net6.0/Humanizer.xml", + "lib/netstandard1.0/Humanizer.dll", + "lib/netstandard1.0/Humanizer.xml", + "lib/netstandard2.0/Humanizer.dll", + "lib/netstandard2.0/Humanizer.xml", + "logo.png" + ] + }, + "K4os.Compression.LZ4/1.3.8": { + "sha512": "LhwlPa7c1zs1OV2XadMtAWdImjLIsqFJPoRcIWAadSRn0Ri1DepK65UbWLPmt4riLqx2d40xjXRk0ogpqNtK7g==", + "type": "package", + "path": "k4os.compression.lz4/1.3.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.compression.lz4.1.3.8.nupkg.sha512", + "k4os.compression.lz4.nuspec", + "lib/net462/K4os.Compression.LZ4.dll", + "lib/net462/K4os.Compression.LZ4.xml", + "lib/net5.0/K4os.Compression.LZ4.dll", + "lib/net5.0/K4os.Compression.LZ4.xml", + "lib/net6.0/K4os.Compression.LZ4.dll", + "lib/net6.0/K4os.Compression.LZ4.xml", + "lib/netstandard2.0/K4os.Compression.LZ4.dll", + "lib/netstandard2.0/K4os.Compression.LZ4.xml", + "lib/netstandard2.1/K4os.Compression.LZ4.dll", + "lib/netstandard2.1/K4os.Compression.LZ4.xml" + ] + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "sha512": "P15qr8dZAeo9GvYbUIPEYFQ0MEJ0i5iqr37wsYeRC3la2uCldOoeCa6to0CZ1taiwxIV+Mk8NGuZi+4iWivK9w==", + "type": "package", + "path": "k4os.compression.lz4.streams/1.3.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.compression.lz4.streams.1.3.8.nupkg.sha512", + "k4os.compression.lz4.streams.nuspec", + "lib/net462/K4os.Compression.LZ4.Streams.dll", + "lib/net462/K4os.Compression.LZ4.Streams.xml", + "lib/net5.0/K4os.Compression.LZ4.Streams.dll", + "lib/net5.0/K4os.Compression.LZ4.Streams.xml", + "lib/net6.0/K4os.Compression.LZ4.Streams.dll", + "lib/net6.0/K4os.Compression.LZ4.Streams.xml", + "lib/netstandard2.0/K4os.Compression.LZ4.Streams.dll", + "lib/netstandard2.0/K4os.Compression.LZ4.Streams.xml", + "lib/netstandard2.1/K4os.Compression.LZ4.Streams.dll", + "lib/netstandard2.1/K4os.Compression.LZ4.Streams.xml" + ] + }, + "K4os.Hash.xxHash/1.0.8": { + "sha512": "Wp2F7BamQ2Q/7Hk834nV9vRQapgcr8kgv9Jvfm8J3D0IhDqZMMl+a2yxUq5ltJitvXvQfB8W6K4F4fCbw/P6YQ==", + "type": "package", + "path": "k4os.hash.xxhash/1.0.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.hash.xxhash.1.0.8.nupkg.sha512", + "k4os.hash.xxhash.nuspec", + "lib/net462/K4os.Hash.xxHash.dll", + "lib/net462/K4os.Hash.xxHash.xml", + "lib/net5.0/K4os.Hash.xxHash.dll", + "lib/net5.0/K4os.Hash.xxHash.xml", + "lib/net6.0/K4os.Hash.xxHash.dll", + "lib/net6.0/K4os.Hash.xxHash.xml", + "lib/netstandard2.0/K4os.Hash.xxHash.dll", + "lib/netstandard2.0/K4os.Hash.xxHash.xml", + "lib/netstandard2.1/K4os.Hash.xxHash.dll", + "lib/netstandard2.1/K4os.Hash.xxHash.xml" + ] + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "sha512": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==", + "type": "package", + "path": "microsoft.bcl.asyncinterfaces/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Bcl.AsyncInterfaces.targets", + "buildTransitive/net462/_._", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.xml", + "microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512", + "microsoft.bcl.asyncinterfaces.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Build.Framework/17.8.3": { + "sha512": "NrQZJW8TlKVPx72yltGb8SVz3P5mNRk9fNiD/ao8jRSk48WqIIdCn99q4IjlVmPcruuQ+yLdjNQLL8Rb4c916g==", + "type": "package", + "path": "microsoft.build.framework/17.8.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "README.md", + "lib/net472/Microsoft.Build.Framework.dll", + "lib/net472/Microsoft.Build.Framework.pdb", + "lib/net472/Microsoft.Build.Framework.xml", + "lib/net8.0/Microsoft.Build.Framework.dll", + "lib/net8.0/Microsoft.Build.Framework.pdb", + "lib/net8.0/Microsoft.Build.Framework.xml", + "microsoft.build.framework.17.8.3.nupkg.sha512", + "microsoft.build.framework.nuspec", + "notices/THIRDPARTYNOTICES.txt", + "ref/net472/Microsoft.Build.Framework.dll", + "ref/net472/Microsoft.Build.Framework.xml", + "ref/net8.0/Microsoft.Build.Framework.dll", + "ref/net8.0/Microsoft.Build.Framework.xml", + "ref/netstandard2.0/Microsoft.Build.Framework.dll", + "ref/netstandard2.0/Microsoft.Build.Framework.xml" + ] + }, + "Microsoft.Build.Locator/1.7.8": { + "sha512": "sPy10x527Ph16S2u0yGME4S6ohBKJ69WfjeGG/bvELYeZVmJdKjxgnlL8cJJJLGV/cZIRqSfB12UDB8ICakOog==", + "type": "package", + "path": "microsoft.build.locator/1.7.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "build/Microsoft.Build.Locator.props", + "build/Microsoft.Build.Locator.targets", + "lib/net46/Microsoft.Build.Locator.dll", + "lib/net6.0/Microsoft.Build.Locator.dll", + "microsoft.build.locator.1.7.8.nupkg.sha512", + "microsoft.build.locator.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Analyzers/3.3.4": { + "sha512": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==", + "type": "package", + "path": "microsoft.codeanalysis.analyzers/3.3.4", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.txt", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll", + "analyzers/dotnet/cs/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll", + "analyzers/dotnet/vb/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets", + "buildTransitive/config/analysislevel_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_all.globalconfig", + "buildTransitive/config/analysislevel_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_default.globalconfig", + "buildTransitive/config/analysislevel_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_none.globalconfig", + "buildTransitive/config/analysislevel_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended_warnaserror.globalconfig", + "documentation/Analyzer Configuration.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.sarif", + "editorconfig/AllRulesDefault/.editorconfig", + "editorconfig/AllRulesDisabled/.editorconfig", + "editorconfig/AllRulesEnabled/.editorconfig", + "editorconfig/CorrectnessRulesDefault/.editorconfig", + "editorconfig/CorrectnessRulesEnabled/.editorconfig", + "editorconfig/DataflowRulesDefault/.editorconfig", + "editorconfig/DataflowRulesEnabled/.editorconfig", + "editorconfig/LibraryRulesDefault/.editorconfig", + "editorconfig/LibraryRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled/.editorconfig", + "editorconfig/PortedFromFxCopRulesDefault/.editorconfig", + "editorconfig/PortedFromFxCopRulesEnabled/.editorconfig", + "microsoft.codeanalysis.analyzers.3.3.4.nupkg.sha512", + "microsoft.codeanalysis.analyzers.nuspec", + "rulesets/AllRulesDefault.ruleset", + "rulesets/AllRulesDisabled.ruleset", + "rulesets/AllRulesEnabled.ruleset", + "rulesets/CorrectnessRulesDefault.ruleset", + "rulesets/CorrectnessRulesEnabled.ruleset", + "rulesets/DataflowRulesDefault.ruleset", + "rulesets/DataflowRulesEnabled.ruleset", + "rulesets/LibraryRulesDefault.ruleset", + "rulesets/LibraryRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled.ruleset", + "rulesets/PortedFromFxCopRulesDefault.ruleset", + "rulesets/PortedFromFxCopRulesEnabled.ruleset", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "sha512": "/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "type": "package", + "path": "microsoft.codeanalysis.common/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.dll", + "lib/net6.0/Microsoft.CodeAnalysis.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.dll", + "lib/net7.0/Microsoft.CodeAnalysis.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "microsoft.codeanalysis.common.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "sha512": "+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "type": "package", + "path": "microsoft.codeanalysis.csharp/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "sha512": "3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "type": "package", + "path": "microsoft.codeanalysis.csharp.workspaces/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.workspaces.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "sha512": "LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.common/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "sha512": "IEYreI82QZKklp54yPHxZNG9EKSK6nHEkeuf+0Asie9llgS1gp0V1hw7ODG+QyoB7MuAnNQHmeV1Per/ECpv6A==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.msbuild/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.exe", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net472/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.runtimeconfig.json", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.runtimeconfig.json", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.msbuild.nuspec" + ] + }, + "Microsoft.CodeCoverage/17.14.1": { + "sha512": "pmTrhfFIoplzFVbhVwUquT+77CbGH+h4/3mBpdmIlYtBi9nAB+kKI6dN3A/nV4DFi3wLLx/BlHIPK+MkbQ6Tpg==", + "type": "package", + "path": "microsoft.codecoverage/17.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.txt", + "build/netstandard2.0/CodeCoverage/CodeCoverage.config", + "build/netstandard2.0/CodeCoverage/CodeCoverage.exe", + "build/netstandard2.0/CodeCoverage/Cov_x86.config", + "build/netstandard2.0/CodeCoverage/amd64/CodeCoverage.exe", + "build/netstandard2.0/CodeCoverage/amd64/Cov_x64.config", + "build/netstandard2.0/CodeCoverage/amd64/covrun64.dll", + "build/netstandard2.0/CodeCoverage/amd64/msdia140.dll", + "build/netstandard2.0/CodeCoverage/arm64/Cov_arm64.config", + "build/netstandard2.0/CodeCoverage/arm64/covrunarm64.dll", + "build/netstandard2.0/CodeCoverage/arm64/msdia140.dll", + "build/netstandard2.0/CodeCoverage/codecoveragemessages.dll", + "build/netstandard2.0/CodeCoverage/coreclr/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "build/netstandard2.0/CodeCoverage/covrun32.dll", + "build/netstandard2.0/CodeCoverage/msdia140.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.Core.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.Instrumentation.Core.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.Instrumentation.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.Interprocess.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.props", + "build/netstandard2.0/Microsoft.CodeCoverage.targets", + "build/netstandard2.0/Microsoft.DiaSymReader.dll", + "build/netstandard2.0/Microsoft.VisualStudio.TraceDataCollector.dll", + "build/netstandard2.0/Mono.Cecil.Pdb.dll", + "build/netstandard2.0/Mono.Cecil.Rocks.dll", + "build/netstandard2.0/Mono.Cecil.dll", + "build/netstandard2.0/ThirdPartyNotices.txt", + "build/netstandard2.0/alpine/x64/Cov_x64.config", + "build/netstandard2.0/alpine/x64/libCoverageInstrumentationMethod.so", + "build/netstandard2.0/alpine/x64/libInstrumentationEngine.so", + "build/netstandard2.0/arm64/MicrosoftInstrumentationEngine_arm64.dll", + "build/netstandard2.0/cs/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/de/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/es/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/fr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/it/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/ja/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/ko/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/macos/x64/Cov_x64.config", + "build/netstandard2.0/macos/x64/libCoverageInstrumentationMethod.dylib", + "build/netstandard2.0/macos/x64/libInstrumentationEngine.dylib", + "build/netstandard2.0/pl/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/pt-BR/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/ru/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/tr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/ubuntu/x64/Cov_x64.config", + "build/netstandard2.0/ubuntu/x64/libCoverageInstrumentationMethod.so", + "build/netstandard2.0/ubuntu/x64/libInstrumentationEngine.so", + "build/netstandard2.0/x64/MicrosoftInstrumentationEngine_x64.dll", + "build/netstandard2.0/x86/MicrosoftInstrumentationEngine_x86.dll", + "build/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "lib/net462/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "lib/net8.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "microsoft.codecoverage.17.14.1.nupkg.sha512", + "microsoft.codecoverage.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "sha512": "wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==", + "type": "package", + "path": "microsoft.entityframeworkcore/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props", + "lib/net8.0/Microsoft.EntityFrameworkCore.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.xml", + "microsoft.entityframeworkcore.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "sha512": "fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==", + "type": "package", + "path": "microsoft.entityframeworkcore.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.xml", + "microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.abstractions.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Analyzers/9.0.0": { + "sha512": "Qje+DzXJOKiXF72SL0XxNlDtTkvWWvmwknuZtFahY5hIQpRKO59qnGuERIQ3qlzuq5x4bAJ8WMbgU5DLhBgeOQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.analyzers/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.analyzers.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.analyzers.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "sha512": "Pqo8I+yHJ3VQrAoY0hiSncf+5P7gN/RkNilK5e+/K/yKh+yAWxdUAI6t0TG26a9VPlCa9FhyklzyFvRyj3YG9A==", + "type": "package", + "path": "microsoft.entityframeworkcore.design/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "build/net8.0/Microsoft.EntityFrameworkCore.Design.props", + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.xml", + "microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.design.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.InMemory/9.0.0": { + "sha512": "Pm4NBnv3aB8O5bBNwWRkL4a/H+3WdgKRKYD93FkR9TrUNb0jfns9JVN5w9WEUsQCm0C69Eg2Y85i8pdmSfaNnQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.inmemory/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net8.0/Microsoft.EntityFrameworkCore.InMemory.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.InMemory.xml", + "microsoft.entityframeworkcore.inmemory.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.inmemory.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "sha512": "j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==", + "type": "package", + "path": "microsoft.entityframeworkcore.relational/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.xml", + "microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.relational.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Tools/9.0.0": { + "sha512": "qjw+3/CaWiWnyVblvKHY11rQKH5eHQDSbtxjgxVhxGJrOpmjZ3JxtD0pjwkr4y/ELubsXr6xDfBcRJSkX/9hWQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.tools/9.0.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.tools.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.tools.nuspec", + "tools/EntityFrameworkCore.PS2.psd1", + "tools/EntityFrameworkCore.PS2.psm1", + "tools/EntityFrameworkCore.psd1", + "tools/EntityFrameworkCore.psm1", + "tools/about_EntityFrameworkCore.help.txt", + "tools/init.ps1", + "tools/net472/any/ef.exe", + "tools/net472/win-arm64/ef.exe", + "tools/net472/win-x86/ef.exe", + "tools/netcoreapp2.0/any/ef.dll", + "tools/netcoreapp2.0/any/ef.runtimeconfig.json" + ] + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "sha512": "FPWZAa9c0H4dvOj351iR1jkUIs4u9ykL4Bm592yhjDyO5lCoWd+TMAHx2EMbarzUvCvgjWjJIoC6//Q9kH6YhA==", + "type": "package", + "path": "microsoft.extensions.caching.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml", + "microsoft.extensions.caching.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.caching.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "sha512": "zbnPX/JQ0pETRSUG9fNPBvpIq42Aufvs15gGYyNIMhCun9yhmWihz0WgsI7bSDPjxWTKBf8oX/zv6v2uZ3W9OQ==", + "type": "package", + "path": "microsoft.extensions.caching.memory/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Memory.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Memory.targets", + "lib/net462/Microsoft.Extensions.Caching.Memory.dll", + "lib/net462/Microsoft.Extensions.Caching.Memory.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml", + "microsoft.extensions.caching.memory.9.0.0.nupkg.sha512", + "microsoft.extensions.caching.memory.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "sha512": "lqvd7W3FGKUO1+ZoUEMaZ5XDJeWvjpy2/M/ptCGz3tXLD4HWVaSzjufsAsjemasBEg+2SxXVtYVvGt5r2nKDlg==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "sha512": "MCPrg7v3QgNMr0vX4vzRXvkNGgLg8vKWX0nKCWUxu2uPyMsaRgiRc1tHBnbTcfJMhMKj2slE/j2M9oGkd25DNw==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", + "microsoft.extensions.dependencyinjection.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "sha512": "+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "sha512": "saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==", + "type": "package", + "path": "microsoft.extensions.dependencymodel/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyModel.targets", + "lib/net462/Microsoft.Extensions.DependencyModel.dll", + "lib/net462/Microsoft.Extensions.DependencyModel.xml", + "lib/net8.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net8.0/Microsoft.Extensions.DependencyModel.xml", + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net9.0/Microsoft.Extensions.DependencyModel.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.xml", + "microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencymodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging/9.0.0": { + "sha512": "crjWyORoug0kK7RSNJBTeSE6VX8IQgLf3nUpTB9m62bPXp/tzbnOsnbe8TXEG0AASNaKZddnpHKw7fET8E++Pg==", + "type": "package", + "path": "microsoft.extensions.logging/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.targets", + "lib/net462/Microsoft.Extensions.Logging.dll", + "lib/net462/Microsoft.Extensions.Logging.xml", + "lib/net8.0/Microsoft.Extensions.Logging.dll", + "lib/net8.0/Microsoft.Extensions.Logging.xml", + "lib/net9.0/Microsoft.Extensions.Logging.dll", + "lib/net9.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", + "microsoft.extensions.logging.9.0.0.nupkg.sha512", + "microsoft.extensions.logging.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "sha512": "g0UfujELzlLbHoVG8kPKVBaW470Ewi+jnptGS9KUi6jcb+k2StujtK3m26DFSGGwQ/+bVgZfsWqNzlP6YOejvw==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options/9.0.0": { + "sha512": "y2146b3jrPI3Q0lokKXdKLpmXqakYbDIPDV6r3M8SqvSf45WwOTzkyfDpxnZXJsJQEpAsAqjUq5Pu8RCJMjubg==", + "type": "package", + "path": "microsoft.extensions.options/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Options.targets", + "buildTransitive/net462/Microsoft.Extensions.Options.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Options.targets", + "lib/net462/Microsoft.Extensions.Options.dll", + "lib/net462/Microsoft.Extensions.Options.xml", + "lib/net8.0/Microsoft.Extensions.Options.dll", + "lib/net8.0/Microsoft.Extensions.Options.xml", + "lib/net9.0/Microsoft.Extensions.Options.dll", + "lib/net9.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.1/Microsoft.Extensions.Options.dll", + "lib/netstandard2.1/Microsoft.Extensions.Options.xml", + "microsoft.extensions.options.9.0.0.nupkg.sha512", + "microsoft.extensions.options.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "sha512": "N3qEBzmLMYiASUlKxxFIISP4AiwuPTHF5uCh+2CWSwwzAJiIYx0kBJsS30cp1nvhSySFAVi30jecD307jV+8Kg==", + "type": "package", + "path": "microsoft.extensions.primitives/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net8.0/Microsoft.Extensions.Primitives.dll", + "lib/net8.0/Microsoft.Extensions.Primitives.xml", + "lib/net9.0/Microsoft.Extensions.Primitives.dll", + "lib/net9.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.9.0.0.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.NET.Test.Sdk/17.14.1": { + "sha512": "HJKqKOE+vshXra2aEHpi2TlxYX7Z9VFYkr+E5rwEvHC8eIXiyO+K9kNm8vmNom3e2rA56WqxU+/N9NJlLGXsJQ==", + "type": "package", + "path": "microsoft.net.test.sdk/17.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "build/net462/Microsoft.NET.Test.Sdk.props", + "build/net462/Microsoft.NET.Test.Sdk.targets", + "build/net8.0/Microsoft.NET.Test.Sdk.Program.cs", + "build/net8.0/Microsoft.NET.Test.Sdk.Program.fs", + "build/net8.0/Microsoft.NET.Test.Sdk.Program.vb", + "build/net8.0/Microsoft.NET.Test.Sdk.props", + "build/net8.0/Microsoft.NET.Test.Sdk.targets", + "build/netcoreapp2.0/Microsoft.NET.Test.Sdk.props", + "build/netcoreapp2.0/Microsoft.NET.Test.Sdk.targets", + "build/netstandard2.0/Microsoft.NET.Test.Sdk.props", + "build/netstandard2.0/Microsoft.NET.Test.Sdk.targets", + "buildMultiTargeting/net462/Microsoft.NET.Test.Sdk.props", + "buildMultiTargeting/net8.0/Microsoft.NET.Test.Sdk.props", + "buildMultiTargeting/netcoreapp2.0/Microsoft.NET.Test.Sdk.props", + "buildMultiTargeting/netcoreapp2.0/Microsoft.NET.Test.Sdk.targets", + "buildMultiTargeting/netstandard2.0/Microsoft.NET.Test.Sdk.props", + "buildMultiTargeting/netstandard2.0/Microsoft.NET.Test.Sdk.targets", + "lib/native/_._", + "lib/net462/_._", + "lib/net8.0/_._", + "microsoft.net.test.sdk.17.14.1.nupkg.sha512", + "microsoft.net.test.sdk.nuspec" + ] + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Microsoft.TestPlatform.ObjectModel/17.14.1": { + "sha512": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", + "type": "package", + "path": "microsoft.testplatform.objectmodel/17.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "lib/net462/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net462/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net462/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net462/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net8.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard2.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "microsoft.testplatform.objectmodel.17.14.1.nupkg.sha512", + "microsoft.testplatform.objectmodel.nuspec" + ] + }, + "Microsoft.TestPlatform.TestHost/17.14.1": { + "sha512": "d78LPzGKkJwsJXAQwsbJJ7LE7D1wB+rAyhHHAaODF+RDSQ0NgMjDFkSA1Djw18VrxO76GlKAjRUhl+H8NL8Z+Q==", + "type": "package", + "path": "microsoft.testplatform.testhost/17.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.txt", + "build/net8.0/Microsoft.TestPlatform.TestHost.props", + "build/net8.0/Microsoft.TestPlatform.TestHost.targets", + "build/net8.0/x64/testhost.dll", + "build/net8.0/x64/testhost.exe", + "build/net8.0/x86/testhost.x86.dll", + "build/net8.0/x86/testhost.x86.exe", + "lib/net462/_._", + "lib/net8.0/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/net8.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net8.0/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net8.0/Microsoft.TestPlatform.Utilities.dll", + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net8.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/testhost.deps.json", + "lib/net8.0/testhost.dll", + "lib/net8.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/x64/msdia140.dll", + "lib/net8.0/x86/msdia140.dll", + "lib/net8.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "microsoft.testplatform.testhost.17.14.1.nupkg.sha512", + "microsoft.testplatform.testhost.nuspec" + ] + }, + "Mono.TextTemplating/3.0.0": { + "sha512": "YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==", + "type": "package", + "path": "mono.texttemplating/3.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt/LICENSE", + "buildTransitive/Mono.TextTemplating.targets", + "lib/net472/Mono.TextTemplating.dll", + "lib/net6.0/Mono.TextTemplating.dll", + "lib/netstandard2.0/Mono.TextTemplating.dll", + "mono.texttemplating.3.0.0.nupkg.sha512", + "mono.texttemplating.nuspec", + "readme.md" + ] + }, + "Moq/4.20.72": { + "sha512": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==", + "type": "package", + "path": "moq/4.20.72", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "icon.png", + "lib/net462/Moq.dll", + "lib/net6.0/Moq.dll", + "lib/netstandard2.0/Moq.dll", + "lib/netstandard2.1/Moq.dll", + "moq.4.20.72.nupkg.sha512", + "moq.nuspec", + "readme.md" + ] + }, + "MySql.Data/9.0.0": { + "sha512": "YT2/fdDy3FBx5ZK0qsupEs9Gt0iFo/mZR+ND5cJwrr+6xguAOXyYpYUbEj27UcLZER5InOUrJQYyUaPIDil2Xw==", + "type": "package", + "path": "mysql.data/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net462/MySql.Data.dll", + "lib/net462/MySql.Data.xml", + "lib/net48/MySql.Data.dll", + "lib/net48/MySql.Data.xml", + "lib/net6.0/MySql.Data.dll", + "lib/net6.0/MySql.Data.xml", + "lib/net8.0/MySql.Data.dll", + "lib/net8.0/MySql.Data.xml", + "lib/netstandard2.0/MySql.Data.dll", + "lib/netstandard2.0/MySql.Data.xml", + "lib/netstandard2.1/MySql.Data.dll", + "lib/netstandard2.1/MySql.Data.xml", + "logo-mysql-170x115.png", + "mysql.data.9.0.0.nupkg.sha512", + "mysql.data.nuspec", + "runtimes/win-x64/native/comerr64.dll", + "runtimes/win-x64/native/gssapi64.dll", + "runtimes/win-x64/native/k5sprt64.dll", + "runtimes/win-x64/native/krb5_64.dll", + "runtimes/win-x64/native/krbcc64.dll" + ] + }, + "MySqlConnector/2.4.0": { + "sha512": "78M+gVOjbdZEDIyXQqcA7EYlCGS3tpbUELHvn6638A2w0pkPI625ixnzsa5staAd3N9/xFmPJtkKDYwsXpFi/w==", + "type": "package", + "path": "mysqlconnector/2.4.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net462/MySqlConnector.dll", + "lib/net462/MySqlConnector.xml", + "lib/net471/MySqlConnector.dll", + "lib/net471/MySqlConnector.xml", + "lib/net48/MySqlConnector.dll", + "lib/net48/MySqlConnector.xml", + "lib/net6.0/MySqlConnector.dll", + "lib/net6.0/MySqlConnector.xml", + "lib/net8.0/MySqlConnector.dll", + "lib/net8.0/MySqlConnector.xml", + "lib/net9.0/MySqlConnector.dll", + "lib/net9.0/MySqlConnector.xml", + "lib/netstandard2.0/MySqlConnector.dll", + "lib/netstandard2.0/MySqlConnector.xml", + "lib/netstandard2.1/MySqlConnector.dll", + "lib/netstandard2.1/MySqlConnector.xml", + "logo.png", + "mysqlconnector.2.4.0.nupkg.sha512", + "mysqlconnector.nuspec" + ] + }, + "Newtonsoft.Json/13.0.3": { + "sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==", + "type": "package", + "path": "newtonsoft.json/13.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/net6.0/Newtonsoft.Json.dll", + "lib/net6.0/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/netstandard1.3/Newtonsoft.Json.dll", + "lib/netstandard1.3/Newtonsoft.Json.xml", + "lib/netstandard2.0/Newtonsoft.Json.dll", + "lib/netstandard2.0/Newtonsoft.Json.xml", + "newtonsoft.json.13.0.3.nupkg.sha512", + "newtonsoft.json.nuspec", + "packageIcon.png" + ] + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "sha512": "zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==", + "type": "package", + "path": "pipelines.sockets.unofficial/2.2.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/Pipelines.Sockets.Unofficial.dll", + "lib/net461/Pipelines.Sockets.Unofficial.xml", + "lib/net472/Pipelines.Sockets.Unofficial.dll", + "lib/net472/Pipelines.Sockets.Unofficial.xml", + "lib/net5.0/Pipelines.Sockets.Unofficial.dll", + "lib/net5.0/Pipelines.Sockets.Unofficial.xml", + "lib/netcoreapp3.1/Pipelines.Sockets.Unofficial.dll", + "lib/netcoreapp3.1/Pipelines.Sockets.Unofficial.xml", + "lib/netstandard2.0/Pipelines.Sockets.Unofficial.dll", + "lib/netstandard2.0/Pipelines.Sockets.Unofficial.xml", + "lib/netstandard2.1/Pipelines.Sockets.Unofficial.dll", + "lib/netstandard2.1/Pipelines.Sockets.Unofficial.xml", + "pipelines.sockets.unofficial.2.2.8.nupkg.sha512", + "pipelines.sockets.unofficial.nuspec" + ] + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "sha512": "cl7S4s6CbJno0LjNxrBHNc2xxmCliR5i40ATPZk/eTywVaAbHCbdc9vbGc3QThvwGjHqrDHT8vY9m1VF/47o0g==", + "type": "package", + "path": "pomelo.entityframeworkcore.mysql/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "icon.png", + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll", + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.xml", + "pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512", + "pomelo.entityframeworkcore.mysql.nuspec" + ] + }, + "StackExchange.Redis/2.7.27": { + "sha512": "Uqc2OQHglqj9/FfGQ6RkKFkZfHySfZlfmbCl+hc+u2I/IqunfelQ7QJi7ZhvAJxUtu80pildVX6NPLdDaUffOw==", + "type": "package", + "path": "stackexchange.redis/2.7.27", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/StackExchange.Redis.dll", + "lib/net461/StackExchange.Redis.xml", + "lib/net472/StackExchange.Redis.dll", + "lib/net472/StackExchange.Redis.xml", + "lib/net6.0/StackExchange.Redis.dll", + "lib/net6.0/StackExchange.Redis.xml", + "lib/netcoreapp3.1/StackExchange.Redis.dll", + "lib/netcoreapp3.1/StackExchange.Redis.xml", + "lib/netstandard2.0/StackExchange.Redis.dll", + "lib/netstandard2.0/StackExchange.Redis.xml", + "stackexchange.redis.2.7.27.nupkg.sha512", + "stackexchange.redis.nuspec" + ] + }, + "System.Buffers/4.5.1": { + "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "type": "package", + "path": "system.buffers/4.5.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Buffers.dll", + "lib/net461/System.Buffers.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Buffers.dll", + "lib/netstandard1.1/System.Buffers.xml", + "lib/netstandard2.0/System.Buffers.dll", + "lib/netstandard2.0/System.Buffers.xml", + "lib/uap10.0.16299/_._", + "ref/net45/System.Buffers.dll", + "ref/net45/System.Buffers.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Buffers.dll", + "ref/netstandard1.1/System.Buffers.xml", + "ref/netstandard2.0/System.Buffers.dll", + "ref/netstandard2.0/System.Buffers.xml", + "ref/uap10.0.16299/_._", + "system.buffers.4.5.1.nupkg.sha512", + "system.buffers.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.CodeDom/6.0.0": { + "sha512": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==", + "type": "package", + "path": "system.codedom/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.CodeDom.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.CodeDom.dll", + "lib/net461/System.CodeDom.xml", + "lib/net6.0/System.CodeDom.dll", + "lib/net6.0/System.CodeDom.xml", + "lib/netstandard2.0/System.CodeDom.dll", + "lib/netstandard2.0/System.CodeDom.xml", + "system.codedom.6.0.0.nupkg.sha512", + "system.codedom.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Collections.Immutable/8.0.0": { + "sha512": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==", + "type": "package", + "path": "system.collections.immutable/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Collections.Immutable.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets", + "lib/net462/System.Collections.Immutable.dll", + "lib/net462/System.Collections.Immutable.xml", + "lib/net6.0/System.Collections.Immutable.dll", + "lib/net6.0/System.Collections.Immutable.xml", + "lib/net7.0/System.Collections.Immutable.dll", + "lib/net7.0/System.Collections.Immutable.xml", + "lib/net8.0/System.Collections.Immutable.dll", + "lib/net8.0/System.Collections.Immutable.xml", + "lib/netstandard2.0/System.Collections.Immutable.dll", + "lib/netstandard2.0/System.Collections.Immutable.xml", + "system.collections.immutable.8.0.0.nupkg.sha512", + "system.collections.immutable.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition/7.0.0": { + "sha512": "tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "type": "package", + "path": "system.composition/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.targets", + "lib/net461/_._", + "lib/netcoreapp2.0/_._", + "lib/netstandard2.0/_._", + "system.composition.7.0.0.nupkg.sha512", + "system.composition.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.AttributedModel/7.0.0": { + "sha512": "2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==", + "type": "package", + "path": "system.composition.attributedmodel/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.AttributedModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.AttributedModel.targets", + "lib/net462/System.Composition.AttributedModel.dll", + "lib/net462/System.Composition.AttributedModel.xml", + "lib/net6.0/System.Composition.AttributedModel.dll", + "lib/net6.0/System.Composition.AttributedModel.xml", + "lib/net7.0/System.Composition.AttributedModel.dll", + "lib/net7.0/System.Composition.AttributedModel.xml", + "lib/netstandard2.0/System.Composition.AttributedModel.dll", + "lib/netstandard2.0/System.Composition.AttributedModel.xml", + "system.composition.attributedmodel.7.0.0.nupkg.sha512", + "system.composition.attributedmodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Convention/7.0.0": { + "sha512": "IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "type": "package", + "path": "system.composition.convention/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Convention.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Convention.targets", + "lib/net462/System.Composition.Convention.dll", + "lib/net462/System.Composition.Convention.xml", + "lib/net6.0/System.Composition.Convention.dll", + "lib/net6.0/System.Composition.Convention.xml", + "lib/net7.0/System.Composition.Convention.dll", + "lib/net7.0/System.Composition.Convention.xml", + "lib/netstandard2.0/System.Composition.Convention.dll", + "lib/netstandard2.0/System.Composition.Convention.xml", + "system.composition.convention.7.0.0.nupkg.sha512", + "system.composition.convention.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Hosting/7.0.0": { + "sha512": "eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "type": "package", + "path": "system.composition.hosting/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Hosting.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Hosting.targets", + "lib/net462/System.Composition.Hosting.dll", + "lib/net462/System.Composition.Hosting.xml", + "lib/net6.0/System.Composition.Hosting.dll", + "lib/net6.0/System.Composition.Hosting.xml", + "lib/net7.0/System.Composition.Hosting.dll", + "lib/net7.0/System.Composition.Hosting.xml", + "lib/netstandard2.0/System.Composition.Hosting.dll", + "lib/netstandard2.0/System.Composition.Hosting.xml", + "system.composition.hosting.7.0.0.nupkg.sha512", + "system.composition.hosting.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Runtime/7.0.0": { + "sha512": "aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==", + "type": "package", + "path": "system.composition.runtime/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Runtime.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Runtime.targets", + "lib/net462/System.Composition.Runtime.dll", + "lib/net462/System.Composition.Runtime.xml", + "lib/net6.0/System.Composition.Runtime.dll", + "lib/net6.0/System.Composition.Runtime.xml", + "lib/net7.0/System.Composition.Runtime.dll", + "lib/net7.0/System.Composition.Runtime.xml", + "lib/netstandard2.0/System.Composition.Runtime.dll", + "lib/netstandard2.0/System.Composition.Runtime.xml", + "system.composition.runtime.7.0.0.nupkg.sha512", + "system.composition.runtime.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.TypedParts/7.0.0": { + "sha512": "ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "type": "package", + "path": "system.composition.typedparts/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.TypedParts.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.TypedParts.targets", + "lib/net462/System.Composition.TypedParts.dll", + "lib/net462/System.Composition.TypedParts.xml", + "lib/net6.0/System.Composition.TypedParts.dll", + "lib/net6.0/System.Composition.TypedParts.xml", + "lib/net7.0/System.Composition.TypedParts.dll", + "lib/net7.0/System.Composition.TypedParts.xml", + "lib/netstandard2.0/System.Composition.TypedParts.dll", + "lib/netstandard2.0/System.Composition.TypedParts.xml", + "system.composition.typedparts.7.0.0.nupkg.sha512", + "system.composition.typedparts.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "sha512": "JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==", + "type": "package", + "path": "system.configuration.configurationmanager/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Configuration.ConfigurationManager.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Configuration.ConfigurationManager.targets", + "lib/net462/System.Configuration.ConfigurationManager.dll", + "lib/net462/System.Configuration.ConfigurationManager.xml", + "lib/net6.0/System.Configuration.ConfigurationManager.dll", + "lib/net6.0/System.Configuration.ConfigurationManager.xml", + "lib/net7.0/System.Configuration.ConfigurationManager.dll", + "lib/net7.0/System.Configuration.ConfigurationManager.xml", + "lib/net8.0/System.Configuration.ConfigurationManager.dll", + "lib/net8.0/System.Configuration.ConfigurationManager.xml", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "system.configuration.configurationmanager.8.0.0.nupkg.sha512", + "system.configuration.configurationmanager.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.DiagnosticSource/8.0.1": { + "sha512": "vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==", + "type": "package", + "path": "system.diagnostics.diagnosticsource/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets", + "lib/net462/System.Diagnostics.DiagnosticSource.dll", + "lib/net462/System.Diagnostics.DiagnosticSource.xml", + "lib/net6.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net6.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net7.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net7.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net8.0/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml", + "system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512", + "system.diagnostics.diagnosticsource.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.EventLog/8.0.0": { + "sha512": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", + "type": "package", + "path": "system.diagnostics.eventlog/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.EventLog.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.EventLog.targets", + "lib/net462/System.Diagnostics.EventLog.dll", + "lib/net462/System.Diagnostics.EventLog.xml", + "lib/net6.0/System.Diagnostics.EventLog.dll", + "lib/net6.0/System.Diagnostics.EventLog.xml", + "lib/net7.0/System.Diagnostics.EventLog.dll", + "lib/net7.0/System.Diagnostics.EventLog.xml", + "lib/net8.0/System.Diagnostics.EventLog.dll", + "lib/net8.0/System.Diagnostics.EventLog.xml", + "lib/netstandard2.0/System.Diagnostics.EventLog.dll", + "lib/netstandard2.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.xml", + "system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "system.diagnostics.eventlog.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.IO.Pipelines/7.0.0": { + "sha512": "jRn6JYnNPW6xgQazROBLSfpdoczRw694vO5kKvMcNnpXuolEixUyw6IBuBs2Y2mlSX/LdLvyyWmfXhaI3ND1Yg==", + "type": "package", + "path": "system.io.pipelines/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.IO.Pipelines.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets", + "lib/net462/System.IO.Pipelines.dll", + "lib/net462/System.IO.Pipelines.xml", + "lib/net6.0/System.IO.Pipelines.dll", + "lib/net6.0/System.IO.Pipelines.xml", + "lib/net7.0/System.IO.Pipelines.dll", + "lib/net7.0/System.IO.Pipelines.xml", + "lib/netstandard2.0/System.IO.Pipelines.dll", + "lib/netstandard2.0/System.IO.Pipelines.xml", + "system.io.pipelines.7.0.0.nupkg.sha512", + "system.io.pipelines.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Metadata/8.0.0": { + "sha512": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", + "type": "package", + "path": "system.reflection.metadata/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Reflection.Metadata.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Reflection.Metadata.targets", + "lib/net462/System.Reflection.Metadata.dll", + "lib/net462/System.Reflection.Metadata.xml", + "lib/net6.0/System.Reflection.Metadata.dll", + "lib/net6.0/System.Reflection.Metadata.xml", + "lib/net7.0/System.Reflection.Metadata.dll", + "lib/net7.0/System.Reflection.Metadata.xml", + "lib/net8.0/System.Reflection.Metadata.dll", + "lib/net8.0/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "system.reflection.metadata.8.0.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "type": "package", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net461/System.Runtime.CompilerServices.Unsafe.xml", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "system.runtime.compilerservices.unsafe.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Runtime.Loader/4.3.0": { + "sha512": "DHMaRn8D8YCK2GG2pw+UzNxn/OHVfaWx7OTLBD/hPegHZZgcZh3H6seWegrC4BYwsfuGrywIuT+MQs+rPqRLTQ==", + "type": "package", + "path": "system.runtime.loader/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/_._", + "lib/netstandard1.5/System.Runtime.Loader.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/netstandard1.5/System.Runtime.Loader.dll", + "ref/netstandard1.5/System.Runtime.Loader.xml", + "ref/netstandard1.5/de/System.Runtime.Loader.xml", + "ref/netstandard1.5/es/System.Runtime.Loader.xml", + "ref/netstandard1.5/fr/System.Runtime.Loader.xml", + "ref/netstandard1.5/it/System.Runtime.Loader.xml", + "ref/netstandard1.5/ja/System.Runtime.Loader.xml", + "ref/netstandard1.5/ko/System.Runtime.Loader.xml", + "ref/netstandard1.5/ru/System.Runtime.Loader.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Loader.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Loader.xml", + "system.runtime.loader.4.3.0.nupkg.sha512", + "system.runtime.loader.nuspec" + ] + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "sha512": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==", + "type": "package", + "path": "system.security.cryptography.protecteddata/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Security.Cryptography.ProtectedData.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Security.Cryptography.ProtectedData.targets", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/System.Security.Cryptography.ProtectedData.dll", + "lib/net462/System.Security.Cryptography.ProtectedData.xml", + "lib/net6.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net6.0/System.Security.Cryptography.ProtectedData.xml", + "lib/net7.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net7.0/System.Security.Cryptography.ProtectedData.xml", + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net8.0/System.Security.Cryptography.ProtectedData.xml", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "system.security.cryptography.protecteddata.8.0.0.nupkg.sha512", + "system.security.cryptography.protecteddata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Security.Permissions/8.0.0": { + "sha512": "v/BBylw7XevuAsHXoX9dDUUfmBIcUf7Lkz8K3ZXIKz3YRKpw8YftpSir4n4e/jDTKFoaK37AsC3xnk+GNFI1Ow==", + "type": "package", + "path": "system.security.permissions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Security.Permissions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Security.Permissions.targets", + "lib/net462/System.Security.Permissions.dll", + "lib/net462/System.Security.Permissions.xml", + "lib/net6.0/System.Security.Permissions.dll", + "lib/net6.0/System.Security.Permissions.xml", + "lib/net7.0/System.Security.Permissions.dll", + "lib/net7.0/System.Security.Permissions.xml", + "lib/net8.0/System.Security.Permissions.dll", + "lib/net8.0/System.Security.Permissions.xml", + "lib/netstandard2.0/System.Security.Permissions.dll", + "lib/netstandard2.0/System.Security.Permissions.xml", + "system.security.permissions.8.0.0.nupkg.sha512", + "system.security.permissions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Text.Encoding.CodePages/8.0.0": { + "sha512": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==", + "type": "package", + "path": "system.text.encoding.codepages/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encoding.CodePages.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encoding.CodePages.targets", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/System.Text.Encoding.CodePages.dll", + "lib/net462/System.Text.Encoding.CodePages.xml", + "lib/net6.0/System.Text.Encoding.CodePages.dll", + "lib/net6.0/System.Text.Encoding.CodePages.xml", + "lib/net7.0/System.Text.Encoding.CodePages.dll", + "lib/net7.0/System.Text.Encoding.CodePages.xml", + "lib/net8.0/System.Text.Encoding.CodePages.dll", + "lib/net8.0/System.Text.Encoding.CodePages.xml", + "lib/netstandard2.0/System.Text.Encoding.CodePages.dll", + "lib/netstandard2.0/System.Text.Encoding.CodePages.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.xml", + "runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.xml", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.xml", + "system.text.encoding.codepages.8.0.0.nupkg.sha512", + "system.text.encoding.codepages.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Json/9.0.0": { + "sha512": "js7+qAu/9mQvnhA4EfGMZNEzXtJCDxgkgj8ohuxq/Qxv+R56G+ljefhiJHOxTNiw54q8vmABCWUwkMulNdlZ4A==", + "type": "package", + "path": "system.text.json/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "buildTransitive/net461/System.Text.Json.targets", + "buildTransitive/net462/System.Text.Json.targets", + "buildTransitive/net8.0/System.Text.Json.targets", + "buildTransitive/netcoreapp2.0/System.Text.Json.targets", + "buildTransitive/netstandard2.0/System.Text.Json.targets", + "lib/net462/System.Text.Json.dll", + "lib/net462/System.Text.Json.xml", + "lib/net8.0/System.Text.Json.dll", + "lib/net8.0/System.Text.Json.xml", + "lib/net9.0/System.Text.Json.dll", + "lib/net9.0/System.Text.Json.xml", + "lib/netstandard2.0/System.Text.Json.dll", + "lib/netstandard2.0/System.Text.Json.xml", + "system.text.json.9.0.0.nupkg.sha512", + "system.text.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Channels/7.0.0": { + "sha512": "qmeeYNROMsONF6ndEZcIQ+VxR4Q/TX/7uIVLJqtwIWL7dDWeh0l1UIqgo4wYyjG//5lUNhwkLDSFl+pAWO6oiA==", + "type": "package", + "path": "system.threading.channels/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Threading.Channels.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Threading.Channels.targets", + "lib/net462/System.Threading.Channels.dll", + "lib/net462/System.Threading.Channels.xml", + "lib/net6.0/System.Threading.Channels.dll", + "lib/net6.0/System.Threading.Channels.xml", + "lib/net7.0/System.Threading.Channels.dll", + "lib/net7.0/System.Threading.Channels.xml", + "lib/netstandard2.0/System.Threading.Channels.dll", + "lib/netstandard2.0/System.Threading.Channels.xml", + "lib/netstandard2.1/System.Threading.Channels.dll", + "lib/netstandard2.1/System.Threading.Channels.xml", + "system.threading.channels.7.0.0.nupkg.sha512", + "system.threading.channels.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "type": "package", + "path": "system.threading.tasks.extensions/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Threading.Tasks.Extensions.dll", + "lib/net461/System.Threading.Tasks.Extensions.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netcoreapp2.1/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "system.threading.tasks.extensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Windows.Extensions/8.0.0": { + "sha512": "Obg3a90MkOw9mYKxrardLpY2u0axDMrSmy4JCdq2cYbelM2cUwmUir5Bomvd1yxmPL9h5LVHU1tuKBZpUjfASg==", + "type": "package", + "path": "system.windows.extensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net6.0/System.Windows.Extensions.dll", + "lib/net6.0/System.Windows.Extensions.xml", + "lib/net7.0/System.Windows.Extensions.dll", + "lib/net7.0/System.Windows.Extensions.xml", + "lib/net8.0/System.Windows.Extensions.dll", + "lib/net8.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net6.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net6.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net7.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net7.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net8.0/System.Windows.Extensions.xml", + "system.windows.extensions.8.0.0.nupkg.sha512", + "system.windows.extensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "xunit/2.9.3": { + "sha512": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", + "type": "package", + "path": "xunit/2.9.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "_content/README.md", + "_content/logo-128-transparent.png", + "xunit.2.9.3.nupkg.sha512", + "xunit.nuspec" + ] + }, + "xunit.abstractions/2.0.3": { + "sha512": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==", + "type": "package", + "path": "xunit.abstractions/2.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net35/xunit.abstractions.dll", + "lib/net35/xunit.abstractions.xml", + "lib/netstandard1.0/xunit.abstractions.dll", + "lib/netstandard1.0/xunit.abstractions.xml", + "lib/netstandard2.0/xunit.abstractions.dll", + "lib/netstandard2.0/xunit.abstractions.xml", + "xunit.abstractions.2.0.3.nupkg.sha512", + "xunit.abstractions.nuspec" + ] + }, + "xunit.analyzers/1.18.0": { + "sha512": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==", + "type": "package", + "path": "xunit.analyzers/1.18.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "_content/README.md", + "_content/logo-128-transparent.png", + "analyzers/dotnet/cs/xunit.analyzers.dll", + "analyzers/dotnet/cs/xunit.analyzers.fixes.dll", + "tools/install.ps1", + "tools/uninstall.ps1", + "xunit.analyzers.1.18.0.nupkg.sha512", + "xunit.analyzers.nuspec" + ] + }, + "xunit.assert/2.9.3": { + "sha512": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==", + "type": "package", + "path": "xunit.assert/2.9.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "_content/README.md", + "_content/logo-128-transparent.png", + "lib/net6.0/xunit.assert.dll", + "lib/net6.0/xunit.assert.xml", + "lib/netstandard1.1/xunit.assert.dll", + "lib/netstandard1.1/xunit.assert.xml", + "xunit.assert.2.9.3.nupkg.sha512", + "xunit.assert.nuspec" + ] + }, + "xunit.core/2.9.3": { + "sha512": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", + "type": "package", + "path": "xunit.core/2.9.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "_content/README.md", + "_content/logo-128-transparent.png", + "build/xunit.core.props", + "build/xunit.core.targets", + "buildMultiTargeting/xunit.core.props", + "buildMultiTargeting/xunit.core.targets", + "xunit.core.2.9.3.nupkg.sha512", + "xunit.core.nuspec" + ] + }, + "xunit.extensibility.core/2.9.3": { + "sha512": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", + "type": "package", + "path": "xunit.extensibility.core/2.9.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "_content/README.md", + "_content/logo-128-transparent.png", + "lib/net452/xunit.core.dll", + "lib/net452/xunit.core.dll.tdnet", + "lib/net452/xunit.core.xml", + "lib/net452/xunit.runner.tdnet.dll", + "lib/net452/xunit.runner.utility.net452.dll", + "lib/netstandard1.1/xunit.core.dll", + "lib/netstandard1.1/xunit.core.xml", + "xunit.extensibility.core.2.9.3.nupkg.sha512", + "xunit.extensibility.core.nuspec" + ] + }, + "xunit.extensibility.execution/2.9.3": { + "sha512": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", + "type": "package", + "path": "xunit.extensibility.execution/2.9.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "_content/README.md", + "_content/logo-128-transparent.png", + "lib/net452/xunit.execution.desktop.dll", + "lib/net452/xunit.execution.desktop.xml", + "lib/netstandard1.1/xunit.execution.dotnet.dll", + "lib/netstandard1.1/xunit.execution.dotnet.xml", + "xunit.extensibility.execution.2.9.3.nupkg.sha512", + "xunit.extensibility.execution.nuspec" + ] + }, + "xunit.runner.visualstudio/3.1.4": { + "sha512": "5mj99LvCqrq3CNi06xYdyIAXOEh+5b33F2nErCzI5zWiDdLHXiPXEWFSUAF8zlIv0ZWqjZNCwHTQeAPYbF3pCg==", + "type": "package", + "path": "xunit.runner.visualstudio/3.1.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "_content/README.md", + "_content/logo-128-transparent.png", + "build/net472/xunit.abstractions.dll", + "build/net472/xunit.runner.visualstudio.props", + "build/net472/xunit.runner.visualstudio.testadapter.dll", + "build/net8.0/xunit.abstractions.dll", + "build/net8.0/xunit.runner.visualstudio.props", + "build/net8.0/xunit.runner.visualstudio.testadapter.dll", + "lib/net472/_._", + "lib/net8.0/_._", + "xunit.runner.visualstudio.3.1.4.nupkg.sha512", + "xunit.runner.visualstudio.nuspec" + ] + }, + "ZstdSharp.Port/0.8.0": { + "sha512": "Z62eNBIu8E8YtbqlMy57tK3dV1+m2b9NhPeaYovB5exmLKvrGCqOhJTzrEUH5VyUWU6vwX3c1XHJGhW5HVs8dA==", + "type": "package", + "path": "zstdsharp.port/0.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net462/ZstdSharp.dll", + "lib/net5.0/ZstdSharp.dll", + "lib/net6.0/ZstdSharp.dll", + "lib/net7.0/ZstdSharp.dll", + "lib/net8.0/ZstdSharp.dll", + "lib/netcoreapp3.1/ZstdSharp.dll", + "lib/netstandard2.0/ZstdSharp.dll", + "lib/netstandard2.1/ZstdSharp.dll", + "zstdsharp.port.0.8.0.nupkg.sha512", + "zstdsharp.port.nuspec" + ] + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Application/HardwarePerformance.Application.csproj", + "msbuildProject": "../HardwarePerformance.Application/HardwarePerformance.Application.csproj" + }, + "HardwarePerformance.Core/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Core/HardwarePerformance.Core.csproj", + "msbuildProject": "../HardwarePerformance.Core/HardwarePerformance.Core.csproj" + }, + "HardwarePerformance.Infrastructure/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj", + "msbuildProject": "../HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj" + } + }, + "projectFileDependencyGroups": { + "net9.0": [ + "HardwarePerformance.Application >= 1.0.0", + "HardwarePerformance.Core >= 1.0.0", + "HardwarePerformance.Infrastructure >= 1.0.0", + "Microsoft.EntityFrameworkCore.InMemory >= 9.0.0", + "Microsoft.NET.Test.Sdk >= 17.14.1", + "Moq >= 4.20.72", + "coverlet.collector >= 6.0.4", + "xunit >= 2.9.3", + "xunit.runner.visualstudio >= 3.1.4" + ] + }, + "packageFolders": { + "C:\\Users\\Administrator\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\HardwarePerformance.Infrastructure.Tests.csproj", + "projectName": "HardwarePerformance.Infrastructure.Tests", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\HardwarePerformance.Infrastructure.Tests.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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": [ + "net9.0" + ], + "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://nuget.cdn.azure.cn/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.100" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "Microsoft.EntityFrameworkCore.InMemory": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.14.1, )" + }, + "Moq": { + "target": "Package", + "version": "[4.20.72, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[6.0.4, )" + }, + "xunit": { + "target": "Package", + "version": "[2.9.3, )" + }, + "xunit.runner.visualstudio": { + "target": "Package", + "version": "[3.1.4, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure.Tests/obj/project.nuget.cache b/backend/HardwarePerformance.Infrastructure.Tests/obj/project.nuget.cache new file mode 100644 index 00000000..38a4334f --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure.Tests/obj/project.nuget.cache @@ -0,0 +1,98 @@ +{ + "version": 2, + "dgSpecHash": "7ccL5ERnWF8=", + "success": true, + "projectFilePath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure.Tests\\HardwarePerformance.Infrastructure.Tests.csproj", + "expectedPackageFiles": [ + "C:\\Users\\Administrator\\.nuget\\packages\\bouncycastle.cryptography\\2.3.1\\bouncycastle.cryptography.2.3.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\castle.core\\5.1.1\\castle.core.5.1.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\coverlet.collector\\6.0.4\\coverlet.collector.6.0.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\google.protobuf\\3.26.1\\google.protobuf.3.26.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\humanizer.core\\2.14.1\\humanizer.core.2.14.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.compression.lz4\\1.3.8\\k4os.compression.lz4.1.3.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.compression.lz4.streams\\1.3.8\\k4os.compression.lz4.streams.1.3.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.hash.xxhash\\1.0.8\\k4os.hash.xxhash.1.0.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\7.0.0\\microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.build.framework\\17.8.3\\microsoft.build.framework.17.8.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.build.locator\\1.7.8\\microsoft.build.locator.1.7.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.analyzers\\3.3.4\\microsoft.codeanalysis.analyzers.3.3.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.common\\4.8.0\\microsoft.codeanalysis.common.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.csharp\\4.8.0\\microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.csharp.workspaces\\4.8.0\\microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.workspaces.common\\4.8.0\\microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.workspaces.msbuild\\4.8.0\\microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codecoverage\\17.14.1\\microsoft.codecoverage.17.14.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore\\9.0.0\\microsoft.entityframeworkcore.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\9.0.0\\microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.analyzers\\9.0.0\\microsoft.entityframeworkcore.analyzers.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.design\\9.0.0\\microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.inmemory\\9.0.0\\microsoft.entityframeworkcore.inmemory.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.relational\\9.0.0\\microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.tools\\9.0.0\\microsoft.entityframeworkcore.tools.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\9.0.0\\microsoft.extensions.caching.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.caching.memory\\9.0.0\\microsoft.extensions.caching.memory.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\9.0.0\\microsoft.extensions.configuration.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\9.0.0\\microsoft.extensions.dependencyinjection.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\9.0.0\\microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencymodel\\9.0.0\\microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.logging\\9.0.0\\microsoft.extensions.logging.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\9.0.0\\microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.options\\9.0.0\\microsoft.extensions.options.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.primitives\\9.0.0\\microsoft.extensions.primitives.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.net.test.sdk\\17.14.1\\microsoft.net.test.sdk.17.14.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.testplatform.objectmodel\\17.14.1\\microsoft.testplatform.objectmodel.17.14.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.testplatform.testhost\\17.14.1\\microsoft.testplatform.testhost.17.14.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mono.texttemplating\\3.0.0\\mono.texttemplating.3.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\moq\\4.20.72\\moq.4.20.72.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mysql.data\\9.0.0\\mysql.data.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mysqlconnector\\2.4.0\\mysqlconnector.2.4.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\newtonsoft.json\\13.0.3\\newtonsoft.json.13.0.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\pipelines.sockets.unofficial\\2.2.8\\pipelines.sockets.unofficial.2.2.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\pomelo.entityframeworkcore.mysql\\9.0.0\\pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\stackexchange.redis\\2.7.27\\stackexchange.redis.2.7.27.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.codedom\\6.0.0\\system.codedom.6.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.collections.immutable\\8.0.0\\system.collections.immutable.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition\\7.0.0\\system.composition.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.attributedmodel\\7.0.0\\system.composition.attributedmodel.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.convention\\7.0.0\\system.composition.convention.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.hosting\\7.0.0\\system.composition.hosting.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.runtime\\7.0.0\\system.composition.runtime.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.typedparts\\7.0.0\\system.composition.typedparts.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.configuration.configurationmanager\\8.0.0\\system.configuration.configurationmanager.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.diagnostics.diagnosticsource\\8.0.1\\system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.diagnostics.eventlog\\8.0.0\\system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.io.pipelines\\7.0.0\\system.io.pipelines.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection.metadata\\8.0.0\\system.reflection.metadata.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime.loader\\4.3.0\\system.runtime.loader.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.security.cryptography.protecteddata\\8.0.0\\system.security.cryptography.protecteddata.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.security.permissions\\8.0.0\\system.security.permissions.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.encoding.codepages\\8.0.0\\system.text.encoding.codepages.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.json\\9.0.0\\system.text.json.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.channels\\7.0.0\\system.threading.channels.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.windows.extensions\\8.0.0\\system.windows.extensions.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit\\2.9.3\\xunit.2.9.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit.abstractions\\2.0.3\\xunit.abstractions.2.0.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit.analyzers\\1.18.0\\xunit.analyzers.1.18.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit.assert\\2.9.3\\xunit.assert.2.9.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit.core\\2.9.3\\xunit.core.2.9.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit.extensibility.core\\2.9.3\\xunit.extensibility.core.2.9.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit.extensibility.execution\\2.9.3\\xunit.extensibility.execution.2.9.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\xunit.runner.visualstudio\\3.1.4\\xunit.runner.visualstudio.3.1.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\zstdsharp.port\\0.8.0\\zstdsharp.port.0.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.app.ref\\9.0.10\\microsoft.netcore.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\9.0.10\\microsoft.windowsdesktop.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\9.0.10\\microsoft.aspnetcore.app.ref.9.0.10.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/Data/AppDbContext.cs b/backend/HardwarePerformance.Infrastructure/Data/AppDbContext.cs index e8205af4..4af555b4 100644 --- a/backend/HardwarePerformance.Infrastructure/Data/AppDbContext.cs +++ b/backend/HardwarePerformance.Infrastructure/Data/AppDbContext.cs @@ -3,15 +3,6 @@ using HardwarePerformance.Core.Entities; namespace HardwarePerformance.Infrastructure.Data { - /// - /// 基础实体类 - /// - public abstract class BaseEntity - { - public DateTime CreatedAt { get; set; } - public DateTime UpdatedAt { get; set; } - } - /// /// 应用程序数据库上下文 /// diff --git a/backend/HardwarePerformance.Infrastructure/Data/DataSeeder.cs b/backend/HardwarePerformance.Infrastructure/Data/DataSeeder.cs index 01d98380..924037db 100644 --- a/backend/HardwarePerformance.Infrastructure/Data/DataSeeder.cs +++ b/backend/HardwarePerformance.Infrastructure/Data/DataSeeder.cs @@ -51,19 +51,19 @@ namespace HardwarePerformance.Infrastructure.Data { Name = "Geekbench", Description = "跨平台处理器和内存性能测试工具", - ApiUrl = "https://browser.geekbench.com/" + Url = "https://browser.geekbench.com/" }, new DataSource { Name = "3DMark", Description = "游戏和图形性能基准测试工具", - ApiUrl = "https://www.3dmark.com/" + Url = "https://www.3dmark.com/" }, new DataSource { Name = "AnTuTu", Description = "移动设备综合性能测试平台", - ApiUrl = "https://www.antutu.com/" + Url = "https://www.antutu.com/" } }; @@ -126,7 +126,7 @@ namespace HardwarePerformance.Infrastructure.Data performanceScores.Add(new PerformanceScore { ProductId = cpu.Id, - BenchmarkType = "Single-Core", + TestName = "Single-Core", Score = cpu.Name.Contains("A17") ? 2950 : cpu.Name.Contains("Snapdragon") ? 2300 : 2200, TestDate = DateTime.Now, DataSourceId = geekbenchSource.Id @@ -135,7 +135,7 @@ namespace HardwarePerformance.Infrastructure.Data performanceScores.Add(new PerformanceScore { ProductId = cpu.Id, - BenchmarkType = "Multi-Core", + TestName = "Multi-Core", Score = cpu.Name.Contains("A17") ? 7200 : cpu.Name.Contains("Snapdragon") ? 7400 : 7500, TestDate = DateTime.Now, DataSourceId = geekbenchSource.Id @@ -154,14 +154,14 @@ namespace HardwarePerformance.Infrastructure.Data specifications.Add(new Specification { ProductId = cpu.Id, - Key = "制程工艺", + Name = "制程工艺", Value = "3nm", Unit = "nm" }); specifications.Add(new Specification { ProductId = cpu.Id, - Key = "核心数", + Name = "核心数", Value = "6", Unit = "核" }); @@ -171,14 +171,14 @@ namespace HardwarePerformance.Infrastructure.Data specifications.Add(new Specification { ProductId = cpu.Id, - Key = "制程工艺", + Name = "制程工艺", Value = "4nm", Unit = "nm" }); specifications.Add(new Specification { ProductId = cpu.Id, - Key = "核心数", + Name = "核心数", Value = "8", Unit = "核" }); @@ -188,14 +188,14 @@ namespace HardwarePerformance.Infrastructure.Data specifications.Add(new Specification { ProductId = cpu.Id, - Key = "制程工艺", + Name = "制程工艺", Value = "4nm", Unit = "nm" }); specifications.Add(new Specification { ProductId = cpu.Id, - Key = "核心数", + Name = "核心数", Value = "8", Unit = "核" }); @@ -242,7 +242,7 @@ namespace HardwarePerformance.Infrastructure.Data performanceScores.Add(new PerformanceScore { ProductId = cpu.Id, - BenchmarkType = "Single-Core", + TestName = "Single-Core", Score = cpu.Name.Contains("Intel") ? 3200 : 2300, TestDate = DateTime.Now, DataSourceId = geekbenchSource.Id @@ -251,7 +251,7 @@ namespace HardwarePerformance.Infrastructure.Data performanceScores.Add(new PerformanceScore { ProductId = cpu.Id, - BenchmarkType = "Multi-Core", + TestName = "Multi-Core", Score = cpu.Name.Contains("Intel") ? 22000 : 30000, TestDate = DateTime.Now, DataSourceId = geekbenchSource.Id diff --git a/backend/HardwarePerformance.Infrastructure/Data/Migrations/20240101000000_InitialCreate.cs b/backend/HardwarePerformance.Infrastructure/Data/Migrations/20240101000000_InitialCreate.cs deleted file mode 100644 index 1dffcbfc..00000000 --- a/backend/HardwarePerformance.Infrastructure/Data/Migrations/20240101000000_InitialCreate.cs +++ /dev/null @@ -1,226 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace HardwarePerformance.Infrastructure.Data.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Categories", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(type: "varchar(100)", maxLength: 100, nullable: false), - Description = table.Column(type: "text", nullable: true), - CreatedAt = table.Column(type: "datetime(6)", nullable: false), - UpdatedAt = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Categories", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "DataSources", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(type: "varchar(100)", maxLength: 100, nullable: false), - Description = table.Column(type: "text", nullable: true), - ApiUrl = table.Column(type: "varchar(500)", maxLength: 500, nullable: true), - CreatedAt = table.Column(type: "datetime(6)", nullable: false), - UpdatedAt = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_DataSources", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Products", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(type: "varchar(200)", maxLength: 200, nullable: false), - Model = table.Column(type: "varchar(100)", maxLength: 100, nullable: false), - Manufacturer = table.Column(type: "varchar(100)", maxLength: 100, nullable: false), - ReleaseDate = table.Column(type: "datetime(6)", nullable: false), - ImageUrl = table.Column(type: "varchar(500)", maxLength: 500, nullable: true), - CategoryId = table.Column(type: "int", nullable: false), - CurrentRank = table.Column(type: "int", nullable: true), - CreatedAt = table.Column(type: "datetime(6)", nullable: false), - UpdatedAt = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Products", x => x.Id); - table.ForeignKey( - name: "FK_Products_Categories_CategoryId", - column: x => x.CategoryId, - principalTable: "Categories", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PerformanceScores", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - ProductId = table.Column(type: "int", nullable: false), - BenchmarkType = table.Column(type: "varchar(50)", maxLength: 50, nullable: false), - Score = table.Column(type: "decimal(10,2)", nullable: false), - TestDate = table.Column(type: "datetime(6)", nullable: false), - DataSourceId = table.Column(type: "int", nullable: false), - CreatedAt = table.Column(type: "datetime(6)", nullable: false), - UpdatedAt = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_PerformanceScores", x => x.Id); - table.ForeignKey( - name: "FK_PerformanceScores_DataSources_DataSourceId", - column: x => x.DataSourceId, - principalTable: "DataSources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PerformanceScores_Products_ProductId", - column: x => x.ProductId, - principalTable: "Products", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "RankingHistories", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - ProductId = table.Column(type: "int", nullable: false), - Rank = table.Column(type: "int", nullable: false), - CategoryId = table.Column(type: "int", nullable: false), - RecordDate = table.Column(type: "datetime(6)", nullable: false), - CreatedAt = table.Column(type: "datetime(6)", nullable: false), - UpdatedAt = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_RankingHistories", x => x.Id); - table.ForeignKey( - name: "FK_RankingHistories_Categories_CategoryId", - column: x => x.CategoryId, - principalTable: "Categories", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_RankingHistories_Products_ProductId", - column: x => x.ProductId, - principalTable: "Products", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Specifications", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - ProductId = table.Column(type: "int", nullable: false), - Key = table.Column(type: "varchar(100)", maxLength: 100, nullable: false), - Value = table.Column(type: "varchar(500)", maxLength: 500, nullable: false), - Unit = table.Column(type: "varchar(50)", maxLength: 50, nullable: true), - CreatedAt = table.Column(type: "datetime(6)", nullable: false), - UpdatedAt = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Specifications", x => x.Id); - table.ForeignKey( - name: "FK_Specifications_Products_ProductId", - column: x => x.ProductId, - principalTable: "Products", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_PerformanceScores_BenchmarkType", - table: "PerformanceScores", - column: "BenchmarkType"); - - migrationBuilder.CreateIndex( - name: "IX_PerformanceScores_ProductId", - table: "PerformanceScores", - column: "ProductId"); - - migrationBuilder.CreateIndex( - name: "IX_Products_CategoryId", - table: "Products", - column: "CategoryId"); - - migrationBuilder.CreateIndex( - name: "IX_Products_Manufacturer", - table: "Products", - column: "Manufacturer"); - - migrationBuilder.CreateIndex( - name: "IX_Products_Model", - table: "Products", - column: "Model"); - - migrationBuilder.CreateIndex( - name: "IX_Products_Name", - table: "Products", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_RankingHistories_CategoryId", - table: "RankingHistories", - column: "CategoryId"); - - migrationBuilder.CreateIndex( - name: "IX_RankingHistories_ProductId", - table: "RankingHistories", - column: "ProductId"); - - migrationBuilder.CreateIndex( - name: "IX_Specifications_ProductId", - table: "Specifications", - column: "ProductId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "PerformanceScores"); - - migrationBuilder.DropTable( - name: "RankingHistories"); - - migrationBuilder.DropTable( - name: "Specifications"); - - migrationBuilder.DropTable( - name: "DataSources"); - - migrationBuilder.DropTable( - name: "Products"); - - migrationBuilder.DropTable( - name: "Categories"); - } - } -} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/Data/Migrations/AppDbContextModelSnapshot.cs b/backend/HardwarePerformance.Infrastructure/Data/Migrations/AppDbContextModelSnapshot.cs deleted file mode 100644 index db31540b..00000000 --- a/backend/HardwarePerformance.Infrastructure/Data/Migrations/AppDbContextModelSnapshot.cs +++ /dev/null @@ -1,315 +0,0 @@ -// -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using HardwarePerformance.Infrastructure.Data; - -#nullable disable - -namespace HardwarePerformance.Infrastructure.Data.Migrations -{ - [DbContext(typeof(AppDbContext))] - partial class AppDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - MySqlModelBuilderExtensions.UseCollation(modelBuilder, "utf8mb4_0900_ai_ci"); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.Category", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("UpdatedAt") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.ToTable("Categories"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.DataSource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("ApiUrl") - .HasMaxLength(500) - .HasColumnType("varchar(500)"); - - b.Property("CreatedAt") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("text"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("UpdatedAt") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.ToTable("DataSources"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.PerformanceScore", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("BenchmarkType") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("CreatedAt") - .HasColumnType("datetime(6)"); - - b.Property("DataSourceId") - .HasColumnType("int"); - - b.Property("ProductId") - .HasColumnType("int"); - - b.Property("Score") - .HasColumnType("decimal(10,2)"); - - b.Property("TestDate") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedAt") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("BenchmarkType"); - - b.HasIndex("ProductId"); - - b.ToTable("PerformanceScores"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.Product", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("CategoryId") - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetime(6)"); - - b.Property("ImageUrl") - .HasMaxLength(500) - .HasColumnType("varchar(500)"); - - b.Property("Manufacturer") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("Model") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("varchar(200)"); - - b.Property("CurrentRank") - .HasColumnType("int"); - - b.Property("ReleaseDate") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedAt") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CategoryId"); - - b.HasIndex("Manufacturer"); - - b.HasIndex("Model"); - - b.HasIndex("Name"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.RankingHistory", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("CategoryId") - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetime(6)"); - - b.Property("ProductId") - .HasColumnType("int"); - - b.Property("Rank") - .HasColumnType("int"); - - b.Property("RecordDate") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedAt") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CategoryId"); - - b.HasIndex("ProductId"); - - b.ToTable("RankingHistories"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.Specification", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetime(6)"); - - b.Property("Key") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("varchar(100)"); - - b.Property("ProductId") - .HasColumnType("int"); - - b.Property("Unit") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("varchar(500)"); - - b.Property("UpdatedAt") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("ProductId"); - - b.ToTable("Specifications"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.PerformanceScore", b => - { - b.HasOne("HardwarePerformance.Core.Entities.DataSource", "DataSource") - .WithMany() - .HasForeignKey("DataSourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("HardwarePerformance.Core.Entities.Product", "Product") - .WithMany("PerformanceScores") - .HasForeignKey("ProductId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("DataSource"); - - b.Navigation("Product"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.Product", b => - { - b.HasOne("HardwarePerformance.Core.Entities.Category", "Category") - .WithMany("Products") - .HasForeignKey("CategoryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Category"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.RankingHistory", b => - { - b.HasOne("HardwarePerformance.Core.Entities.Category", "Category") - .WithMany() - .HasForeignKey("CategoryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("HardwarePerformance.Core.Entities.Product", "Product") - .WithMany("RankingHistories") - .HasForeignKey("ProductId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Category"); - - b.Navigation("Product"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.Specification", b => - { - b.HasOne("HardwarePerformance.Core.Entities.Product", "Product") - .WithMany("Specifications") - .HasForeignKey("ProductId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Product"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.Category", b => - { - b.Navigation("Products"); - }); - - modelBuilder.Entity("HardwarePerformance.Core.Entities.Product", b => - { - b.Navigation("PerformanceScores"); - - b.Navigation("RankingHistories"); - - b.Navigation("Specifications"); - }); -#pragma warning restore 612, 618 - } - } -} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/Data/SimpleAppDbContext.cs b/backend/HardwarePerformance.Infrastructure/Data/SimpleAppDbContext.cs index c03ee84f..88df1322 100644 --- a/backend/HardwarePerformance.Infrastructure/Data/SimpleAppDbContext.cs +++ b/backend/HardwarePerformance.Infrastructure/Data/SimpleAppDbContext.cs @@ -1,6 +1,7 @@ using System.Data; using MySql.Data.MySqlClient; using HardwarePerformance.Core.Entities; +using Microsoft.Extensions.Configuration; namespace HardwarePerformance.Infrastructure.Data; @@ -202,4 +203,63 @@ public class SimpleAppDbContext cmd.CommandText = insertSpecifications; await cmd.ExecuteNonQueryAsync(); } + + public async Task> GetCategoriesAsync() + { + var categories = new List(); + + using var connection = new MySqlConnection(_connectionString); + await connection.OpenAsync(); + + using var cmd = new MySqlCommand("SELECT * FROM Categories", connection); + using var reader = await cmd.ExecuteReaderAsync(); + + while (await reader.ReadAsync()) + { + categories.Add(new + { + Id = reader.GetInt32("Id"), + Name = reader.GetString("Name"), + Description = reader.IsDBNull("Description") ? null : reader.GetString("Description"), + CreatedAt = reader.GetDateTime("CreatedAt") + }); + } + + return categories; + } + + public async Task> GetProductsAsync(int categoryId = 0, int page = 1, int pageSize = 10) + { + var products = new List(); + + using var connection = new MySqlConnection(_connectionString); + await connection.OpenAsync(); + + var offset = (page - 1) * pageSize; + var query = categoryId > 0 + ? $"SELECT p.*, c.Name as CategoryName FROM Products p LEFT JOIN Categories c ON p.CategoryId = c.Id WHERE p.CategoryId = {categoryId} LIMIT {pageSize} OFFSET {offset}" + : $"SELECT p.*, c.Name as CategoryName FROM Products p LEFT JOIN Categories c ON p.CategoryId = c.Id LIMIT {pageSize} OFFSET {offset}"; + + using var cmd = new MySqlCommand(query, connection); + using var reader = await cmd.ExecuteReaderAsync(); + + while (await reader.ReadAsync()) + { + products.Add(new + { + Id = reader.GetInt32("Id"), + Name = reader.GetString("Name"), + Model = reader.IsDBNull("Model") ? null : reader.GetString("Model"), + Manufacturer = reader.IsDBNull("Manufacturer") ? null : reader.GetString("Manufacturer"), + ImageUrl = reader.IsDBNull("ImageUrl") ? null : reader.GetString("ImageUrl"), + ReleaseDate = reader.IsDBNull("ReleaseDate") ? (DateTime?)null : reader.GetDateTime("ReleaseDate"), + CategoryId = reader.IsDBNull("CategoryId") ? (int?)null : reader.GetInt32("CategoryId"), + CategoryName = reader.IsDBNull("CategoryName") ? null : reader.GetString("CategoryName"), + CurrentRank = reader.IsDBNull("CurrentRank") ? (int?)null : reader.GetInt32("CurrentRank"), + CreatedAt = reader.GetDateTime("CreatedAt") + }); + } + + return products; + } } \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj b/backend/HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj index 84022a76..a3845ed4 100644 --- a/backend/HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj +++ b/backend/HardwarePerformance.Infrastructure/HardwarePerformance.Infrastructure.csproj @@ -6,10 +6,15 @@ + + + + + diff --git a/backend/HardwarePerformance.Infrastructure/Repositories/CategoryRepository.cs b/backend/HardwarePerformance.Infrastructure/Repositories/CategoryRepository.cs new file mode 100644 index 00000000..9f32f146 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure/Repositories/CategoryRepository.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore; +using HardwarePerformance.Application.Interfaces; +using HardwarePerformance.Core.Entities; +using HardwarePerformance.Infrastructure.Data; + +namespace HardwarePerformance.Infrastructure.Repositories +{ + /// + /// 类别Repository实现 + /// + public class CategoryRepository : Repository, ICategoryRepository + { + public CategoryRepository(AppDbContext context) : base(context) + { + } + + public async Task GetByNameAsync(string name) + { + return await _dbSet + .FirstOrDefaultAsync(c => c.Name == name); + } + + public async Task> GetCategoriesWithProductCountAsync() + { + return await _dbSet + .Include(c => c.Products) + .Select(c => new Category + { + Id = c.Id, + Name = c.Name, + Description = c.Description, + IconUrl = c.IconUrl, + Products = new List() // 不加载实际产品,只用于计数 + }) + .ToListAsync(); + } + + public async Task IsNameExistsAsync(string name, int? excludeId = null) + { + var query = _dbSet.Where(c => c.Name == name); + + if (excludeId.HasValue) + { + query = query.Where(c => c.Id != excludeId.Value); + } + + return await query.AnyAsync(); + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/Repositories/ProductRepository.cs b/backend/HardwarePerformance.Infrastructure/Repositories/ProductRepository.cs new file mode 100644 index 00000000..df670c5d --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure/Repositories/ProductRepository.cs @@ -0,0 +1,235 @@ +using Microsoft.EntityFrameworkCore; +using HardwarePerformance.Application.Interfaces; +using HardwarePerformance.Core.Entities; +using HardwarePerformance.Infrastructure.Data; + +namespace HardwarePerformance.Infrastructure.Repositories +{ + /// + /// 产品Repository实现 + /// + public class ProductRepository : Repository, IProductRepository + { + public ProductRepository(AppDbContext context) : base(context) + { + } + + public async Task<(IEnumerable products, int totalCount)> GetByCategoryAsync( + int categoryId, + int pageNumber = 1, + int pageSize = 20, + string sortBy = "CurrentRank", + bool ascending = true) + { + var query = _dbSet + .Include(p => p.Category) + .Include(p => p.PerformanceScores) + .Where(p => p.CategoryId == categoryId); + + // 排序 + query = ApplySorting(query, sortBy, ascending); + + var totalCount = await query.CountAsync(); + + var products = await query + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToListAsync(); + + return (products, totalCount); + } + + public async Task GetByModelAsync(string model) + { + return await _dbSet + .Include(p => p.Category) + .Include(p => p.PerformanceScores) + .FirstOrDefaultAsync(p => p.Model == model); + } + + public async Task> GetTopNByCategoryAsync(int categoryId, int n) + { + return await _dbSet + .Include(p => p.Category) + .Include(p => p.PerformanceScores) + .Where(p => p.CategoryId == categoryId) + .OrderBy(p => p.CurrentRank) + .Take(n) + .ToListAsync(); + } + + public async Task<(IEnumerable products, int totalCount)> SearchAsync( + string searchTerm, + int? categoryId = null, + int pageNumber = 1, + int pageSize = 20) + { + var query = _dbSet + .Include(p => p.Category) + .Include(p => p.PerformanceScores) + .Where(p => + (string.IsNullOrEmpty(searchTerm) || + p.Name.Contains(searchTerm) || + p.Model.Contains(searchTerm) || + p.Manufacturer.Contains(searchTerm)) && + (!categoryId.HasValue || p.CategoryId == categoryId.Value)); + + var totalCount = await query.CountAsync(); + + var products = await query + .OrderBy(p => p.CurrentRank) + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToListAsync(); + + return (products, totalCount); + } + + public async Task<(IEnumerable products, int totalCount)> FilterAsync( + int categoryId, + int? minScore = null, + int? maxScore = null, + int? minYear = null, + int? maxYear = null, + string? manufacturer = null, + int pageNumber = 1, + int pageSize = 20) + { + var query = _dbSet + .Include(p => p.Category) + .Include(p => p.PerformanceScores) + .Where(p => p.CategoryId == categoryId); + + // 性能分数筛选 + if (minScore.HasValue) + { + query = query.Where(p => p.PerformanceScores.Any(ps => ps.Score >= minScore.Value)); + } + + if (maxScore.HasValue) + { + query = query.Where(p => p.PerformanceScores.Any(ps => ps.Score <= maxScore.Value)); + } + + // 发布年份筛选 + if (minYear.HasValue) + { + query = query.Where(p => p.ReleaseDate.HasValue && p.ReleaseDate.Value.Year >= minYear.Value); + } + + if (maxYear.HasValue) + { + query = query.Where(p => p.ReleaseDate.HasValue && p.ReleaseDate.Value.Year <= maxYear.Value); + } + + // 品牌筛选 + if (!string.IsNullOrEmpty(manufacturer)) + { + query = query.Where(p => p.Manufacturer == manufacturer); + } + + var totalCount = await query.CountAsync(); + + var products = await query + .OrderBy(p => p.CurrentRank) + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToListAsync(); + + return (products, totalCount); + } + + public async Task GetWithDetailsAsync(int id) + { + return await _dbSet + .Include(p => p.Category) + .Include(p => p.Specifications) + .Include(p => p.PerformanceScores) + .ThenInclude(ps => ps.DataSource) + .Include(p => p.RankingHistories + .OrderByDescending(rh => rh.RecordDate) + .Take(12)) // 最近12个月的排名历史 + .FirstOrDefaultAsync(p => p.Id == id); + } + + public async Task> GetByIdsAsync(IEnumerable productIds) + { + return await _dbSet + .Include(p => p.Category) + .Include(p => p.Specifications) + .Include(p => p.PerformanceScores) + .ThenInclude(ps => ps.DataSource) + .Where(p => productIds.Contains(p.Id)) + .ToListAsync(); + } + + public async Task> GetManufacturersAsync(int? categoryId = null) + { + var query = _dbSet.AsQueryable(); + + if (categoryId.HasValue) + { + query = query.Where(p => p.CategoryId == categoryId.Value); + } + + return await query + .Where(p => !string.IsNullOrEmpty(p.Manufacturer)) + .Select(p => p.Manufacturer) + .Distinct() + .OrderBy(m => m) + .ToListAsync(); + } + + public async Task> GetRankingHistoryAsync(int productId, int months = 12) + { + var startDate = DateTime.UtcNow.AddMonths(-months); + + return await _context.RankingHistories + .Where(rh => rh.ProductId == productId && rh.RecordDate >= startDate) + .OrderBy(rh => rh.RecordDate) + .ToListAsync(); + } + + public async Task<(IEnumerable products, int totalCount)> GetByManufacturerAsync( + string manufacturer, + int? categoryId = null, + int pageNumber = 1, + int pageSize = 20) + { + var query = _dbSet + .Include(p => p.Category) + .Include(p => p.PerformanceScores) + .Where(p => p.Manufacturer == manufacturer); + + if (categoryId.HasValue) + { + query = query.Where(p => p.CategoryId == categoryId.Value); + } + + var totalCount = await query.CountAsync(); + + var products = await query + .OrderBy(p => p.CurrentRank) + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToListAsync(); + + return (products, totalCount); + } + + private IQueryable ApplySorting(IQueryable query, string sortBy, bool ascending) + { + return sortBy.ToLower() switch + { + "name" => ascending ? query.OrderBy(p => p.Name) : query.OrderByDescending(p => p.Name), + "manufacturer" => ascending ? query.OrderBy(p => p.Manufacturer) : query.OrderByDescending(p => p.Manufacturer), + "releasedate" => ascending ? query.OrderBy(p => p.ReleaseDate) : query.OrderByDescending(p => p.ReleaseDate), + "currentrank" => ascending ? query.OrderBy(p => p.CurrentRank) : query.OrderByDescending(p => p.CurrentRank), + "score" => ascending ? + query.OrderBy(p => p.PerformanceScores.Any() ? p.PerformanceScores.Average(ps => ps.Score) : 0) : + query.OrderByDescending(p => p.PerformanceScores.Any() ? p.PerformanceScores.Average(ps => ps.Score) : 0), + _ => ascending ? query.OrderBy(p => p.CurrentRank) : query.OrderByDescending(p => p.CurrentRank) + }; + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/Repositories/Repository.cs b/backend/HardwarePerformance.Infrastructure/Repositories/Repository.cs new file mode 100644 index 00000000..8412f898 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure/Repositories/Repository.cs @@ -0,0 +1,91 @@ +using Microsoft.EntityFrameworkCore; +using HardwarePerformance.Application.Interfaces; +using HardwarePerformance.Infrastructure.Data; + +namespace HardwarePerformance.Infrastructure.Repositories +{ + /// + /// 通用Repository基类,实现基本的CRUD操作 + /// + /// 实体类型 + public class Repository : IRepository where T : class + { + protected readonly AppDbContext _context; + protected readonly DbSet _dbSet; + + public Repository(AppDbContext context) + { + _context = context; + _dbSet = context.Set(); + } + + public virtual async Task GetByIdAsync(int id) + { + return await _dbSet.FindAsync(id); + } + + public virtual async Task> GetAllAsync() + { + return await _dbSet.ToListAsync(); + } + + public virtual async Task> FindAsync(System.Linq.Expressions.Expression> predicate) + { + return await _dbSet.Where(predicate).ToListAsync(); + } + + public virtual async Task ExistsAsync(System.Linq.Expressions.Expression> predicate) + { + return await _dbSet.AnyAsync(predicate); + } + + public virtual async Task AddAsync(T entity) + { + await _dbSet.AddAsync(entity); + await _context.SaveChangesAsync(); + return entity; + } + + public virtual async Task> AddRangeAsync(IEnumerable entities) + { + await _dbSet.AddRangeAsync(entities); + await _context.SaveChangesAsync(); + return entities; + } + + public virtual async Task UpdateAsync(T entity) + { + _dbSet.Update(entity); + await _context.SaveChangesAsync(); + return entity; + } + + public virtual async Task DeleteAsync(T entity) + { + _dbSet.Remove(entity); + await _context.SaveChangesAsync(); + return true; + } + + public virtual async Task DeleteByIdAsync(int id) + { + var entity = await GetByIdAsync(id); + if (entity == null) + { + return false; + } + + return await DeleteAsync(entity); + } + + public virtual async Task CountAsync() + { + return await _dbSet.CountAsync(); + } + + public virtual async Task CountAsync(System.Linq.Expressions.Expression> predicate) + { + return await _dbSet.CountAsync(predicate); + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/Services/RedisCacheService.cs b/backend/HardwarePerformance.Infrastructure/Services/RedisCacheService.cs index ce42c5de..48b8167c 100644 --- a/backend/HardwarePerformance.Infrastructure/Services/RedisCacheService.cs +++ b/backend/HardwarePerformance.Infrastructure/Services/RedisCacheService.cs @@ -1,4 +1,6 @@ using StackExchange.Redis; +using Microsoft.Extensions.Logging; +using System.Text.Json; namespace HardwarePerformance.Infrastructure.Services; diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Application.dll b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Application.dll new file mode 100644 index 00000000..c210c427 Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Application.dll differ diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Application.pdb b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Application.pdb new file mode 100644 index 00000000..14c18d01 Binary files /dev/null and b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Application.pdb differ diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.dll b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.dll index c63399d7..839eb618 100644 Binary files a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.dll and b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.dll differ diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.pdb b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.pdb index 28d66296..c4cfadaf 100644 Binary files a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.pdb and b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Core.pdb differ diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.deps.json b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.deps.json index 1669e904..752c1e5e 100644 --- a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.deps.json +++ b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.deps.json @@ -8,12 +8,775 @@ ".NETCoreApp,Version=v9.0": { "HardwarePerformance.Infrastructure/1.0.0": { "dependencies": { - "HardwarePerformance.Core": "1.0.0" + "HardwarePerformance.Application": "1.0.0", + "HardwarePerformance.Core": "1.0.0", + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.EntityFrameworkCore.Design": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "MySql.Data": "9.0.0", + "Pomelo.EntityFrameworkCore.MySql": "9.0.0", + "StackExchange.Redis": "2.7.27" }, "runtime": { "HardwarePerformance.Infrastructure.dll": {} } }, + "BouncyCastle.Cryptography/2.3.1": { + "runtime": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.3.1.17862" + } + } + }, + "Google.Protobuf/3.26.1": { + "runtime": { + "lib/net5.0/Google.Protobuf.dll": { + "assemblyVersion": "3.26.1.0", + "fileVersion": "3.26.1.0" + } + } + }, + "Humanizer.Core/2.14.1": { + "runtime": { + "lib/net6.0/Humanizer.dll": { + "assemblyVersion": "2.14.0.0", + "fileVersion": "2.14.1.48190" + } + } + }, + "K4os.Compression.LZ4/1.3.8": { + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "assemblyVersion": "1.3.8.0", + "fileVersion": "1.3.8.0" + } + } + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "dependencies": { + "K4os.Compression.LZ4": "1.3.8", + "K4os.Hash.xxHash": "1.0.8" + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "assemblyVersion": "1.3.8.0", + "fileVersion": "1.3.8.0" + } + } + }, + "K4os.Hash.xxHash/1.0.8": { + "runtime": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "assemblyVersion": "1.0.8.0", + "fileVersion": "1.0.8.0" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "runtime": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "Microsoft.Build.Locator/1.7.8": { + "runtime": { + "lib/net6.0/Microsoft.Build.Locator.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.7.8.28074" + } + } + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "4.8.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.Common": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "4.8.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "4.8.0", + "System.Composition": "7.0.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "4.8.0" + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "assemblyVersion": "4.8.0.0", + "fileVersion": "4.800.23.55801" + } + }, + "resources": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Locator": "1.7.8", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0", + "Microsoft.EntityFrameworkCore.Relational": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyModel": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0", + "Mono.TextTemplating": "3.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52902" + } + } + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.Logging/9.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.Options/9.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "runtime": { + "lib/net9.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "Mono.TextTemplating/3.0.0": { + "dependencies": { + "System.CodeDom": "6.0.0" + }, + "runtime": { + "lib/net6.0/Mono.TextTemplating.dll": { + "assemblyVersion": "3.0.0.0", + "fileVersion": "3.0.0.1" + } + } + }, + "MySql.Data/9.0.0": { + "dependencies": { + "BouncyCastle.Cryptography": "2.3.1", + "Google.Protobuf": "3.26.1", + "K4os.Compression.LZ4.Streams": "1.3.8", + "System.Configuration.ConfigurationManager": "8.0.0", + "System.Security.Permissions": "8.0.0", + "ZstdSharp.Port": "0.8.0" + }, + "runtime": { + "lib/net8.0/MySql.Data.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.0.0" + } + }, + "runtimeTargets": { + "runtimes/win-x64/native/comerr64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/gssapi64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/k5sprt64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/krb5_64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + }, + "runtimes/win-x64/native/krbcc64.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "4.1.0.0" + } + } + }, + "MySqlConnector/2.4.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0" + }, + "runtime": { + "lib/net9.0/MySqlConnector.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.4.0.0" + } + } + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "runtime": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "2.2.8.1080" + } + } + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Relational": "9.0.0", + "MySqlConnector": "2.4.0" + }, + "runtime": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.0.0" + } + } + }, + "StackExchange.Redis/2.7.27": { + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Pipelines.Sockets.Unofficial": "2.2.8" + }, + "runtime": { + "lib/net6.0/StackExchange.Redis.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.7.27.49176" + } + } + }, + "System.CodeDom/6.0.0": { + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Composition/7.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + } + }, + "System.Composition.AttributedModel/7.0.0": { + "runtime": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.Convention/7.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "runtime": { + "lib/net7.0/System.Composition.Convention.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.Hosting/7.0.0": { + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "runtime": { + "lib/net7.0/System.Composition.Hosting.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.Runtime/7.0.0": { + "runtime": { + "lib/net7.0/System.Composition.Runtime.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Composition.TypedParts/7.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "runtime": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.0.22.51805" + } + } + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "dependencies": { + "System.Diagnostics.EventLog": "8.0.0", + "System.Security.Cryptography.ProtectedData": "8.0.0" + }, + "runtime": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Diagnostics.EventLog/8.0.0": { + "runtime": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "runtime": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Security.Permissions/8.0.0": { + "dependencies": { + "System.Windows.Extensions": "8.0.0" + }, + "runtime": { + "lib/net8.0/System.Security.Permissions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Windows.Extensions/8.0.0": { + "runtime": { + "lib/net8.0/System.Windows.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "ZstdSharp.Port/0.8.0": { + "runtime": { + "lib/net8.0/ZstdSharp.dll": { + "assemblyVersion": "0.8.0.0", + "fileVersion": "0.8.0.0" + } + } + }, + "HardwarePerformance.Application/1.0.0": { + "dependencies": { + "HardwarePerformance.Core": "1.0.0" + }, + "runtime": { + "HardwarePerformance.Application.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, "HardwarePerformance.Core/1.0.0": { "runtime": { "HardwarePerformance.Core.dll": { @@ -30,6 +793,333 @@ "serviceable": false, "sha512": "" }, + "BouncyCastle.Cryptography/2.3.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==", + "path": "bouncycastle.cryptography/2.3.1", + "hashPath": "bouncycastle.cryptography.2.3.1.nupkg.sha512" + }, + "Google.Protobuf/3.26.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==", + "path": "google.protobuf/3.26.1", + "hashPath": "google.protobuf.3.26.1.nupkg.sha512" + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "path": "humanizer.core/2.14.1", + "hashPath": "humanizer.core.2.14.1.nupkg.sha512" + }, + "K4os.Compression.LZ4/1.3.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LhwlPa7c1zs1OV2XadMtAWdImjLIsqFJPoRcIWAadSRn0Ri1DepK65UbWLPmt4riLqx2d40xjXRk0ogpqNtK7g==", + "path": "k4os.compression.lz4/1.3.8", + "hashPath": "k4os.compression.lz4.1.3.8.nupkg.sha512" + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-P15qr8dZAeo9GvYbUIPEYFQ0MEJ0i5iqr37wsYeRC3la2uCldOoeCa6to0CZ1taiwxIV+Mk8NGuZi+4iWivK9w==", + "path": "k4os.compression.lz4.streams/1.3.8", + "hashPath": "k4os.compression.lz4.streams.1.3.8.nupkg.sha512" + }, + "K4os.Hash.xxHash/1.0.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wp2F7BamQ2Q/7Hk834nV9vRQapgcr8kgv9Jvfm8J3D0IhDqZMMl+a2yxUq5ltJitvXvQfB8W6K4F4fCbw/P6YQ==", + "path": "k4os.hash.xxhash/1.0.8", + "hashPath": "k4os.hash.xxhash.1.0.8.nupkg.sha512" + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==", + "path": "microsoft.bcl.asyncinterfaces/7.0.0", + "hashPath": "microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512" + }, + "Microsoft.Build.Locator/1.7.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sPy10x527Ph16S2u0yGME4S6ohBKJ69WfjeGG/bvELYeZVmJdKjxgnlL8cJJJLGV/cZIRqSfB12UDB8ICakOog==", + "path": "microsoft.build.locator/1.7.8", + "hashPath": "microsoft.build.locator.1.7.8.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "path": "microsoft.codeanalysis.common/4.8.0", + "hashPath": "microsoft.codeanalysis.common.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "path": "microsoft.codeanalysis.csharp/4.8.0", + "hashPath": "microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "path": "microsoft.codeanalysis.csharp.workspaces/4.8.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "path": "microsoft.codeanalysis.workspaces.common/4.8.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IEYreI82QZKklp54yPHxZNG9EKSK6nHEkeuf+0Asie9llgS1gp0V1hw7ODG+QyoB7MuAnNQHmeV1Per/ECpv6A==", + "path": "microsoft.codeanalysis.workspaces.msbuild/4.8.0", + "hashPath": "microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==", + "path": "microsoft.entityframeworkcore/9.0.0", + "hashPath": "microsoft.entityframeworkcore.9.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==", + "path": "microsoft.entityframeworkcore.abstractions/9.0.0", + "hashPath": "microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Pqo8I+yHJ3VQrAoY0hiSncf+5P7gN/RkNilK5e+/K/yKh+yAWxdUAI6t0TG26a9VPlCa9FhyklzyFvRyj3YG9A==", + "path": "microsoft.entityframeworkcore.design/9.0.0", + "hashPath": "microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==", + "path": "microsoft.entityframeworkcore.relational/9.0.0", + "hashPath": "microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FPWZAa9c0H4dvOj351iR1jkUIs4u9ykL4Bm592yhjDyO5lCoWd+TMAHx2EMbarzUvCvgjWjJIoC6//Q9kH6YhA==", + "path": "microsoft.extensions.caching.abstractions/9.0.0", + "hashPath": "microsoft.extensions.caching.abstractions.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zbnPX/JQ0pETRSUG9fNPBvpIq42Aufvs15gGYyNIMhCun9yhmWihz0WgsI7bSDPjxWTKBf8oX/zv6v2uZ3W9OQ==", + "path": "microsoft.extensions.caching.memory/9.0.0", + "hashPath": "microsoft.extensions.caching.memory.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lqvd7W3FGKUO1+ZoUEMaZ5XDJeWvjpy2/M/ptCGz3tXLD4HWVaSzjufsAsjemasBEg+2SxXVtYVvGt5r2nKDlg==", + "path": "microsoft.extensions.configuration.abstractions/9.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MCPrg7v3QgNMr0vX4vzRXvkNGgLg8vKWX0nKCWUxu2uPyMsaRgiRc1tHBnbTcfJMhMKj2slE/j2M9oGkd25DNw==", + "path": "microsoft.extensions.dependencyinjection/9.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/9.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==", + "path": "microsoft.extensions.dependencymodel/9.0.0", + "hashPath": "microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-crjWyORoug0kK7RSNJBTeSE6VX8IQgLf3nUpTB9m62bPXp/tzbnOsnbe8TXEG0AASNaKZddnpHKw7fET8E++Pg==", + "path": "microsoft.extensions.logging/9.0.0", + "hashPath": "microsoft.extensions.logging.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-g0UfujELzlLbHoVG8kPKVBaW470Ewi+jnptGS9KUi6jcb+k2StujtK3m26DFSGGwQ/+bVgZfsWqNzlP6YOejvw==", + "path": "microsoft.extensions.logging.abstractions/9.0.0", + "hashPath": "microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Options/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-y2146b3jrPI3Q0lokKXdKLpmXqakYbDIPDV6r3M8SqvSf45WwOTzkyfDpxnZXJsJQEpAsAqjUq5Pu8RCJMjubg==", + "path": "microsoft.extensions.options/9.0.0", + "hashPath": "microsoft.extensions.options.9.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-N3qEBzmLMYiASUlKxxFIISP4AiwuPTHF5uCh+2CWSwwzAJiIYx0kBJsS30cp1nvhSySFAVi30jecD307jV+8Kg==", + "path": "microsoft.extensions.primitives/9.0.0", + "hashPath": "microsoft.extensions.primitives.9.0.0.nupkg.sha512" + }, + "Mono.TextTemplating/3.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==", + "path": "mono.texttemplating/3.0.0", + "hashPath": "mono.texttemplating.3.0.0.nupkg.sha512" + }, + "MySql.Data/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YT2/fdDy3FBx5ZK0qsupEs9Gt0iFo/mZR+ND5cJwrr+6xguAOXyYpYUbEj27UcLZER5InOUrJQYyUaPIDil2Xw==", + "path": "mysql.data/9.0.0", + "hashPath": "mysql.data.9.0.0.nupkg.sha512" + }, + "MySqlConnector/2.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-78M+gVOjbdZEDIyXQqcA7EYlCGS3tpbUELHvn6638A2w0pkPI625ixnzsa5staAd3N9/xFmPJtkKDYwsXpFi/w==", + "path": "mysqlconnector/2.4.0", + "hashPath": "mysqlconnector.2.4.0.nupkg.sha512" + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==", + "path": "pipelines.sockets.unofficial/2.2.8", + "hashPath": "pipelines.sockets.unofficial.2.2.8.nupkg.sha512" + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cl7S4s6CbJno0LjNxrBHNc2xxmCliR5i40ATPZk/eTywVaAbHCbdc9vbGc3QThvwGjHqrDHT8vY9m1VF/47o0g==", + "path": "pomelo.entityframeworkcore.mysql/9.0.0", + "hashPath": "pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512" + }, + "StackExchange.Redis/2.7.27": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Uqc2OQHglqj9/FfGQ6RkKFkZfHySfZlfmbCl+hc+u2I/IqunfelQ7QJi7ZhvAJxUtu80pildVX6NPLdDaUffOw==", + "path": "stackexchange.redis/2.7.27", + "hashPath": "stackexchange.redis.2.7.27.nupkg.sha512" + }, + "System.CodeDom/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==", + "path": "system.codedom/6.0.0", + "hashPath": "system.codedom.6.0.0.nupkg.sha512" + }, + "System.Composition/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "path": "system.composition/7.0.0", + "hashPath": "system.composition.7.0.0.nupkg.sha512" + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==", + "path": "system.composition.attributedmodel/7.0.0", + "hashPath": "system.composition.attributedmodel.7.0.0.nupkg.sha512" + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "path": "system.composition.convention/7.0.0", + "hashPath": "system.composition.convention.7.0.0.nupkg.sha512" + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "path": "system.composition.hosting/7.0.0", + "hashPath": "system.composition.hosting.7.0.0.nupkg.sha512" + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==", + "path": "system.composition.runtime/7.0.0", + "hashPath": "system.composition.runtime.7.0.0.nupkg.sha512" + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "path": "system.composition.typedparts/7.0.0", + "hashPath": "system.composition.typedparts.7.0.0.nupkg.sha512" + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==", + "path": "system.configuration.configurationmanager/8.0.0", + "hashPath": "system.configuration.configurationmanager.8.0.0.nupkg.sha512" + }, + "System.Diagnostics.EventLog/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", + "path": "system.diagnostics.eventlog/8.0.0", + "hashPath": "system.diagnostics.eventlog.8.0.0.nupkg.sha512" + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==", + "path": "system.security.cryptography.protecteddata/8.0.0", + "hashPath": "system.security.cryptography.protecteddata.8.0.0.nupkg.sha512" + }, + "System.Security.Permissions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-v/BBylw7XevuAsHXoX9dDUUfmBIcUf7Lkz8K3ZXIKz3YRKpw8YftpSir4n4e/jDTKFoaK37AsC3xnk+GNFI1Ow==", + "path": "system.security.permissions/8.0.0", + "hashPath": "system.security.permissions.8.0.0.nupkg.sha512" + }, + "System.Windows.Extensions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Obg3a90MkOw9mYKxrardLpY2u0axDMrSmy4JCdq2cYbelM2cUwmUir5Bomvd1yxmPL9h5LVHU1tuKBZpUjfASg==", + "path": "system.windows.extensions/8.0.0", + "hashPath": "system.windows.extensions.8.0.0.nupkg.sha512" + }, + "ZstdSharp.Port/0.8.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z62eNBIu8E8YtbqlMy57tK3dV1+m2b9NhPeaYovB5exmLKvrGCqOhJTzrEUH5VyUWU6vwX3c1XHJGhW5HVs8dA==", + "path": "zstdsharp.port/0.8.0", + "hashPath": "zstdsharp.port.0.8.0.nupkg.sha512" + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, "HardwarePerformance.Core/1.0.0": { "type": "project", "serviceable": false, diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.dll b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.dll index 29c5c7e2..2d9a765f 100644 Binary files a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.dll and b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.dll differ diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.pdb b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.pdb index efed61d5..cac43cee 100644 Binary files a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.pdb and b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.pdb differ diff --git a/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.runtimeconfig.json b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.runtimeconfig.json new file mode 100644 index 00000000..c5de9007 --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure/bin/Debug/net9.0/HardwarePerformance.Infrastructure.runtimeconfig.json @@ -0,0 +1,13 @@ +{ + "runtimeOptions": { + "tfm": "net9.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "9.0.0" + }, + "configProperties": { + "System.Reflection.NullabilityInfoContext.IsSupported": true, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfo.cs b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfo.cs index c73eeb90..309b10bd 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfo.cs +++ b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfo.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 +// This code was generated by a tool. // -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -14,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("HardwarePerformance.Infrastructure")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7a04b856674d8e31e95655605d640e36e54e848a")] [assembly: System.Reflection.AssemblyProductAttribute("HardwarePerformance.Infrastructure")] [assembly: System.Reflection.AssemblyTitleAttribute("HardwarePerformance.Infrastructure")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfoInputs.cache b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfoInputs.cache index de81d83b..9cde34c6 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfoInputs.cache +++ b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.AssemblyInfoInputs.cache @@ -1 +1 @@ -1ef23de4e336eea01c33b39c99b91c4270cbe40a9e883f3a11996f68da9a0855 +d7554d87611695c232a287a1b7d8d0e5582d71cb8867f711040df3d91ff79c9a diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig index 26dcea9f..44b13b16 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig +++ b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig @@ -1,14 +1,24 @@ is_global = true build_property.TargetFramework = net9.0 +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = build_property.ProjectTypeGuids = build_property.InvariantGlobalization = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = +build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v9.0 build_property.RootNamespace = HardwarePerformance.Infrastructure -build_property.ProjectDir = C:\work\电脑硬件-01\backend\HardwarePerformance.Infrastructure\ +build_property.ProjectDir = D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 9.0 diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GlobalUsings.g.cs b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GlobalUsings.g.cs index 8578f3d0..d12bcbc7 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GlobalUsings.g.cs +++ b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.GlobalUsings.g.cs @@ -1,8 +1,8 @@ // -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Threading; -global using global::System.Threading.Tasks; +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.assets.cache b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.assets.cache index c6c25911..e9a8213c 100644 Binary files a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.assets.cache and b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.assets.cache differ diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.AssemblyReference.cache b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.AssemblyReference.cache index 3210f425..756eb81b 100644 Binary files a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.AssemblyReference.cache and b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.AssemblyReference.cache differ diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.CoreCompileInputs.cache b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.CoreCompileInputs.cache index 3e95dd99..8fd595f5 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.CoreCompileInputs.cache +++ b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -caf94e062580521c8dd2e44f4ece773de615e92af912cbbe4f50ec0e552135e2 +8d8220281ced08823dd3e7dec2e8e310f93bd61f7432e31336c7f49035e8e8bc diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.FileListAbsolute.txt b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.FileListAbsolute.txt index 1e091fce..ba9cc696 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.FileListAbsolute.txt +++ b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.csproj.FileListAbsolute.txt @@ -13,3 +13,22 @@ C:\work\电脑硬件-01\backend\HardwarePerformance.Infrastructure\obj\Debug\net C:\work\电脑硬件-01\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\refint\HardwarePerformance.Infrastructure.dll C:\work\电脑硬件-01\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.pdb C:\work\电脑硬件-01\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\ref\HardwarePerformance.Infrastructure.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\refint\HardwarePerformance.Infrastructure.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.csproj.AssemblyReference.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.AssemblyInfoInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.AssemblyInfo.cs +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.csproj.CoreCompileInputs.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Infrastructure.deps.json +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Infrastructure.runtimeconfig.json +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Infrastructure.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Infrastructure.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Application.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Core.dll +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Core.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\bin\Debug\net9.0\HardwarePerformance.Application.pdb +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\Hardware.DD8A83DD.Up2Date +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\HardwarePerformance.Infrastructure.genruntimeconfig.cache +D:\work\Demo\it\it\backend\HardwarePerformance.Infrastructure\obj\Debug\net9.0\ref\HardwarePerformance.Infrastructure.dll diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.dll b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.dll index 29c5c7e2..2d9a765f 100644 Binary files a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.dll and b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.dll differ diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.genruntimeconfig.cache b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.genruntimeconfig.cache new file mode 100644 index 00000000..a511264f --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.genruntimeconfig.cache @@ -0,0 +1 @@ +2ba385f2ac0804b85ba290a606cc2f3c0f1aafd34ba7b26c04f962ebdc3db21b diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.pdb b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.pdb index efed61d5..cac43cee 100644 Binary files a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.pdb and b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/HardwarePerformance.Infrastructure.pdb differ diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/ref/HardwarePerformance.Infrastructure.dll b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/ref/HardwarePerformance.Infrastructure.dll index f0e07bac..133f605b 100644 Binary files a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/ref/HardwarePerformance.Infrastructure.dll and b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/ref/HardwarePerformance.Infrastructure.dll differ diff --git a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/refint/HardwarePerformance.Infrastructure.dll b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/refint/HardwarePerformance.Infrastructure.dll index f0e07bac..133f605b 100644 Binary files a/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/refint/HardwarePerformance.Infrastructure.dll and b/backend/HardwarePerformance.Infrastructure/obj/Debug/net9.0/refint/HardwarePerformance.Infrastructure.dll differ diff --git a/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.EntityFrameworkCore.targets b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.EntityFrameworkCore.targets new file mode 100644 index 00000000..7d6485dc --- /dev/null +++ b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.EntityFrameworkCore.targets @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.dgspec.json b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.dgspec.json index 198c64a7..55797775 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.dgspec.json +++ b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.dgspec.json @@ -1,24 +1,24 @@ { "format": 1, "restore": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": {} + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": {} }, "projects": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", - "projectName": "HardwarePerformance.Core", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\obj\\", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "projectName": "HardwarePerformance.Application", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -26,9 +26,94 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "10.0.100" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" + } + } + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "projectName": "HardwarePerformance.Core", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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": [ + "net9.0" + ], + "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { @@ -46,7 +131,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -62,30 +147,44 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } }, - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", "projectName": "HardwarePerformance.Infrastructure", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -93,16 +192,19 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" } } } @@ -117,7 +219,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -135,6 +237,18 @@ "target": "Package", "version": "[9.0.0, )" }, + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.Logging.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, "MySql.Data": { "target": "Package", "version": "[9.0.0, )" @@ -142,6 +256,10 @@ "Pomelo.EntityFrameworkCore.MySql": { "target": "Package", "version": "[9.0.0, )" + }, + "StackExchange.Redis": { + "target": "Package", + "version": "[2.7.27, )" } }, "imports": [ @@ -155,12 +273,26 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } } diff --git a/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.props b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.props index b085de15..2e393b0e 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.props +++ b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.props @@ -5,12 +5,21 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\代\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + C:\Users\Administrator\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.14.0 + 7.0.0 - + + + + + + + + C:\Users\Administrator\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.4 + C:\Users\Administrator\.nuget\packages\microsoft.entityframeworkcore.tools\9.0.0 + \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.targets b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.targets index 3dc06ef3..fa1ed921 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.targets +++ b/backend/HardwarePerformance.Infrastructure/obj/HardwarePerformance.Infrastructure.csproj.nuget.g.targets @@ -1,2 +1,10 @@  - \ No newline at end of file + + + + + + + + + \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/obj/project.assets.json b/backend/HardwarePerformance.Infrastructure/obj/project.assets.json index 9cda0686..dfc4644d 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/project.assets.json +++ b/backend/HardwarePerformance.Infrastructure/obj/project.assets.json @@ -1,37 +1,4334 @@ { "version": 3, "targets": { - "net9.0": {} + "net9.0": { + "BouncyCastle.Cryptography/2.3.1": { + "type": "package", + "compile": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/BouncyCastle.Cryptography.dll": { + "related": ".xml" + } + } + }, + "Google.Protobuf/3.26.1": { + "type": "package", + "compile": { + "lib/net5.0/Google.Protobuf.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net5.0/Google.Protobuf.dll": { + "related": ".pdb;.xml" + } + } + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "compile": { + "lib/net6.0/Humanizer.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Humanizer.dll": { + "related": ".xml" + } + } + }, + "K4os.Compression.LZ4/1.3.8": { + "type": "package", + "compile": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.dll": { + "related": ".xml" + } + } + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "type": "package", + "dependencies": { + "K4os.Compression.LZ4": "1.3.8", + "K4os.Hash.xxHash": "1.0.8", + "System.IO.Pipelines": "6.0.3" + }, + "compile": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Compression.LZ4.Streams.dll": { + "related": ".xml" + } + } + }, + "K4os.Hash.xxHash/1.0.8": { + "type": "package", + "compile": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/K4os.Hash.xxHash.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "type": "package", + "compile": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Build.Framework/17.8.3": { + "type": "package", + "compile": { + "ref/net8.0/Microsoft.Build.Framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/_._": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.Build.Locator/1.7.8": { + "type": "package", + "compile": { + "lib/net6.0/Microsoft.Build.Locator.dll": {} + }, + "runtime": { + "lib/net6.0/Microsoft.Build.Locator.dll": {} + }, + "build": { + "build/_._": {} + } + }, + "Microsoft.CodeAnalysis.Analyzers/3.3.4": { + "type": "package", + "build": { + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props": {}, + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets": {} + } + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.4", + "System.Collections.Immutable": "7.0.0", + "System.Reflection.Metadata": "7.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[4.8.0]" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "[4.8.0]", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "System.Composition": "7.0.0", + "System.IO.Pipelines": "7.0.0", + "System.Threading.Channels": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "type": "package", + "dependencies": { + "Microsoft.Build.Framework": "16.10.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]", + "System.Text.Json": "7.0.3" + }, + "compile": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "related": ".pdb;.runtimeconfig.json;.xml" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "related": ".BuildHost.pdb;.BuildHost.runtimeconfig.json;.BuildHost.xml;.pdb;.xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": { + "related": ".pdb;.runtimeconfig.json;.xml" + }, + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "related": ".BuildHost.pdb;.BuildHost.runtimeconfig.json;.BuildHost.xml;.pdb;.xml" + } + }, + "resource": { + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "cs" + }, + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "de" + }, + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "es" + }, + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "fr" + }, + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "it" + }, + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ja" + }, + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ko" + }, + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pl" + }, + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "pt-BR" + }, + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "ru" + }, + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "tr" + }, + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "9.0.0", + "Microsoft.EntityFrameworkCore.Analyzers": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/9.0.0": { + "type": "package" + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Framework": "17.8.3", + "Microsoft.Build.Locator": "1.7.8", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0", + "Microsoft.EntityFrameworkCore.Relational": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyModel": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0", + "Mono.TextTemplating": "3.0.0", + "System.Text.Json": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "related": ".xml" + } + }, + "build": { + "build/net8.0/Microsoft.EntityFrameworkCore.Design.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Tools/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": "9.0.0" + } + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Logging/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {} + } + }, + "Microsoft.Extensions.Options/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" + }, + "compile": { + "lib/net9.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {} + } + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Mono.TextTemplating/3.0.0": { + "type": "package", + "dependencies": { + "System.CodeDom": "6.0.0" + }, + "compile": { + "lib/net6.0/Mono.TextTemplating.dll": {} + }, + "runtime": { + "lib/net6.0/Mono.TextTemplating.dll": {} + }, + "build": { + "buildTransitive/Mono.TextTemplating.targets": {} + } + }, + "MySql.Data/9.0.0": { + "type": "package", + "dependencies": { + "BouncyCastle.Cryptography": "2.3.1", + "Google.Protobuf": "3.26.1", + "K4os.Compression.LZ4.Streams": "1.3.8", + "System.Buffers": "4.5.1", + "System.Configuration.ConfigurationManager": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Runtime.Loader": "4.3.0", + "System.Security.Permissions": "8.0.0", + "System.Text.Encoding.CodePages": "8.0.0", + "System.Text.Json": "8.0.3", + "System.Threading.Tasks.Extensions": "4.5.4", + "ZstdSharp.Port": "0.8.0" + }, + "compile": { + "lib/net8.0/MySql.Data.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MySql.Data.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win-x64/native/comerr64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/gssapi64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/k5sprt64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/krb5_64.dll": { + "assetType": "native", + "rid": "win-x64" + }, + "runtimes/win-x64/native/krbcc64.dll": { + "assetType": "native", + "rid": "win-x64" + } + } + }, + "MySqlConnector/2.4.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "compile": { + "lib/net9.0/MySqlConnector.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/MySqlConnector.dll": { + "related": ".xml" + } + } + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "type": "package", + "dependencies": { + "System.IO.Pipelines": "5.0.1" + }, + "compile": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net5.0/Pipelines.Sockets.Unofficial.dll": { + "related": ".xml" + } + } + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Relational": "[9.0.0, 9.0.999]", + "MySqlConnector": "2.4.0" + }, + "compile": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "related": ".xml" + } + } + }, + "StackExchange.Redis/2.7.27": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Pipelines.Sockets.Unofficial": "2.2.8" + }, + "compile": { + "lib/net6.0/StackExchange.Redis.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/StackExchange.Redis.dll": { + "related": ".xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.CodeDom/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Collections.Immutable/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + }, + "compile": { + "lib/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.AttributedModel/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Convention/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Hosting/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.Runtime/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Composition.TypedParts/7.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.EventLog": "8.0.0", + "System.Security.Cryptography.ProtectedData": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Diagnostics.DiagnosticSource/8.0.1": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Diagnostics.EventLog/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { + "assetType": "runtime", + "rid": "win" + }, + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.IO.dll": { + "related": ".xml" + } + } + }, + "System.IO.Pipelines/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.IO.Pipelines.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Reflection.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Metadata/7.0.0": { + "type": "package", + "dependencies": { + "System.Collections.Immutable": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Runtime.Loader/4.3.0": { + "type": "package", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.Loader.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.5/System.Runtime.Loader.dll": {} + } + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Security.Permissions/8.0.0": { + "type": "package", + "dependencies": { + "System.Windows.Extensions": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encoding.CodePages/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Json/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/System.Text.Json.targets": {} + } + }, + "System.Threading.Channels/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": { + "related": ".xml" + } + } + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Windows.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "ZstdSharp.Port/0.8.0": { + "type": "package", + "compile": { + "lib/net8.0/ZstdSharp.dll": {} + }, + "runtime": { + "lib/net8.0/ZstdSharp.dll": {} + } + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "dependencies": { + "HardwarePerformance.Core": "1.0.0" + }, + "compile": { + "bin/placeholder/HardwarePerformance.Application.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Application.dll": {} + } + }, + "HardwarePerformance.Core/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v9.0", + "compile": { + "bin/placeholder/HardwarePerformance.Core.dll": {} + }, + "runtime": { + "bin/placeholder/HardwarePerformance.Core.dll": {} + } + } + } + }, + "libraries": { + "BouncyCastle.Cryptography/2.3.1": { + "sha512": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==", + "type": "package", + "path": "bouncycastle.cryptography/2.3.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "bouncycastle.cryptography.2.3.1.nupkg.sha512", + "bouncycastle.cryptography.nuspec", + "lib/net461/BouncyCastle.Cryptography.dll", + "lib/net461/BouncyCastle.Cryptography.xml", + "lib/net6.0/BouncyCastle.Cryptography.dll", + "lib/net6.0/BouncyCastle.Cryptography.xml", + "lib/netstandard2.0/BouncyCastle.Cryptography.dll", + "lib/netstandard2.0/BouncyCastle.Cryptography.xml", + "packageIcon.png" + ] + }, + "Google.Protobuf/3.26.1": { + "sha512": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==", + "type": "package", + "path": "google.protobuf/3.26.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "google.protobuf.3.26.1.nupkg.sha512", + "google.protobuf.nuspec", + "lib/net45/Google.Protobuf.dll", + "lib/net45/Google.Protobuf.pdb", + "lib/net45/Google.Protobuf.xml", + "lib/net5.0/Google.Protobuf.dll", + "lib/net5.0/Google.Protobuf.pdb", + "lib/net5.0/Google.Protobuf.xml", + "lib/netstandard1.1/Google.Protobuf.dll", + "lib/netstandard1.1/Google.Protobuf.pdb", + "lib/netstandard1.1/Google.Protobuf.xml", + "lib/netstandard2.0/Google.Protobuf.dll", + "lib/netstandard2.0/Google.Protobuf.pdb", + "lib/netstandard2.0/Google.Protobuf.xml" + ] + }, + "Humanizer.Core/2.14.1": { + "sha512": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "type": "package", + "path": "humanizer.core/2.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "humanizer.core.2.14.1.nupkg.sha512", + "humanizer.core.nuspec", + "lib/net6.0/Humanizer.dll", + "lib/net6.0/Humanizer.xml", + "lib/netstandard1.0/Humanizer.dll", + "lib/netstandard1.0/Humanizer.xml", + "lib/netstandard2.0/Humanizer.dll", + "lib/netstandard2.0/Humanizer.xml", + "logo.png" + ] + }, + "K4os.Compression.LZ4/1.3.8": { + "sha512": "LhwlPa7c1zs1OV2XadMtAWdImjLIsqFJPoRcIWAadSRn0Ri1DepK65UbWLPmt4riLqx2d40xjXRk0ogpqNtK7g==", + "type": "package", + "path": "k4os.compression.lz4/1.3.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.compression.lz4.1.3.8.nupkg.sha512", + "k4os.compression.lz4.nuspec", + "lib/net462/K4os.Compression.LZ4.dll", + "lib/net462/K4os.Compression.LZ4.xml", + "lib/net5.0/K4os.Compression.LZ4.dll", + "lib/net5.0/K4os.Compression.LZ4.xml", + "lib/net6.0/K4os.Compression.LZ4.dll", + "lib/net6.0/K4os.Compression.LZ4.xml", + "lib/netstandard2.0/K4os.Compression.LZ4.dll", + "lib/netstandard2.0/K4os.Compression.LZ4.xml", + "lib/netstandard2.1/K4os.Compression.LZ4.dll", + "lib/netstandard2.1/K4os.Compression.LZ4.xml" + ] + }, + "K4os.Compression.LZ4.Streams/1.3.8": { + "sha512": "P15qr8dZAeo9GvYbUIPEYFQ0MEJ0i5iqr37wsYeRC3la2uCldOoeCa6to0CZ1taiwxIV+Mk8NGuZi+4iWivK9w==", + "type": "package", + "path": "k4os.compression.lz4.streams/1.3.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.compression.lz4.streams.1.3.8.nupkg.sha512", + "k4os.compression.lz4.streams.nuspec", + "lib/net462/K4os.Compression.LZ4.Streams.dll", + "lib/net462/K4os.Compression.LZ4.Streams.xml", + "lib/net5.0/K4os.Compression.LZ4.Streams.dll", + "lib/net5.0/K4os.Compression.LZ4.Streams.xml", + "lib/net6.0/K4os.Compression.LZ4.Streams.dll", + "lib/net6.0/K4os.Compression.LZ4.Streams.xml", + "lib/netstandard2.0/K4os.Compression.LZ4.Streams.dll", + "lib/netstandard2.0/K4os.Compression.LZ4.Streams.xml", + "lib/netstandard2.1/K4os.Compression.LZ4.Streams.dll", + "lib/netstandard2.1/K4os.Compression.LZ4.Streams.xml" + ] + }, + "K4os.Hash.xxHash/1.0.8": { + "sha512": "Wp2F7BamQ2Q/7Hk834nV9vRQapgcr8kgv9Jvfm8J3D0IhDqZMMl+a2yxUq5ltJitvXvQfB8W6K4F4fCbw/P6YQ==", + "type": "package", + "path": "k4os.hash.xxhash/1.0.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "k4os.hash.xxhash.1.0.8.nupkg.sha512", + "k4os.hash.xxhash.nuspec", + "lib/net462/K4os.Hash.xxHash.dll", + "lib/net462/K4os.Hash.xxHash.xml", + "lib/net5.0/K4os.Hash.xxHash.dll", + "lib/net5.0/K4os.Hash.xxHash.xml", + "lib/net6.0/K4os.Hash.xxHash.dll", + "lib/net6.0/K4os.Hash.xxHash.xml", + "lib/netstandard2.0/K4os.Hash.xxHash.dll", + "lib/netstandard2.0/K4os.Hash.xxHash.xml", + "lib/netstandard2.1/K4os.Hash.xxHash.dll", + "lib/netstandard2.1/K4os.Hash.xxHash.xml" + ] + }, + "Microsoft.Bcl.AsyncInterfaces/7.0.0": { + "sha512": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==", + "type": "package", + "path": "microsoft.bcl.asyncinterfaces/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Bcl.AsyncInterfaces.targets", + "buildTransitive/net462/_._", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/net462/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.xml", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll", + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.xml", + "microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512", + "microsoft.bcl.asyncinterfaces.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Build.Framework/17.8.3": { + "sha512": "NrQZJW8TlKVPx72yltGb8SVz3P5mNRk9fNiD/ao8jRSk48WqIIdCn99q4IjlVmPcruuQ+yLdjNQLL8Rb4c916g==", + "type": "package", + "path": "microsoft.build.framework/17.8.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "README.md", + "lib/net472/Microsoft.Build.Framework.dll", + "lib/net472/Microsoft.Build.Framework.pdb", + "lib/net472/Microsoft.Build.Framework.xml", + "lib/net8.0/Microsoft.Build.Framework.dll", + "lib/net8.0/Microsoft.Build.Framework.pdb", + "lib/net8.0/Microsoft.Build.Framework.xml", + "microsoft.build.framework.17.8.3.nupkg.sha512", + "microsoft.build.framework.nuspec", + "notices/THIRDPARTYNOTICES.txt", + "ref/net472/Microsoft.Build.Framework.dll", + "ref/net472/Microsoft.Build.Framework.xml", + "ref/net8.0/Microsoft.Build.Framework.dll", + "ref/net8.0/Microsoft.Build.Framework.xml", + "ref/netstandard2.0/Microsoft.Build.Framework.dll", + "ref/netstandard2.0/Microsoft.Build.Framework.xml" + ] + }, + "Microsoft.Build.Locator/1.7.8": { + "sha512": "sPy10x527Ph16S2u0yGME4S6ohBKJ69WfjeGG/bvELYeZVmJdKjxgnlL8cJJJLGV/cZIRqSfB12UDB8ICakOog==", + "type": "package", + "path": "microsoft.build.locator/1.7.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "build/Microsoft.Build.Locator.props", + "build/Microsoft.Build.Locator.targets", + "lib/net46/Microsoft.Build.Locator.dll", + "lib/net6.0/Microsoft.Build.Locator.dll", + "microsoft.build.locator.1.7.8.nupkg.sha512", + "microsoft.build.locator.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Analyzers/3.3.4": { + "sha512": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==", + "type": "package", + "path": "microsoft.codeanalysis.analyzers/3.3.4", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.txt", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll", + "analyzers/dotnet/cs/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll", + "analyzers/dotnet/vb/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets", + "buildTransitive/config/analysislevel_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_all.globalconfig", + "buildTransitive/config/analysislevel_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_default.globalconfig", + "buildTransitive/config/analysislevel_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_none.globalconfig", + "buildTransitive/config/analysislevel_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended_warnaserror.globalconfig", + "documentation/Analyzer Configuration.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.sarif", + "editorconfig/AllRulesDefault/.editorconfig", + "editorconfig/AllRulesDisabled/.editorconfig", + "editorconfig/AllRulesEnabled/.editorconfig", + "editorconfig/CorrectnessRulesDefault/.editorconfig", + "editorconfig/CorrectnessRulesEnabled/.editorconfig", + "editorconfig/DataflowRulesDefault/.editorconfig", + "editorconfig/DataflowRulesEnabled/.editorconfig", + "editorconfig/LibraryRulesDefault/.editorconfig", + "editorconfig/LibraryRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled/.editorconfig", + "editorconfig/PortedFromFxCopRulesDefault/.editorconfig", + "editorconfig/PortedFromFxCopRulesEnabled/.editorconfig", + "microsoft.codeanalysis.analyzers.3.3.4.nupkg.sha512", + "microsoft.codeanalysis.analyzers.nuspec", + "rulesets/AllRulesDefault.ruleset", + "rulesets/AllRulesDisabled.ruleset", + "rulesets/AllRulesEnabled.ruleset", + "rulesets/CorrectnessRulesDefault.ruleset", + "rulesets/CorrectnessRulesEnabled.ruleset", + "rulesets/DataflowRulesDefault.ruleset", + "rulesets/DataflowRulesEnabled.ruleset", + "rulesets/LibraryRulesDefault.ruleset", + "rulesets/LibraryRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled.ruleset", + "rulesets/PortedFromFxCopRulesDefault.ruleset", + "rulesets/PortedFromFxCopRulesEnabled.ruleset", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.CodeAnalysis.Common/4.8.0": { + "sha512": "/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "type": "package", + "path": "microsoft.codeanalysis.common/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.dll", + "lib/net6.0/Microsoft.CodeAnalysis.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.dll", + "lib/net7.0/Microsoft.CodeAnalysis.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "microsoft.codeanalysis.common.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp/4.8.0": { + "sha512": "+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "type": "package", + "path": "microsoft.codeanalysis.csharp/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": { + "sha512": "3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "type": "package", + "path": "microsoft.codeanalysis.csharp.workspaces/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.workspaces.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": { + "sha512": "LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.common/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": { + "sha512": "IEYreI82QZKklp54yPHxZNG9EKSK6nHEkeuf+0Asie9llgS1gp0V1hw7ODG+QyoB7MuAnNQHmeV1Per/ECpv6A==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.msbuild/4.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.exe", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net472/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net472/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.runtimeconfig.json", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net6.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net6.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net6.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.runtimeconfig.json", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.xml", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll", + "microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.msbuild.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore/9.0.0": { + "sha512": "wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==", + "type": "package", + "path": "microsoft.entityframeworkcore/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "buildTransitive/net8.0/Microsoft.EntityFrameworkCore.props", + "lib/net8.0/Microsoft.EntityFrameworkCore.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.xml", + "microsoft.entityframeworkcore.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Abstractions/9.0.0": { + "sha512": "fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==", + "type": "package", + "path": "microsoft.entityframeworkcore.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.xml", + "microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.abstractions.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Analyzers/9.0.0": { + "sha512": "Qje+DzXJOKiXF72SL0XxNlDtTkvWWvmwknuZtFahY5hIQpRKO59qnGuERIQ3qlzuq5x4bAJ8WMbgU5DLhBgeOQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.analyzers/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.analyzers.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.analyzers.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Design/9.0.0": { + "sha512": "Pqo8I+yHJ3VQrAoY0hiSncf+5P7gN/RkNilK5e+/K/yKh+yAWxdUAI6t0TG26a9VPlCa9FhyklzyFvRyj3YG9A==", + "type": "package", + "path": "microsoft.entityframeworkcore.design/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "build/net8.0/Microsoft.EntityFrameworkCore.Design.props", + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.xml", + "microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.design.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Relational/9.0.0": { + "sha512": "j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==", + "type": "package", + "path": "microsoft.entityframeworkcore.relational/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll", + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.xml", + "microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.relational.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Tools/9.0.0": { + "sha512": "qjw+3/CaWiWnyVblvKHY11rQKH5eHQDSbtxjgxVhxGJrOpmjZ3JxtD0pjwkr4y/ELubsXr6xDfBcRJSkX/9hWQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.tools/9.0.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.tools.9.0.0.nupkg.sha512", + "microsoft.entityframeworkcore.tools.nuspec", + "tools/EntityFrameworkCore.PS2.psd1", + "tools/EntityFrameworkCore.PS2.psm1", + "tools/EntityFrameworkCore.psd1", + "tools/EntityFrameworkCore.psm1", + "tools/about_EntityFrameworkCore.help.txt", + "tools/init.ps1", + "tools/net472/any/ef.exe", + "tools/net472/win-arm64/ef.exe", + "tools/net472/win-x86/ef.exe", + "tools/netcoreapp2.0/any/ef.dll", + "tools/netcoreapp2.0/any/ef.runtimeconfig.json" + ] + }, + "Microsoft.Extensions.Caching.Abstractions/9.0.0": { + "sha512": "FPWZAa9c0H4dvOj351iR1jkUIs4u9ykL4Bm592yhjDyO5lCoWd+TMAHx2EMbarzUvCvgjWjJIoC6//Q9kH6YhA==", + "type": "package", + "path": "microsoft.extensions.caching.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml", + "microsoft.extensions.caching.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.caching.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Caching.Memory/9.0.0": { + "sha512": "zbnPX/JQ0pETRSUG9fNPBvpIq42Aufvs15gGYyNIMhCun9yhmWihz0WgsI7bSDPjxWTKBf8oX/zv6v2uZ3W9OQ==", + "type": "package", + "path": "microsoft.extensions.caching.memory/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Memory.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Memory.targets", + "lib/net462/Microsoft.Extensions.Caching.Memory.dll", + "lib/net462/Microsoft.Extensions.Caching.Memory.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml", + "microsoft.extensions.caching.memory.9.0.0.nupkg.sha512", + "microsoft.extensions.caching.memory.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Abstractions/9.0.0": { + "sha512": "lqvd7W3FGKUO1+ZoUEMaZ5XDJeWvjpy2/M/ptCGz3tXLD4HWVaSzjufsAsjemasBEg+2SxXVtYVvGt5r2nKDlg==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection/9.0.0": { + "sha512": "MCPrg7v3QgNMr0vX4vzRXvkNGgLg8vKWX0nKCWUxu2uPyMsaRgiRc1tHBnbTcfJMhMKj2slE/j2M9oGkd25DNw==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", + "microsoft.extensions.dependencyinjection.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.0": { + "sha512": "+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyModel/9.0.0": { + "sha512": "saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==", + "type": "package", + "path": "microsoft.extensions.dependencymodel/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyModel.targets", + "lib/net462/Microsoft.Extensions.DependencyModel.dll", + "lib/net462/Microsoft.Extensions.DependencyModel.xml", + "lib/net8.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net8.0/Microsoft.Extensions.DependencyModel.xml", + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net9.0/Microsoft.Extensions.DependencyModel.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.xml", + "microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512", + "microsoft.extensions.dependencymodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging/9.0.0": { + "sha512": "crjWyORoug0kK7RSNJBTeSE6VX8IQgLf3nUpTB9m62bPXp/tzbnOsnbe8TXEG0AASNaKZddnpHKw7fET8E++Pg==", + "type": "package", + "path": "microsoft.extensions.logging/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.targets", + "lib/net462/Microsoft.Extensions.Logging.dll", + "lib/net462/Microsoft.Extensions.Logging.xml", + "lib/net8.0/Microsoft.Extensions.Logging.dll", + "lib/net8.0/Microsoft.Extensions.Logging.xml", + "lib/net9.0/Microsoft.Extensions.Logging.dll", + "lib/net9.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", + "microsoft.extensions.logging.9.0.0.nupkg.sha512", + "microsoft.extensions.logging.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/9.0.0": { + "sha512": "g0UfujELzlLbHoVG8kPKVBaW470Ewi+jnptGS9KUi6jcb+k2StujtK3m26DFSGGwQ/+bVgZfsWqNzlP6YOejvw==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options/9.0.0": { + "sha512": "y2146b3jrPI3Q0lokKXdKLpmXqakYbDIPDV6r3M8SqvSf45WwOTzkyfDpxnZXJsJQEpAsAqjUq5Pu8RCJMjubg==", + "type": "package", + "path": "microsoft.extensions.options/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Options.targets", + "buildTransitive/net462/Microsoft.Extensions.Options.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Options.targets", + "lib/net462/Microsoft.Extensions.Options.dll", + "lib/net462/Microsoft.Extensions.Options.xml", + "lib/net8.0/Microsoft.Extensions.Options.dll", + "lib/net8.0/Microsoft.Extensions.Options.xml", + "lib/net9.0/Microsoft.Extensions.Options.dll", + "lib/net9.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.1/Microsoft.Extensions.Options.dll", + "lib/netstandard2.1/Microsoft.Extensions.Options.xml", + "microsoft.extensions.options.9.0.0.nupkg.sha512", + "microsoft.extensions.options.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/9.0.0": { + "sha512": "N3qEBzmLMYiASUlKxxFIISP4AiwuPTHF5uCh+2CWSwwzAJiIYx0kBJsS30cp1nvhSySFAVi30jecD307jV+8Kg==", + "type": "package", + "path": "microsoft.extensions.primitives/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net8.0/Microsoft.Extensions.Primitives.dll", + "lib/net8.0/Microsoft.Extensions.Primitives.xml", + "lib/net9.0/Microsoft.Extensions.Primitives.dll", + "lib/net9.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.9.0.0.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Mono.TextTemplating/3.0.0": { + "sha512": "YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==", + "type": "package", + "path": "mono.texttemplating/3.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt/LICENSE", + "buildTransitive/Mono.TextTemplating.targets", + "lib/net472/Mono.TextTemplating.dll", + "lib/net6.0/Mono.TextTemplating.dll", + "lib/netstandard2.0/Mono.TextTemplating.dll", + "mono.texttemplating.3.0.0.nupkg.sha512", + "mono.texttemplating.nuspec", + "readme.md" + ] + }, + "MySql.Data/9.0.0": { + "sha512": "YT2/fdDy3FBx5ZK0qsupEs9Gt0iFo/mZR+ND5cJwrr+6xguAOXyYpYUbEj27UcLZER5InOUrJQYyUaPIDil2Xw==", + "type": "package", + "path": "mysql.data/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net462/MySql.Data.dll", + "lib/net462/MySql.Data.xml", + "lib/net48/MySql.Data.dll", + "lib/net48/MySql.Data.xml", + "lib/net6.0/MySql.Data.dll", + "lib/net6.0/MySql.Data.xml", + "lib/net8.0/MySql.Data.dll", + "lib/net8.0/MySql.Data.xml", + "lib/netstandard2.0/MySql.Data.dll", + "lib/netstandard2.0/MySql.Data.xml", + "lib/netstandard2.1/MySql.Data.dll", + "lib/netstandard2.1/MySql.Data.xml", + "logo-mysql-170x115.png", + "mysql.data.9.0.0.nupkg.sha512", + "mysql.data.nuspec", + "runtimes/win-x64/native/comerr64.dll", + "runtimes/win-x64/native/gssapi64.dll", + "runtimes/win-x64/native/k5sprt64.dll", + "runtimes/win-x64/native/krb5_64.dll", + "runtimes/win-x64/native/krbcc64.dll" + ] + }, + "MySqlConnector/2.4.0": { + "sha512": "78M+gVOjbdZEDIyXQqcA7EYlCGS3tpbUELHvn6638A2w0pkPI625ixnzsa5staAd3N9/xFmPJtkKDYwsXpFi/w==", + "type": "package", + "path": "mysqlconnector/2.4.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net462/MySqlConnector.dll", + "lib/net462/MySqlConnector.xml", + "lib/net471/MySqlConnector.dll", + "lib/net471/MySqlConnector.xml", + "lib/net48/MySqlConnector.dll", + "lib/net48/MySqlConnector.xml", + "lib/net6.0/MySqlConnector.dll", + "lib/net6.0/MySqlConnector.xml", + "lib/net8.0/MySqlConnector.dll", + "lib/net8.0/MySqlConnector.xml", + "lib/net9.0/MySqlConnector.dll", + "lib/net9.0/MySqlConnector.xml", + "lib/netstandard2.0/MySqlConnector.dll", + "lib/netstandard2.0/MySqlConnector.xml", + "lib/netstandard2.1/MySqlConnector.dll", + "lib/netstandard2.1/MySqlConnector.xml", + "logo.png", + "mysqlconnector.2.4.0.nupkg.sha512", + "mysqlconnector.nuspec" + ] + }, + "Pipelines.Sockets.Unofficial/2.2.8": { + "sha512": "zG2FApP5zxSx6OcdJQLbZDk2AVlN2BNQD6MorwIfV6gVj0RRxWPEp2LXAxqDGZqeNV1Zp0BNPcNaey/GXmTdvQ==", + "type": "package", + "path": "pipelines.sockets.unofficial/2.2.8", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/Pipelines.Sockets.Unofficial.dll", + "lib/net461/Pipelines.Sockets.Unofficial.xml", + "lib/net472/Pipelines.Sockets.Unofficial.dll", + "lib/net472/Pipelines.Sockets.Unofficial.xml", + "lib/net5.0/Pipelines.Sockets.Unofficial.dll", + "lib/net5.0/Pipelines.Sockets.Unofficial.xml", + "lib/netcoreapp3.1/Pipelines.Sockets.Unofficial.dll", + "lib/netcoreapp3.1/Pipelines.Sockets.Unofficial.xml", + "lib/netstandard2.0/Pipelines.Sockets.Unofficial.dll", + "lib/netstandard2.0/Pipelines.Sockets.Unofficial.xml", + "lib/netstandard2.1/Pipelines.Sockets.Unofficial.dll", + "lib/netstandard2.1/Pipelines.Sockets.Unofficial.xml", + "pipelines.sockets.unofficial.2.2.8.nupkg.sha512", + "pipelines.sockets.unofficial.nuspec" + ] + }, + "Pomelo.EntityFrameworkCore.MySql/9.0.0": { + "sha512": "cl7S4s6CbJno0LjNxrBHNc2xxmCliR5i40ATPZk/eTywVaAbHCbdc9vbGc3QThvwGjHqrDHT8vY9m1VF/47o0g==", + "type": "package", + "path": "pomelo.entityframeworkcore.mysql/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "icon.png", + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll", + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.xml", + "pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512", + "pomelo.entityframeworkcore.mysql.nuspec" + ] + }, + "StackExchange.Redis/2.7.27": { + "sha512": "Uqc2OQHglqj9/FfGQ6RkKFkZfHySfZlfmbCl+hc+u2I/IqunfelQ7QJi7ZhvAJxUtu80pildVX6NPLdDaUffOw==", + "type": "package", + "path": "stackexchange.redis/2.7.27", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/StackExchange.Redis.dll", + "lib/net461/StackExchange.Redis.xml", + "lib/net472/StackExchange.Redis.dll", + "lib/net472/StackExchange.Redis.xml", + "lib/net6.0/StackExchange.Redis.dll", + "lib/net6.0/StackExchange.Redis.xml", + "lib/netcoreapp3.1/StackExchange.Redis.dll", + "lib/netcoreapp3.1/StackExchange.Redis.xml", + "lib/netstandard2.0/StackExchange.Redis.dll", + "lib/netstandard2.0/StackExchange.Redis.xml", + "stackexchange.redis.2.7.27.nupkg.sha512", + "stackexchange.redis.nuspec" + ] + }, + "System.Buffers/4.5.1": { + "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "type": "package", + "path": "system.buffers/4.5.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Buffers.dll", + "lib/net461/System.Buffers.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Buffers.dll", + "lib/netstandard1.1/System.Buffers.xml", + "lib/netstandard2.0/System.Buffers.dll", + "lib/netstandard2.0/System.Buffers.xml", + "lib/uap10.0.16299/_._", + "ref/net45/System.Buffers.dll", + "ref/net45/System.Buffers.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Buffers.dll", + "ref/netstandard1.1/System.Buffers.xml", + "ref/netstandard2.0/System.Buffers.dll", + "ref/netstandard2.0/System.Buffers.xml", + "ref/uap10.0.16299/_._", + "system.buffers.4.5.1.nupkg.sha512", + "system.buffers.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.CodeDom/6.0.0": { + "sha512": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==", + "type": "package", + "path": "system.codedom/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.CodeDom.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.CodeDom.dll", + "lib/net461/System.CodeDom.xml", + "lib/net6.0/System.CodeDom.dll", + "lib/net6.0/System.CodeDom.xml", + "lib/netstandard2.0/System.CodeDom.dll", + "lib/netstandard2.0/System.CodeDom.xml", + "system.codedom.6.0.0.nupkg.sha512", + "system.codedom.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Collections.Immutable/7.0.0": { + "sha512": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==", + "type": "package", + "path": "system.collections.immutable/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Collections.Immutable.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets", + "lib/net462/System.Collections.Immutable.dll", + "lib/net462/System.Collections.Immutable.xml", + "lib/net6.0/System.Collections.Immutable.dll", + "lib/net6.0/System.Collections.Immutable.xml", + "lib/net7.0/System.Collections.Immutable.dll", + "lib/net7.0/System.Collections.Immutable.xml", + "lib/netstandard2.0/System.Collections.Immutable.dll", + "lib/netstandard2.0/System.Collections.Immutable.xml", + "system.collections.immutable.7.0.0.nupkg.sha512", + "system.collections.immutable.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition/7.0.0": { + "sha512": "tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "type": "package", + "path": "system.composition/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.targets", + "lib/net461/_._", + "lib/netcoreapp2.0/_._", + "lib/netstandard2.0/_._", + "system.composition.7.0.0.nupkg.sha512", + "system.composition.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.AttributedModel/7.0.0": { + "sha512": "2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==", + "type": "package", + "path": "system.composition.attributedmodel/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.AttributedModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.AttributedModel.targets", + "lib/net462/System.Composition.AttributedModel.dll", + "lib/net462/System.Composition.AttributedModel.xml", + "lib/net6.0/System.Composition.AttributedModel.dll", + "lib/net6.0/System.Composition.AttributedModel.xml", + "lib/net7.0/System.Composition.AttributedModel.dll", + "lib/net7.0/System.Composition.AttributedModel.xml", + "lib/netstandard2.0/System.Composition.AttributedModel.dll", + "lib/netstandard2.0/System.Composition.AttributedModel.xml", + "system.composition.attributedmodel.7.0.0.nupkg.sha512", + "system.composition.attributedmodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Convention/7.0.0": { + "sha512": "IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "type": "package", + "path": "system.composition.convention/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Convention.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Convention.targets", + "lib/net462/System.Composition.Convention.dll", + "lib/net462/System.Composition.Convention.xml", + "lib/net6.0/System.Composition.Convention.dll", + "lib/net6.0/System.Composition.Convention.xml", + "lib/net7.0/System.Composition.Convention.dll", + "lib/net7.0/System.Composition.Convention.xml", + "lib/netstandard2.0/System.Composition.Convention.dll", + "lib/netstandard2.0/System.Composition.Convention.xml", + "system.composition.convention.7.0.0.nupkg.sha512", + "system.composition.convention.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Hosting/7.0.0": { + "sha512": "eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "type": "package", + "path": "system.composition.hosting/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Hosting.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Hosting.targets", + "lib/net462/System.Composition.Hosting.dll", + "lib/net462/System.Composition.Hosting.xml", + "lib/net6.0/System.Composition.Hosting.dll", + "lib/net6.0/System.Composition.Hosting.xml", + "lib/net7.0/System.Composition.Hosting.dll", + "lib/net7.0/System.Composition.Hosting.xml", + "lib/netstandard2.0/System.Composition.Hosting.dll", + "lib/netstandard2.0/System.Composition.Hosting.xml", + "system.composition.hosting.7.0.0.nupkg.sha512", + "system.composition.hosting.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Runtime/7.0.0": { + "sha512": "aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==", + "type": "package", + "path": "system.composition.runtime/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Runtime.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Runtime.targets", + "lib/net462/System.Composition.Runtime.dll", + "lib/net462/System.Composition.Runtime.xml", + "lib/net6.0/System.Composition.Runtime.dll", + "lib/net6.0/System.Composition.Runtime.xml", + "lib/net7.0/System.Composition.Runtime.dll", + "lib/net7.0/System.Composition.Runtime.xml", + "lib/netstandard2.0/System.Composition.Runtime.dll", + "lib/netstandard2.0/System.Composition.Runtime.xml", + "system.composition.runtime.7.0.0.nupkg.sha512", + "system.composition.runtime.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.TypedParts/7.0.0": { + "sha512": "ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "type": "package", + "path": "system.composition.typedparts/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.TypedParts.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.TypedParts.targets", + "lib/net462/System.Composition.TypedParts.dll", + "lib/net462/System.Composition.TypedParts.xml", + "lib/net6.0/System.Composition.TypedParts.dll", + "lib/net6.0/System.Composition.TypedParts.xml", + "lib/net7.0/System.Composition.TypedParts.dll", + "lib/net7.0/System.Composition.TypedParts.xml", + "lib/netstandard2.0/System.Composition.TypedParts.dll", + "lib/netstandard2.0/System.Composition.TypedParts.xml", + "system.composition.typedparts.7.0.0.nupkg.sha512", + "system.composition.typedparts.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Configuration.ConfigurationManager/8.0.0": { + "sha512": "JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==", + "type": "package", + "path": "system.configuration.configurationmanager/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Configuration.ConfigurationManager.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Configuration.ConfigurationManager.targets", + "lib/net462/System.Configuration.ConfigurationManager.dll", + "lib/net462/System.Configuration.ConfigurationManager.xml", + "lib/net6.0/System.Configuration.ConfigurationManager.dll", + "lib/net6.0/System.Configuration.ConfigurationManager.xml", + "lib/net7.0/System.Configuration.ConfigurationManager.dll", + "lib/net7.0/System.Configuration.ConfigurationManager.xml", + "lib/net8.0/System.Configuration.ConfigurationManager.dll", + "lib/net8.0/System.Configuration.ConfigurationManager.xml", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "system.configuration.configurationmanager.8.0.0.nupkg.sha512", + "system.configuration.configurationmanager.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.DiagnosticSource/8.0.1": { + "sha512": "vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==", + "type": "package", + "path": "system.diagnostics.diagnosticsource/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets", + "lib/net462/System.Diagnostics.DiagnosticSource.dll", + "lib/net462/System.Diagnostics.DiagnosticSource.xml", + "lib/net6.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net6.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net7.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net7.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net8.0/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml", + "system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512", + "system.diagnostics.diagnosticsource.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.EventLog/8.0.0": { + "sha512": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", + "type": "package", + "path": "system.diagnostics.eventlog/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.EventLog.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.EventLog.targets", + "lib/net462/System.Diagnostics.EventLog.dll", + "lib/net462/System.Diagnostics.EventLog.xml", + "lib/net6.0/System.Diagnostics.EventLog.dll", + "lib/net6.0/System.Diagnostics.EventLog.xml", + "lib/net7.0/System.Diagnostics.EventLog.dll", + "lib/net7.0/System.Diagnostics.EventLog.xml", + "lib/net8.0/System.Diagnostics.EventLog.dll", + "lib/net8.0/System.Diagnostics.EventLog.xml", + "lib/netstandard2.0/System.Diagnostics.EventLog.dll", + "lib/netstandard2.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.xml", + "system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "system.diagnostics.eventlog.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.IO.Pipelines/7.0.0": { + "sha512": "jRn6JYnNPW6xgQazROBLSfpdoczRw694vO5kKvMcNnpXuolEixUyw6IBuBs2Y2mlSX/LdLvyyWmfXhaI3ND1Yg==", + "type": "package", + "path": "system.io.pipelines/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.IO.Pipelines.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets", + "lib/net462/System.IO.Pipelines.dll", + "lib/net462/System.IO.Pipelines.xml", + "lib/net6.0/System.IO.Pipelines.dll", + "lib/net6.0/System.IO.Pipelines.xml", + "lib/net7.0/System.IO.Pipelines.dll", + "lib/net7.0/System.IO.Pipelines.xml", + "lib/netstandard2.0/System.IO.Pipelines.dll", + "lib/netstandard2.0/System.IO.Pipelines.xml", + "system.io.pipelines.7.0.0.nupkg.sha512", + "system.io.pipelines.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Metadata/7.0.0": { + "sha512": "MclTG61lsD9sYdpNz9xsKBzjsmsfCtcMZYXz/IUr2zlhaTaABonlr1ESeompTgM+Xk+IwtGYU7/voh3YWB/fWw==", + "type": "package", + "path": "system.reflection.metadata/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Reflection.Metadata.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Reflection.Metadata.targets", + "lib/net462/System.Reflection.Metadata.dll", + "lib/net462/System.Reflection.Metadata.xml", + "lib/net6.0/System.Reflection.Metadata.dll", + "lib/net6.0/System.Reflection.Metadata.xml", + "lib/net7.0/System.Reflection.Metadata.dll", + "lib/net7.0/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "system.reflection.metadata.7.0.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "type": "package", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net461/System.Runtime.CompilerServices.Unsafe.xml", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "system.runtime.compilerservices.unsafe.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Runtime.Loader/4.3.0": { + "sha512": "DHMaRn8D8YCK2GG2pw+UzNxn/OHVfaWx7OTLBD/hPegHZZgcZh3H6seWegrC4BYwsfuGrywIuT+MQs+rPqRLTQ==", + "type": "package", + "path": "system.runtime.loader/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/_._", + "lib/netstandard1.5/System.Runtime.Loader.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/netstandard1.5/System.Runtime.Loader.dll", + "ref/netstandard1.5/System.Runtime.Loader.xml", + "ref/netstandard1.5/de/System.Runtime.Loader.xml", + "ref/netstandard1.5/es/System.Runtime.Loader.xml", + "ref/netstandard1.5/fr/System.Runtime.Loader.xml", + "ref/netstandard1.5/it/System.Runtime.Loader.xml", + "ref/netstandard1.5/ja/System.Runtime.Loader.xml", + "ref/netstandard1.5/ko/System.Runtime.Loader.xml", + "ref/netstandard1.5/ru/System.Runtime.Loader.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Loader.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Loader.xml", + "system.runtime.loader.4.3.0.nupkg.sha512", + "system.runtime.loader.nuspec" + ] + }, + "System.Security.Cryptography.ProtectedData/8.0.0": { + "sha512": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==", + "type": "package", + "path": "system.security.cryptography.protecteddata/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Security.Cryptography.ProtectedData.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Security.Cryptography.ProtectedData.targets", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/System.Security.Cryptography.ProtectedData.dll", + "lib/net462/System.Security.Cryptography.ProtectedData.xml", + "lib/net6.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net6.0/System.Security.Cryptography.ProtectedData.xml", + "lib/net7.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net7.0/System.Security.Cryptography.ProtectedData.xml", + "lib/net8.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net8.0/System.Security.Cryptography.ProtectedData.xml", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "system.security.cryptography.protecteddata.8.0.0.nupkg.sha512", + "system.security.cryptography.protecteddata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Security.Permissions/8.0.0": { + "sha512": "v/BBylw7XevuAsHXoX9dDUUfmBIcUf7Lkz8K3ZXIKz3YRKpw8YftpSir4n4e/jDTKFoaK37AsC3xnk+GNFI1Ow==", + "type": "package", + "path": "system.security.permissions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Security.Permissions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Security.Permissions.targets", + "lib/net462/System.Security.Permissions.dll", + "lib/net462/System.Security.Permissions.xml", + "lib/net6.0/System.Security.Permissions.dll", + "lib/net6.0/System.Security.Permissions.xml", + "lib/net7.0/System.Security.Permissions.dll", + "lib/net7.0/System.Security.Permissions.xml", + "lib/net8.0/System.Security.Permissions.dll", + "lib/net8.0/System.Security.Permissions.xml", + "lib/netstandard2.0/System.Security.Permissions.dll", + "lib/netstandard2.0/System.Security.Permissions.xml", + "system.security.permissions.8.0.0.nupkg.sha512", + "system.security.permissions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Text.Encoding.CodePages/8.0.0": { + "sha512": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==", + "type": "package", + "path": "system.text.encoding.codepages/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encoding.CodePages.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encoding.CodePages.targets", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/System.Text.Encoding.CodePages.dll", + "lib/net462/System.Text.Encoding.CodePages.xml", + "lib/net6.0/System.Text.Encoding.CodePages.dll", + "lib/net6.0/System.Text.Encoding.CodePages.xml", + "lib/net7.0/System.Text.Encoding.CodePages.dll", + "lib/net7.0/System.Text.Encoding.CodePages.xml", + "lib/net8.0/System.Text.Encoding.CodePages.dll", + "lib/net8.0/System.Text.Encoding.CodePages.xml", + "lib/netstandard2.0/System.Text.Encoding.CodePages.dll", + "lib/netstandard2.0/System.Text.Encoding.CodePages.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net6.0/System.Text.Encoding.CodePages.xml", + "runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.xml", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.xml", + "system.text.encoding.codepages.8.0.0.nupkg.sha512", + "system.text.encoding.codepages.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Json/9.0.0": { + "sha512": "js7+qAu/9mQvnhA4EfGMZNEzXtJCDxgkgj8ohuxq/Qxv+R56G+ljefhiJHOxTNiw54q8vmABCWUwkMulNdlZ4A==", + "type": "package", + "path": "system.text.json/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "buildTransitive/net461/System.Text.Json.targets", + "buildTransitive/net462/System.Text.Json.targets", + "buildTransitive/net8.0/System.Text.Json.targets", + "buildTransitive/netcoreapp2.0/System.Text.Json.targets", + "buildTransitive/netstandard2.0/System.Text.Json.targets", + "lib/net462/System.Text.Json.dll", + "lib/net462/System.Text.Json.xml", + "lib/net8.0/System.Text.Json.dll", + "lib/net8.0/System.Text.Json.xml", + "lib/net9.0/System.Text.Json.dll", + "lib/net9.0/System.Text.Json.xml", + "lib/netstandard2.0/System.Text.Json.dll", + "lib/netstandard2.0/System.Text.Json.xml", + "system.text.json.9.0.0.nupkg.sha512", + "system.text.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Channels/7.0.0": { + "sha512": "qmeeYNROMsONF6ndEZcIQ+VxR4Q/TX/7uIVLJqtwIWL7dDWeh0l1UIqgo4wYyjG//5lUNhwkLDSFl+pAWO6oiA==", + "type": "package", + "path": "system.threading.channels/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Threading.Channels.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Threading.Channels.targets", + "lib/net462/System.Threading.Channels.dll", + "lib/net462/System.Threading.Channels.xml", + "lib/net6.0/System.Threading.Channels.dll", + "lib/net6.0/System.Threading.Channels.xml", + "lib/net7.0/System.Threading.Channels.dll", + "lib/net7.0/System.Threading.Channels.xml", + "lib/netstandard2.0/System.Threading.Channels.dll", + "lib/netstandard2.0/System.Threading.Channels.xml", + "lib/netstandard2.1/System.Threading.Channels.dll", + "lib/netstandard2.1/System.Threading.Channels.xml", + "system.threading.channels.7.0.0.nupkg.sha512", + "system.threading.channels.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + }, + "System.Threading.Tasks.Extensions/4.5.4": { + "sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "type": "package", + "path": "system.threading.tasks.extensions/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Threading.Tasks.Extensions.dll", + "lib/net461/System.Threading.Tasks.Extensions.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard2.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netcoreapp2.1/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "system.threading.tasks.extensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Windows.Extensions/8.0.0": { + "sha512": "Obg3a90MkOw9mYKxrardLpY2u0axDMrSmy4JCdq2cYbelM2cUwmUir5Bomvd1yxmPL9h5LVHU1tuKBZpUjfASg==", + "type": "package", + "path": "system.windows.extensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net6.0/System.Windows.Extensions.dll", + "lib/net6.0/System.Windows.Extensions.xml", + "lib/net7.0/System.Windows.Extensions.dll", + "lib/net7.0/System.Windows.Extensions.xml", + "lib/net8.0/System.Windows.Extensions.dll", + "lib/net8.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net6.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net6.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net7.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net7.0/System.Windows.Extensions.xml", + "runtimes/win/lib/net8.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net8.0/System.Windows.Extensions.xml", + "system.windows.extensions.8.0.0.nupkg.sha512", + "system.windows.extensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "ZstdSharp.Port/0.8.0": { + "sha512": "Z62eNBIu8E8YtbqlMy57tK3dV1+m2b9NhPeaYovB5exmLKvrGCqOhJTzrEUH5VyUWU6vwX3c1XHJGhW5HVs8dA==", + "type": "package", + "path": "zstdsharp.port/0.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net462/ZstdSharp.dll", + "lib/net5.0/ZstdSharp.dll", + "lib/net6.0/ZstdSharp.dll", + "lib/net7.0/ZstdSharp.dll", + "lib/net8.0/ZstdSharp.dll", + "lib/netcoreapp3.1/ZstdSharp.dll", + "lib/netstandard2.0/ZstdSharp.dll", + "lib/netstandard2.1/ZstdSharp.dll", + "zstdsharp.port.0.8.0.nupkg.sha512", + "zstdsharp.port.nuspec" + ] + }, + "HardwarePerformance.Application/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Application/HardwarePerformance.Application.csproj", + "msbuildProject": "../HardwarePerformance.Application/HardwarePerformance.Application.csproj" + }, + "HardwarePerformance.Core/1.0.0": { + "type": "project", + "path": "../HardwarePerformance.Core/HardwarePerformance.Core.csproj", + "msbuildProject": "../HardwarePerformance.Core/HardwarePerformance.Core.csproj" + } }, - "libraries": {}, "projectFileDependencyGroups": { "net9.0": [ + "HardwarePerformance.Application >= 1.0.0", + "HardwarePerformance.Core >= 1.0.0", "Microsoft.EntityFrameworkCore >= 9.0.0", "Microsoft.EntityFrameworkCore.Design >= 9.0.0", "Microsoft.EntityFrameworkCore.Tools >= 9.0.0", + "Microsoft.Extensions.Configuration.Abstractions >= 9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions >= 9.0.0", + "Microsoft.Extensions.Logging.Abstractions >= 9.0.0", "MySql.Data >= 9.0.0", - "Pomelo.EntityFrameworkCore.MySql >= 9.0.0" + "Pomelo.EntityFrameworkCore.MySql >= 9.0.0", + "StackExchange.Redis >= 2.7.27" ] }, "packageFolders": { - "C:\\Users\\代\\.nuget\\packages\\": {}, + "C:\\Users\\Administrator\\.nuget\\packages\\": {}, "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} }, "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "projectUniqueName": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", "projectName": "HardwarePerformance.Infrastructure", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "packagesPath": "C:\\Users\\代\\.nuget\\packages\\", - "outputPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\obj\\", + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", + "outputPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" ], "configFilePaths": [ - "C:\\work\\电脑硬件-01\\backend\\NuGet.Config", - "C:\\Users\\代\\AppData\\Roaming\\NuGet\\NuGet.Config", + "D:\\work\\Demo\\it\\it\\backend\\NuGet.Config", + "C:\\Users\\Administrator\\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" ], @@ -39,16 +4336,19 @@ "net9.0" ], "sources": { + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://nuget.cdn.azure.cn/v3/index.json": {}, - "https://packages.microsoft.com/index.json": {} + "https://nuget.cdn.azure.cn/v3/index.json": {} }, "frameworks": { "net9.0": { "targetAlias": "net9.0", "projectReferences": { - "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Application\\HardwarePerformance.Application.csproj" + }, + "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj": { + "projectPath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Core\\HardwarePerformance.Core.csproj" } } } @@ -63,7 +4363,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.300" + "SdkAnalysisLevel": "10.0.100" }, "frameworks": { "net9.0": { @@ -81,6 +4381,18 @@ "target": "Package", "version": "[9.0.0, )" }, + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.Extensions.Logging.Abstractions": { + "target": "Package", + "version": "[9.0.0, )" + }, "MySql.Data": { "target": "Package", "version": "[9.0.0, )" @@ -88,6 +4400,10 @@ "Pomelo.EntityFrameworkCore.MySql": { "target": "Package", "version": "[9.0.0, )" + }, + "StackExchange.Redis": { + "target": "Package", + "version": "[2.7.27, )" } }, "imports": [ @@ -101,27 +4417,27 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[9.0.10, 9.0.10]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[9.0.10, 9.0.10]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.100-rc.2.25502.107/PortableRuntimeIdentifierGraph.json" } } - }, - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "无法加载源 https://nuget.cdn.azure.cn/v3/index.json 的服务索引。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "Microsoft.EntityFrameworkCore.Design" - }, - { - "code": "NU1301", - "level": "Error", - "message": "无法加载源 https://nuget.cdn.azure.cn/v3/index.json 的服务索引。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "libraryId": "Microsoft.EntityFrameworkCore" - } - ] + } } \ No newline at end of file diff --git a/backend/HardwarePerformance.Infrastructure/obj/project.nuget.cache b/backend/HardwarePerformance.Infrastructure/obj/project.nuget.cache index 5dd3de25..414cc025 100644 --- a/backend/HardwarePerformance.Infrastructure/obj/project.nuget.cache +++ b/backend/HardwarePerformance.Infrastructure/obj/project.nuget.cache @@ -1,27 +1,81 @@ { "version": 2, - "dgSpecHash": "fC6gM55oPjY=", - "success": false, - "projectFilePath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "expectedPackageFiles": [], - "logs": [ - { - "code": "NU1301", - "level": "Error", - "message": "无法加载源 https://nuget.cdn.azure.cn/v3/index.json 的服务索引。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "filePath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "libraryId": "Microsoft.EntityFrameworkCore.Design", - "targetGraphs": [] - }, - { - "code": "NU1301", - "level": "Error", - "message": "无法加载源 https://nuget.cdn.azure.cn/v3/index.json 的服务索引。\r\n 不知道这样的主机。 (null:80)\r\n 不知道这样的主机。", - "projectPath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "filePath": "C:\\work\\电脑硬件-01\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", - "libraryId": "Microsoft.EntityFrameworkCore", - "targetGraphs": [] - } - ] + "dgSpecHash": "sERbqzpivow=", + "success": true, + "projectFilePath": "D:\\work\\Demo\\it\\it\\backend\\HardwarePerformance.Infrastructure\\HardwarePerformance.Infrastructure.csproj", + "expectedPackageFiles": [ + "C:\\Users\\Administrator\\.nuget\\packages\\bouncycastle.cryptography\\2.3.1\\bouncycastle.cryptography.2.3.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\google.protobuf\\3.26.1\\google.protobuf.3.26.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\humanizer.core\\2.14.1\\humanizer.core.2.14.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.compression.lz4\\1.3.8\\k4os.compression.lz4.1.3.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.compression.lz4.streams\\1.3.8\\k4os.compression.lz4.streams.1.3.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\k4os.hash.xxhash\\1.0.8\\k4os.hash.xxhash.1.0.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\7.0.0\\microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.build.framework\\17.8.3\\microsoft.build.framework.17.8.3.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.build.locator\\1.7.8\\microsoft.build.locator.1.7.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.analyzers\\3.3.4\\microsoft.codeanalysis.analyzers.3.3.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.common\\4.8.0\\microsoft.codeanalysis.common.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.csharp\\4.8.0\\microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.csharp.workspaces\\4.8.0\\microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.workspaces.common\\4.8.0\\microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.codeanalysis.workspaces.msbuild\\4.8.0\\microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore\\9.0.0\\microsoft.entityframeworkcore.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\9.0.0\\microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.analyzers\\9.0.0\\microsoft.entityframeworkcore.analyzers.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.design\\9.0.0\\microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.relational\\9.0.0\\microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.entityframeworkcore.tools\\9.0.0\\microsoft.entityframeworkcore.tools.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\9.0.0\\microsoft.extensions.caching.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.caching.memory\\9.0.0\\microsoft.extensions.caching.memory.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\9.0.0\\microsoft.extensions.configuration.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\9.0.0\\microsoft.extensions.dependencyinjection.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\9.0.0\\microsoft.extensions.dependencyinjection.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.dependencymodel\\9.0.0\\microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.logging\\9.0.0\\microsoft.extensions.logging.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\9.0.0\\microsoft.extensions.logging.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.options\\9.0.0\\microsoft.extensions.options.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.extensions.primitives\\9.0.0\\microsoft.extensions.primitives.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mono.texttemplating\\3.0.0\\mono.texttemplating.3.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mysql.data\\9.0.0\\mysql.data.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\mysqlconnector\\2.4.0\\mysqlconnector.2.4.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\pipelines.sockets.unofficial\\2.2.8\\pipelines.sockets.unofficial.2.2.8.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\pomelo.entityframeworkcore.mysql\\9.0.0\\pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\stackexchange.redis\\2.7.27\\stackexchange.redis.2.7.27.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.codedom\\6.0.0\\system.codedom.6.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.collections.immutable\\7.0.0\\system.collections.immutable.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition\\7.0.0\\system.composition.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.attributedmodel\\7.0.0\\system.composition.attributedmodel.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.convention\\7.0.0\\system.composition.convention.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.hosting\\7.0.0\\system.composition.hosting.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.runtime\\7.0.0\\system.composition.runtime.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.composition.typedparts\\7.0.0\\system.composition.typedparts.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.configuration.configurationmanager\\8.0.0\\system.configuration.configurationmanager.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.diagnostics.diagnosticsource\\8.0.1\\system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.diagnostics.eventlog\\8.0.0\\system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.io.pipelines\\7.0.0\\system.io.pipelines.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection.metadata\\7.0.0\\system.reflection.metadata.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime.loader\\4.3.0\\system.runtime.loader.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.security.cryptography.protecteddata\\8.0.0\\system.security.cryptography.protecteddata.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.security.permissions\\8.0.0\\system.security.permissions.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.encoding.codepages\\8.0.0\\system.text.encoding.codepages.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.text.json\\9.0.0\\system.text.json.9.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.channels\\7.0.0\\system.threading.channels.7.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\system.windows.extensions\\8.0.0\\system.windows.extensions.8.0.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\zstdsharp.port\\0.8.0\\zstdsharp.port.0.8.0.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.netcore.app.ref\\9.0.10\\microsoft.netcore.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\9.0.10\\microsoft.windowsdesktop.app.ref.9.0.10.nupkg.sha512", + "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\9.0.10\\microsoft.aspnetcore.app.ref.9.0.10.nupkg.sha512" + ], + "logs": [] } \ No newline at end of file diff --git a/backend/HardwarePerformance.sln b/backend/HardwarePerformance.sln index fed65d3b..a7d503cb 100644 --- a/backend/HardwarePerformance.sln +++ b/backend/HardwarePerformance.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HardwarePerformance.Infrast EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HardwarePerformance.Application", "HardwarePerformance.Application\HardwarePerformance.Application.csproj", "{018C0174-C170-4798-B16C-D625F7ABC378}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HardwarePerformance.Infrastructure.Tests", "HardwarePerformance.Infrastructure.Tests\HardwarePerformance.Infrastructure.Tests.csproj", "{9DD06891-1F50-4797-8486-B722B1096F84}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -69,6 +71,18 @@ Global {018C0174-C170-4798-B16C-D625F7ABC378}.Release|x64.Build.0 = Release|Any CPU {018C0174-C170-4798-B16C-D625F7ABC378}.Release|x86.ActiveCfg = Release|Any CPU {018C0174-C170-4798-B16C-D625F7ABC378}.Release|x86.Build.0 = Release|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Debug|x64.Build.0 = Debug|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Debug|x86.ActiveCfg = Debug|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Debug|x86.Build.0 = Debug|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Release|Any CPU.Build.0 = Release|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Release|x64.ActiveCfg = Release|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Release|x64.Build.0 = Release|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Release|x86.ActiveCfg = Release|Any CPU + {9DD06891-1F50-4797-8486-B722B1096F84}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/backend/nuget.config b/backend/nuget.config index c49c77f2..12e7a441 100644 --- a/backend/nuget.config +++ b/backend/nuget.config @@ -9,5 +9,6 @@ + \ No newline at end of file diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js new file mode 100644 index 00000000..8e0019df --- /dev/null +++ b/frontend/.eslintrc.js @@ -0,0 +1,146 @@ +module.exports = { + root: true, + env: { + node: true, + browser: true, + es2021: true + }, + extends: [ + 'plugin:vue/vue3-essential', + 'plugin:vue/vue3-strongly-recommended', + 'plugin:vue/vue3-recommended', + 'eslint:recommended', + '@vue/eslint-config-prettier/skip-formatting' + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module' + }, + rules: { + // Vue规则 + 'vue/multi-word-component-names': 'off', + 'vue/no-unused-vars': 'error', + 'vue/no-unused-components': 'warn', + 'vue/require-default-prop': 'error', + 'vue/require-explicit-emits': 'error', + 'vue/require-prop-types': 'error', + 'vue/component-definition-name-casing': ['error', 'PascalCase'], + 'vue/component-name-in-template-casing': ['error', 'kebab-case'], + 'vue/custom-event-name-casing': ['error', 'camelCase'], + 'vue/define-macros-order': ['error', { + order: ['defineProps', 'defineEmits'] + }], + 'vue/html-self-closing': ['error', { + html: { + void: 'never', + normal: 'always', + component: 'always' + }, + svg: 'always', + math: 'always' + }], + 'vue/max-attributes-per-line': ['error', { + singleline: 3, + multiline: 1 + }], + 'vue/no-v-html': 'warn', + 'vue/padding-line-between-blocks': ['error', 'always'], + 'vue/prefer-import-from-vue': 'error', + 'vue/prefer-separate-static-class': 'error', + 'vue/prefer-true-attribute-shorthand': 'error', + 'vue/v-for-delimiter-style': ['error', 'in'], + 'vue/v-on-event-hyphenation': ['error', 'always'], + 'vue/v-on-function-call': 'error', + 'vue/v-slot-style': ['error', 'shorthand'], + + // JavaScript规则 + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-unused-vars': 'error', + 'no-undef': 'error', + 'no-var': 'error', + 'prefer-const': 'error', + 'prefer-arrow-callback': 'error', + 'arrow-spacing': 'error', + 'no-duplicate-imports': 'error', + 'no-useless-constructor': 'error', + 'no-useless-rename': 'error', + 'object-shorthand': 'error', + 'prefer-template': 'error', + 'template-curly-spacing': 'error', + 'yield-star-spacing': 'error', + 'yoda': 'error', + 'no-nested-ternary': 'error', + 'no-unneeded-ternary': 'error', + 'spaced-comment': 'error', + 'eqeqeq': ['error', 'always'], + 'curly': 'error', + 'brace-style': ['error', '1tbs', { allowSingleLine: true }], + 'comma-dangle': ['error', 'never'], + 'comma-spacing': 'error', + 'comma-style': 'error', + 'computed-property-spacing': 'error', + 'func-call-spacing': 'error', + 'indent': ['error', 2, { SwitchCase: 1 }], + 'key-spacing': 'error', + 'keyword-spacing': 'error', + 'linebreak-style': ['error', 'unix'], + 'no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0 }], + 'no-trailing-spaces': 'error', + 'object-curly-spacing': ['error', 'always'], + 'quotes': ['error', 'single', { avoidEscape: true }], + 'semi': ['error', 'never'], + 'space-before-blocks': 'error', + 'space-before-function-paren': ['error', { + anonymous: 'always', + named: 'never', + asyncArrow: 'always' + }], + 'space-in-parens': 'error', + 'space-infix-ops': 'error', + 'space-unary-ops': 'error', + 'unicode-bom': ['error', 'never'], + + // ES6+规则 + 'arrow-body-style': ['error', 'as-needed'], + 'arrow-parens': ['error', 'as-needed'], + 'no-confusing-arrow': 'error', + 'no-duplicate-imports': 'error', + 'no-useless-computed-key': 'error', + 'no-useless-constructor': 'error', + 'no-useless-rename': 'error', + 'object-shorthand': 'error', + 'prefer-arrow-callback': 'error', + 'prefer-const': 'error', + 'prefer-destructuring': ['error', { + array: false, + object: true + }], + 'prefer-rest-params': 'error', + 'prefer-spread': 'error', + 'prefer-template': 'error', + 'rest-spread-spacing': 'error', + 'template-curly-spacing': 'error', + 'yield-star-spacing': 'error' + }, + overrides: [ + { + files: ['*.vue'], + rules: { + 'indent': 'off', + 'vue/html-indent': ['error', 2], + 'vue/script-indent': ['error', 2, { baseIndent: 0 }] + } + }, + { + files: ['**/__tests__/**/*', '**/*.{test,spec}.*'], + env: { + jest: true, + vitest: true + }, + rules: { + 'no-unused-expressions': 'off' + } + } + ] +} \ No newline at end of file diff --git a/frontend/.prettierrc.js b/frontend/.prettierrc.js new file mode 100644 index 00000000..75295940 --- /dev/null +++ b/frontend/.prettierrc.js @@ -0,0 +1,80 @@ +module.exports = { + // 一行最多字符数 + printWidth: 100, + // 使用制表符而不是空格缩进 + useTabs: false, + // 缩进 + tabWidth: 2, + // 结尾不用分号 + semi: false, + // 使用单引号 + singleQuote: true, + // 对象的 key 仅在必要时用引号 + quoteProps: 'as-needed', + // jsx 不使用单引号,而使用双引号 + jsxSingleQuote: false, + // 末尾不需要逗号 + trailingComma: 'none', + // 大括号内的首尾需要空格 + bracketSpacing: true, + // jsx 标签的反尖括号需要换行 + jsxBracketSameLine: false, + // 箭头函数,只有一个参数的时候,也需要括号 + arrowParens: 'avoid', + // 每个文件格式化的范围是文件的全部内容 + rangeStart: 0, + rangeEnd: Infinity, + // 不需要写文件开头的 @prettier + requirePragma: false, + // 不需要自动在文件开头插入 @prettier + insertPragma: false, + // 使用默认的折行标准 + proseWrap: 'preserve', + // 根据显示样式决定 html 要不要折行 + htmlWhitespaceSensitivity: 'css', + // vue 文件中的 script 和 style 内不用缩进 + vueIndentScriptAndStyle: false, + // 换行符使用 lf + endOfLine: 'lf', + // 格式化嵌入的内容 + embeddedLanguageFormatting: 'auto', + // html, vue, jsx 中每个属性占一行 + singleAttributePerLine: false, + // 特定文件类型的配置 + overrides: [ + { + files: '*.vue', + options: { + parser: 'vue' + } + }, + { + files: '*.json', + options: { + printWidth: 200, + tabWidth: 2 + } + }, + { + files: '*.md', + options: { + printWidth: 100, + proseWrap: 'always' + } + }, + { + files: '*.{css,scss,less}', + options: { + singleQuote: false, + tabWidth: 2 + } + }, + { + files: '*.{js,ts}', + options: { + printWidth: 100, + tabWidth: 2 + } + } + ] +} \ No newline at end of file diff --git a/frontend/docs/TESTING.md b/frontend/docs/TESTING.md new file mode 100644 index 00000000..0060d163 --- /dev/null +++ b/frontend/docs/TESTING.md @@ -0,0 +1,354 @@ +# 前端自动化测试和代码质量检查 + +本文档介绍了前端项目的自动化测试和代码质量检查流程、工具和最佳实践。 + +## 目录 + +- [测试策略](#测试策略) +- [测试工具](#测试工具) +- [测试环境设置](#测试环境设置) +- [运行测试](#运行测试) +- [代码质量检查](#代码质量检查) +- [持续集成](#持续集成) +- [测试覆盖率](#测试覆盖率) +- [常见问题](#常见问题) + +## 测试策略 + +我们采用多层次测试策略,确保代码质量和应用稳定性: + +1. **单元测试**:测试单个函数、组件或模块 +2. **集成测试**:测试多个组件或模块之间的交互 +3. **端到端测试**:模拟用户操作,测试完整用户流程 + +### 测试金字塔 + +``` + /\ + / \ + / E2E \ 少量端到端测试 + /______\ + / \ + /Integration\ 适量集成测试 + /__________\ + / \ +/ Unit Tests \ 大量单元测试 +/______________\ +``` + +## 测试工具 + +### 单元测试和集成测试 + +- **Vitest**:基于 Vite 的快速单元测试框架 +- **Vue Test Utils**:Vue.js 官方测试工具库 +- **jsdom**:轻量级 DOM 实现,用于在 Node.js 中模拟浏览器环境 + +### 端到端测试 + +- **Playwright**:现代端到端测试框架,支持多浏览器 +- **Playwright Test**:Playwright 的测试运行器 + +### 代码质量检查 + +- **ESLint**:JavaScript 代码风格和错误检查工具 +- **Prettier**:代码格式化工具 +- **TypeScript**:静态类型检查 +- **Husky**:Git hooks 管理 +- **lint-staged**:对暂存文件运行检查 + +## 测试环境设置 + +### 安装依赖 + +```bash +npm install +``` + +### 环境变量 + +创建 `.env.test` 文件用于测试环境配置: + +```env +VITE_API_BASE_URL=http://localhost:7001/api +VITE_APP_TITLE=硬件性能对比平台 - 测试环境 +``` + +## 运行测试 + +### 单元测试 + +运行所有单元测试: + +```bash +npm run test:unit +``` + +监听模式运行单元测试(文件变化时自动重新运行): + +```bash +npm run test:unit:watch +``` + +运行单元测试并生成覆盖率报告: + +```bash +npm run test:unit:coverage +``` + +仅运行组件测试: + +```bash +npm run test:component +``` + +仅运行 API 服务测试: + +```bash +npm run test:api +``` + +仅运行状态管理测试: + +```bash +npm run test:store +``` + +### 端到端测试 + +运行所有 E2E 测试: + +```bash +npm run test:e2e +``` + +以 UI 模式运行 E2E 测试: + +```bash +npm run test:e2e:ui +``` + +以调试模式运行 E2E 测试: + +```bash +npm run test:e2e:debug +``` + +### 所有测试 + +运行所有测试(单元测试 + E2E 测试): + +```bash +npm test +``` + +以 CI 模式运行所有测试: + +```bash +npm run test:ci +``` + +## 代码质量检查 + +### ESLint + +运行 ESLint 检查并自动修复问题: + +```bash +npm run lint +``` + +### Prettier + +格式化代码: + +```bash +npm run format +``` + +检查代码格式(不修改文件): + +```bash +npm run format:check +``` + +### TypeScript 类型检查 + +运行 TypeScript 类型检查: + +```bash +npm run type-check +``` + +### 综合质量检查 + +运行 ESLint 和 Prettier: + +```bash +npm run quality +``` + +生成代码质量报告: + +```bash +npm run quality-report +``` + +## 持续集成 + +项目使用 GitHub Actions 进行持续集成,配置文件位于 `.github/workflows/ci.yml`。 + +CI 流程包括: + +1. 代码检出 +2. 依赖安装 +3. 类型检查 +4. 代码风格检查 +5. 单元测试和覆盖率报告 +6. 应用构建 +7. E2E 测试 +8. 安全审计 +9. 部署(仅 main 分支) + +### Git Hooks + +项目配置了以下 Git Hooks: + +- **pre-commit**:对暂存文件运行 ESLint 和 Prettier +- **pre-push**:运行单元测试 + +这些 hooks 通过 Husky 和 lint-staged 管理。 + +## 测试覆盖率 + +### 覆盖率目标 + +- **行覆盖率**:≥ 80% +- **函数覆盖率**:≥ 80% +- **分支覆盖率**:≥ 75% +- **语句覆盖率**:≥ 80% + +### 覆盖率报告 + +运行 `npm run test:unit:coverage` 后,覆盖率报告将生成在 `coverage/` 目录下。 + +- `coverage/lcov-report/index.html`:HTML 格式的详细报告 +- `coverage/coverage-summary.json`:JSON 格式的摘要数据 + +### 覆盖率徽章 + +可以在 README.md 中添加覆盖率徽章: + +```markdown +![Coverage](https://img.shields.io/badge/coverage-80%25-brightgreen) +``` + +## 测试编写指南 + +### 单元测试示例 + +```javascript +// tests/unit/components/MyComponent.spec.js +import { describe, it, expect } from 'vitest' +import { mount } from '@vue/test-utils' +import MyComponent from '@/components/MyComponent.vue' + +describe('MyComponent', () => { + it('renders correctly', () => { + const wrapper = mount(MyComponent, { + props: { + title: 'Test Title' + } + }) + + expect(wrapper.find('h1').text()).toBe('Test Title') + }) + + it('emits event when button is clicked', async () => { + const wrapper = mount(MyComponent) + + await wrapper.find('button').trigger('click') + + expect(wrapper.emitted()).toHaveProperty('button-clicked') + }) +}) +``` + +### E2E 测试示例 + +```javascript +// tests/e2e/user-journey.spec.js +import { test, expect } from '@playwright/test' + +test('user can view product details', async ({ page }) => { + // 导航到首页 + await page.goto('/') + + // 点击产品类别 + await page.click('[data-testid="category-cpu"]') + + // 点击第一个产品 + await page.click('[data-testid="product-card"]:first-child') + + // 验证产品详情页面 + await expect(page.locator('h1')).toContainText('产品详情') + await expect(page.locator('[data-testid="product-specs"]')).toBeVisible() +}) +``` + +### 测试最佳实践 + +1. **保持测试简单**:每个测试只验证一个功能点 +2. **使用描述性测试名称**:清楚说明测试的目的 +3. **使用数据-testid**:避免依赖 CSS 类名或元素结构 +4. **模拟外部依赖**:使用 mock 隔离测试 +5. **保持测试独立性**:测试之间不应相互依赖 +6. **使用页面对象模式**:对于 E2E 测试,使用页面对象封装页面操作 + +## 常见问题 + +### 问题:测试运行缓慢 + +**解决方案**: + +1. 使用 `vitest` 的并行测试功能 +2. 使用 `vitest --mode=development` 进行开发时测试 +3. 使用 `vitest --reporter=verbose` 查看详细输出 +4. 考虑使用 `vitest --no-coverage` 跳过覆盖率收集 + +### 问题:E2E 测试不稳定 + +**解决方案**: + +1. 使用 `page.waitForSelector()` 等待元素出现 +2. 使用 `page.waitForLoadState()` 等待页面加载完成 +3. 增加测试超时时间 +4. 使用 `test.beforeEach()` 和 `test.afterEach()` 进行测试隔离 + +### 问题:覆盖率报告不准确 + +**解决方案**: + +1. 检查 `vitest.config.js` 中的覆盖率配置 +2. 确保所有源文件都被包含在覆盖率统计中 +3. 使用 `coverage.exclude` 排除不需要测试的文件 + +### 问题:ESLint 与 Prettier 冲突 + +**解决方案**: + +1. 使用 `eslint-config-prettier` 禁用与 Prettier 冲突的 ESLint 规则 +2. 在 `.eslintrc.js` 中添加 `"extends": ["prettier"]` +3. 确保 `package.json` 中的脚本顺序正确 + +## 参考资源 + +- [Vitest 官方文档](https://vitest.dev/) +- [Vue Test Utils 官方文档](https://test-utils.vuejs.org/) +- [Playwright 官方文档](https://playwright.dev/) +- [ESLint 官方文档](https://eslint.org/) +- [Prettier 官方文档](https://prettier.io/) + +--- + +如有其他问题,请查看项目 Wiki 或联系开发团队。 \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html index 057aad4c..b26f954b 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,11 +3,206 @@ - + + + + + + + + + + + + + + + + + + + 硬件性能对比 + + + -
+
+ +
+
+
正在加载应用...
+
+
+ + + + \ No newline at end of file diff --git a/frontend/node_modules/.vue-global-types/vue_3.5_0.d.ts b/frontend/node_modules/.vue-global-types/vue_3.5_0.d.ts new file mode 100644 index 00000000..a9cba719 --- /dev/null +++ b/frontend/node_modules/.vue-global-types/vue_3.5_0.d.ts @@ -0,0 +1,137 @@ +// @ts-nocheck +export {}; + +; declare global { + const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any }; + const __VLS_unref: typeof import('vue').unref; + const __VLS_placeholder: any; + + type __VLS_NativeElements = __VLS_SpreadMerge; + type __VLS_IntrinsicElements = import('vue/jsx-runtime').JSX.IntrinsicElements; + type __VLS_Element = import('vue/jsx-runtime').JSX.Element; + type __VLS_GlobalComponents = import('vue').GlobalComponents; + type __VLS_GlobalDirectives = import('vue').GlobalDirectives; + type __VLS_IsAny = 0 extends 1 & T ? true : false; + type __VLS_PickNotAny = __VLS_IsAny extends true ? B : A; + type __VLS_SpreadMerge = Omit & B; + type __VLS_WithComponent = + N1 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N1] } : + N2 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N2] } : + N3 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N3] } : + Self extends object ? { [K in N0]: Self } : + N1 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N1] } : + N2 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N2] } : + N3 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N3] } : + {}; + type __VLS_FunctionalComponentCtx = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny + ? K extends { __ctx?: infer Ctx } ? NonNullable : never : any + , T extends (props: any, ctx: infer Ctx) => any ? Ctx : any + >; + type __VLS_FunctionalComponentProps = '__ctx' extends keyof __VLS_PickNotAny + ? K extends { __ctx?: { props?: infer P } } ? NonNullable

: never + : T extends (props: infer P, ...args: any) => any ? P + : {}; + type __VLS_FunctionalComponent = (props: (T extends { $props: infer Props } ? Props : {}) & Record, ctx?: any) => __VLS_Element & { + __ctx?: { + attrs?: any; + slots?: T extends { $slots: infer Slots } ? Slots : Record; + emit?: T extends { $emit: infer Emit } ? Emit : {}; + props?: (T extends { $props: infer Props } ? Props : {}) & Record; + expose?: (exposed: T) => void; + }; + }; + type __VLS_IsFunction = K extends keyof T + ? __VLS_IsAny extends false + ? unknown extends T[K] + ? false + : true + : false + : false; + type __VLS_NormalizeComponentEvent< + Props, + Emits, + onEvent extends keyof Props, + Event extends keyof Emits, + CamelizedEvent extends keyof Emits, + > = __VLS_IsFunction extends true + ? Props + : __VLS_IsFunction extends true + ? { [K in onEvent]?: Emits[Event] } + : __VLS_IsFunction extends true + ? { [K in onEvent]?: Emits[CamelizedEvent] } + : Props; + // fix https://github.com/vuejs/language-tools/issues/926 + type __VLS_UnionToIntersection = (U extends unknown ? (arg: U) => unknown : never) extends ((arg: infer P) => unknown) ? P : never; + type __VLS_OverloadUnionInner = U & T extends (...args: infer A) => infer R + ? U extends T + ? never + : __VLS_OverloadUnionInner & U & ((...args: A) => R)> | ((...args: A) => R) + : never; + type __VLS_OverloadUnion = Exclude< + __VLS_OverloadUnionInner<(() => never) & T>, + T extends () => never ? never : () => never + >; + type __VLS_ConstructorOverloads = __VLS_OverloadUnion extends infer F + ? F extends (event: infer E, ...args: infer A) => any + ? { [K in E & string]: (...args: A) => void; } + : never + : never; + type __VLS_NormalizeEmits = __VLS_PrettifyGlobal< + __VLS_UnionToIntersection< + __VLS_ConstructorOverloads & { + [K in keyof T]: T[K] extends any[] ? { (...args: T[K]): void } : never + } + > + >; + type __VLS_EmitsToProps = __VLS_PrettifyGlobal<{ + [K in string & keyof T as `on${Capitalize}`]?: + (...args: T[K] extends (...args: infer P) => any ? P : T[K] extends null ? any[] : never) => any; + }>; + type __VLS_ResolveEmits< + Comp, + Emits, + TypeEmits = {}, + NormalizedEmits = __VLS_NormalizeEmits extends infer E ? string extends keyof E ? {} : E : never, + > = __VLS_SpreadMerge; + type __VLS_ResolveDirectives = { + [K in keyof T & string as `v${Capitalize}`]: T[K]; + }; + type __VLS_PrettifyGlobal = { [K in keyof T as K]: T[K]; } & {}; + type __VLS_WithDefaultsGlobal = { + [K in keyof P as K extends keyof D ? K : never]-?: P[K]; + } & { + [K in keyof P as K extends keyof D ? never : K]: P[K]; + }; + type __VLS_UseTemplateRef = Readonly>; + type __VLS_ProxyRefs = import('vue').ShallowUnwrapRef; + + function __VLS_getVForSourceType>(source: T): [ + item: T extends number ? number + : T extends string ? string + : T extends any[] ? T[number] + : T extends Iterable ? T1 + : any, + index: number, + ][]; + function __VLS_getVForSourceType(source: T): [ + item: T[keyof T], + key: keyof T, + index: number, + ][]; + function __VLS_getSlotParameters(slot: S, decl?: D): + D extends (...args: infer P) => any ? P : any[]; + function __VLS_asFunctionalDirective(dir: T): T extends import('vue').ObjectDirective + ? NonNullable + : T extends (...args: any) => any + ? T + : (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void; + function __VLS_asFunctionalComponent any ? InstanceType : unknown>(t: T, instance?: K): + T extends new (...args: any) => any ? __VLS_FunctionalComponent + : T extends () => any ? (props: {}, ctx?: any) => ReturnType + : T extends (...args: any) => any ? T + : __VLS_FunctionalComponent<{}>; + function __VLS_functionalComponentArgsRest any>(t: T): 2 extends Parameters['length'] ? [any] : []; + function __VLS_asFunctionalElement(tag: T, endTag?: T): (attrs: T & Record) => void; + function __VLS_asFunctionalSlot(slot: S): S extends () => infer R ? (props: {}) => R : NonNullable; + function __VLS_tryAsConstant(t: T): T; +} diff --git a/frontend/package.json b/frontend/package.json index f4b2df20..c43588d5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,12 +1,31 @@ { "name": "hardware-performance-frontend", "private": true, - "version": "0.0.0", + "version": "1.0.0", "type": "module", + "description": "硬件性能对比平台前端应用", "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "build:pwa": "vite build --mode production", + "serve:pwa": "vite preview --port 4173 --host", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore", + "format": "prettier --write src/", + "test": "node scripts/test.js", + "test:unit": "vitest run", + "test:unit:watch": "vitest", + "test:unit:coverage": "vitest run --coverage", + "test:component": "vitest run --dir tests/unit/components", + "test:api": "vitest run --dir tests/unit/services", + "test:store": "vitest run --dir tests/unit/stores", + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui", + "test:e2e:debug": "playwright test --debug", + "test:ci": "node scripts/test.js --ci", + "quality": "npm run lint && npm run format", + "quality-report": "node scripts/quality-report.js", + "prepare": "husky install" }, "dependencies": { "@element-plus/icons-vue": "^2.3.0", @@ -14,16 +33,102 @@ "echarts": "^5.6.0", "element-plus": "^2.4.0", "pinia": "^2.1.7", + "vant": "^4.8.0", "vue": "^3.4.0", "vue-echarts": "^6.7.3", "vue-router": "^4.2.5" }, "devDependencies": { "@vitejs/plugin-vue": "^4.5.0", + "@vue/test-utils": "^2.4.1", + "@vue/tsconfig": "^0.4.0", "autoprefixer": "^10.4.0", + "eslint": "^8.48.0", + "eslint-plugin-vue": "^9.17.0", + "husky": "^8.0.3", + "jsdom": "^22.1.0", + "lint-staged": "^14.0.1", + "playwright": "^1.37.1", "postcss": "^8.4.0", + "prettier": "^3.0.3", "tailwindcss": "^3.3.0", "terser": "^5.44.0", - "vite": "^5.0.0" + "typescript": "~5.2.2", + "vite": "^5.0.0", + "vitest": "^0.34.4", + "vue-tsc": "^1.8.8" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead", + "not ie 11" + ], + "pwa": { + "name": "硬件性能对比", + "short_name": "硬件性能", + "description": "专业的CPU、GPU性能数据对比平台", + "theme_color": "#409EFF", + "background_color": "#f5f7fa", + "display": "standalone", + "start_url": "/", + "scope": "/", + "icons": [ + { + "src": "/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png" + }, + { + "src": "/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] + }, + "lint-staged": { + "*.{js,ts,vue}": [ + "eslint --fix", + "prettier --write" + ], + "*.{css,scss,json,md}": [ + "prettier --write" + ] + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "pre-push": "npm run test:unit" + } } } diff --git a/frontend/playwright.config.js b/frontend/playwright.config.js new file mode 100644 index 00000000..079ac99b --- /dev/null +++ b/frontend/playwright.config.js @@ -0,0 +1,104 @@ +import { defineConfig, devices } from '@playwright/test' + +/** + * @see https://playwright.dev/docs/test-configuration + */ +export default defineConfig({ + testDir: './tests/e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: [ + ['html', { outputFolder: 'playwright-report' }], + ['json', { outputFile: 'test-results.json' }], + ['junit', { outputFile: 'test-results.xml' }], + process.env.CI ? 'line' : 'list' + ], + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: process.env.BASE_URL || 'http://localhost:5173', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + + /* Take screenshot on failure */ + screenshot: 'only-on-failure', + + /* Record video on failure */ + video: 'retain-on-failure', + + /* Global timeout for each action */ + actionTimeout: 10000, + + /* Global timeout for navigation */ + navigationTimeout: 30000 + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + { + name: 'Mobile Chrome', + use: { ...devices['Pixel 5'] }, + }, + { + name: 'Mobile Safari', + use: { ...devices['iPhone 12'] }, + }, + + /* Test against branded browsers. */ + { + name: 'Microsoft Edge', + use: { ...devices['Desktop Edge'], channel: 'msedge' }, + }, + { + name: 'Google Chrome', + use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'npm run dev', + url: 'http://localhost:5173', + reuseExistingServer: !process.env.CI, + timeout: 120000, + }, + + /* Global setup and teardown */ + globalSetup: './tests/e2e/global-setup.js', + globalTeardown: './tests/e2e/global-teardown.js', + + /* Test timeout */ + timeout: 30000, + + /* Expect timeout */ + expect: { + timeout: 5000 + }, + + /* Output directory for test artifacts */ + outputDir: 'test-results/', +}) \ No newline at end of file diff --git a/frontend/public/icon-generator.html b/frontend/public/icon-generator.html new file mode 100644 index 00000000..1e7992ff --- /dev/null +++ b/frontend/public/icon-generator.html @@ -0,0 +1,132 @@ + + + + + + PWA图标生成器 + + + +

PWA图标生成器

+

此页面用于生成PWA所需的不同尺寸图标。右键点击图标并选择"另存为"来下载。

+ + + +
+ + + + \ No newline at end of file diff --git a/frontend/public/icons/icon-152x152.svg b/frontend/public/icons/icon-152x152.svg new file mode 100644 index 00000000..20d8e96b --- /dev/null +++ b/frontend/public/icons/icon-152x152.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/frontend/public/icons/icon.svg b/frontend/public/icons/icon.svg new file mode 100644 index 00000000..2bd67f23 --- /dev/null +++ b/frontend/public/icons/icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 00000000..7419b8ab --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,142 @@ +{ + "name": "硬件性能排行榜", + "short_name": "硬件排行", + "description": "专业的硬件性能排行榜应用,提供CPU、GPU等硬件性能数据和对比功能", + "start_url": "/", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#409EFF", + "orientation": "portrait-primary", + "scope": "/", + "lang": "zh-CN", + "categories": ["utilities", "productivity", "reference"], + "icons": [ + { + "src": "/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable any" + } + ], + "screenshots": [ + { + "src": "/screenshots/home-desktop.png", + "sizes": "1280x720", + "type": "image/png", + "form_factor": "wide", + "label": "首页 - 桌面版" + }, + { + "src": "/screenshots/home-mobile.png", + "sizes": "375x667", + "type": "image/png", + "form_factor": "narrow", + "label": "首页 - 移动版" + }, + { + "src": "/screenshots/ranking-desktop.png", + "sizes": "1280x720", + "type": "image/png", + "form_factor": "wide", + "label": "排行榜 - 桌面版" + }, + { + "src": "/screenshots/ranking-mobile.png", + "sizes": "375x667", + "type": "image/png", + "form_factor": "narrow", + "label": "排行榜 - 移动版" + } + ], + "shortcuts": [ + { + "name": "CPU排行榜", + "short_name": "CPU排行", + "description": "查看CPU性能排行榜", + "url": "/category/1", + "icons": [ + { + "src": "/icons/shortcut-cpu.png", + "sizes": "96x96", + "type": "image/png" + } + ] + }, + { + "name": "GPU排行榜", + "short_name": "GPU排行", + "description": "查看GPU性能排行榜", + "url": "/category/2", + "icons": [ + { + "src": "/icons/shortcut-gpu.png", + "sizes": "96x96", + "type": "image/png" + } + ] + }, + { + "name": "产品对比", + "short_name": "对比", + "description": "对比硬件产品性能", + "url": "/comparison", + "icons": [ + { + "src": "/icons/shortcut-compare.png", + "sizes": "96x96", + "type": "image/png" + } + ] + } + ], + "related_applications": [], + "prefer_related_applications": false, + "edge_side_panel": { + "preferred_width": 400 + }, + "launch_handler": { + "client_mode": "focus-existing" + } +} \ No newline at end of file diff --git a/frontend/public/sw.js b/frontend/public/sw.js new file mode 100644 index 00000000..b5e5d5df --- /dev/null +++ b/frontend/public/sw.js @@ -0,0 +1,287 @@ +// Service Worker for PWA functionality +const CACHE_NAME = 'it-hardware-ranking-v1' +const RUNTIME_CACHE = 'it-hardware-ranking-runtime' + +// 需要预缓存的资源列表 +const STATIC_CACHE_URLS = [ + '/', + '/index.html', + '/manifest.json', + '/favicon.ico', + // 添加其他需要预缓存的静态资源 +] + +// 需要网络优先的资源 +const NETWORK_FIRST_URLS = [ + '/api/', + // 添加其他需要网络优先的API路径 +] + +// 需要缓存优先的资源 +const CACHE_FIRST_URLS = [ + '/static/', + '/assets/', + // 添加其他需要缓存优先的静态资源路径 +] + +// 安装事件 - 预缓存静态资源 +self.addEventListener('install', (event) => { + console.log('[SW] Install event triggered') + + event.waitUntil( + caches.open(CACHE_NAME) + .then((cache) => { + console.log('[SW] Caching static resources') + return cache.addAll(STATIC_CACHE_URLS) + }) + .then(() => { + console.log('[SW] Static resources cached successfully') + // 强制激活新的Service Worker + return self.skipWaiting() + }) + .catch((error) => { + console.error('[SW] Failed to cache static resources:', error) + }) + ) +}) + +// 激活事件 - 清理旧缓存 +self.addEventListener('activate', (event) => { + console.log('[SW] Activate event triggered') + + event.waitUntil( + caches.keys() + .then((cacheNames) => { + return Promise.all( + cacheNames.map((cacheName) => { + // 删除旧版本的缓存 + if (cacheName !== CACHE_NAME && cacheName !== RUNTIME_CACHE) { + console.log('[SW] Deleting old cache:', cacheName) + return caches.delete(cacheName) + } + }) + ) + }) + .then(() => { + console.log('[SW] Old caches cleaned up') + // 立即控制所有客户端 + return self.clients.claim() + }) + .catch((error) => { + console.error('[SW] Failed to clean up old caches:', error) + }) + ) +}) + +// 网络请求拦截 +self.addEventListener('fetch', (event) => { + const { request } = event + const url = new URL(request.url) + + // 跳过非HTTP(S)请求 + if (!url.protocol.startsWith('http')) { + return + } + + // 跳过Chrome扩展请求 + if (url.protocol === 'chrome-extension:') { + return + } + + // 根据请求URL选择缓存策略 + if (isNetworkFirst(url)) { + // 网络优先策略 + event.respondWith(networkFirst(request)) + } else if (isCacheFirst(url)) { + // 缓存优先策略 + event.respondWith(cacheFirst(request)) + } else { + // 缓存优先,网络作为后备策略 + event.respondWith(staleWhileRevalidate(request)) + } +}) + +// 判断是否使用网络优先策略 +function isNetworkFirst(url) { + return NETWORK_FIRST_URLS.some(path => url.pathname.startsWith(path)) +} + +// 判断是否使用缓存优先策略 +function isCacheFirst(url) { + return CACHE_FIRST_URLS.some(path => url.pathname.startsWith(path)) +} + +// 网络优先策略 +async function networkFirst(request) { + const cache = await caches.open(RUNTIME_CACHE) + + try { + // 尝试从网络获取 + const response = await fetch(request) + + // 如果响应成功,缓存它 + if (response.ok) { + cache.put(request, response.clone()) + } + + return response + } catch (error) { + console.log('[SW] Network request failed, trying cache:', error) + + // 网络失败,尝试从缓存获取 + const cachedResponse = await cache.match(request) + + if (cachedResponse) { + return cachedResponse + } + + // 如果缓存也没有,返回离线页面 + return new Response('离线状态,请检查网络连接', { + status: 503, + statusText: 'Service Unavailable' + }) + } +} + +// 缓存优先策略 +async function cacheFirst(request) { + const cache = await caches.open(RUNTIME_CACHE) + const cachedResponse = await cache.match(request) + + if (cachedResponse) { + return cachedResponse + } + + try { + // 缓存中没有,从网络获取 + const response = await fetch(request) + + // 如果响应成功,缓存它 + if (response.ok) { + cache.put(request, response.clone()) + } + + return response + } catch (error) { + console.log('[SW] Network request failed:', error) + + // 返回错误响应 + return new Response('网络请求失败', { + status: 500, + statusText: 'Internal Server Error' + }) + } +} + +// 缓存优先,网络作为后备策略 +async function staleWhileRevalidate(request) { + const cache = await caches.open(RUNTIME_CACHE) + const cachedResponse = await cache.match(request) + + // 在后台发起网络请求 + const fetchPromise = fetch(request).then((response) => { + // 如果响应成功,更新缓存 + if (response.ok) { + cache.put(request, response.clone()) + } + return response + }).catch((error) => { + console.log('[SW] Background fetch failed:', error) + // 返回错误响应,但不影响缓存的响应 + return new Response('网络请求失败', { + status: 500, + statusText: 'Internal Server Error' + }) + }) + + // 如果有缓存,立即返回缓存 + if (cachedResponse) { + return cachedResponse + } + + // 没有缓存,等待网络请求 + return fetchPromise +} + +// 后台同步事件 +self.addEventListener('sync', (event) => { + console.log('[SW] Background sync event:', event.tag) + + if (event.tag === 'background-sync') { + event.waitUntil(doBackgroundSync()) + } +}) + +// 执行后台同步 +async function doBackgroundSync() { + try { + // 这里可以执行需要在网络恢复时同步的任务 + console.log('[SW] Performing background sync') + + // 例如:同步离线时的数据 + // await syncOfflineData() + + } catch (error) { + console.error('[SW] Background sync failed:', error) + } +} + +// 推送通知事件 +self.addEventListener('push', (event) => { + console.log('[SW] Push event received') + + if (!event.data) { + return + } + + const options = event.data.json() + + event.waitUntil( + self.registration.showNotification(options.title || '新消息', { + body: options.body || '您有新消息', + icon: options.icon || '/favicon.ico', + badge: options.badge || '/favicon.ico', + data: options.data || {}, + actions: options.actions || [] + }) + ) +}) + +// 通知点击事件 +self.addEventListener('notificationclick', (event) => { + console.log('[SW] Notification click event') + + event.notification.close() + + // 处理通知点击 + if (event.action) { + // 处理特定的操作按钮点击 + handleNotificationAction(event.action, event.notification.data) + } else { + // 处理通知主体点击 + handleNotificationClick(event.notification.data) + } +}) + +// 处理通知点击 +function handleNotificationClick(data) { + // 打开应用或特定页面 + event.waitUntil( + clients.openWindow(data.url || '/') + ) +} + +// 处理通知操作 +function handleNotificationAction(action, data) { + // 根据不同的操作执行不同的逻辑 + switch (action) { + case 'view': + clients.openWindow(data.url || '/') + break + case 'dismiss': + // 关闭通知,无需其他操作 + break + default: + console.log('[SW] Unknown notification action:', action) + } +} \ No newline at end of file diff --git a/frontend/scripts/quality-report.js b/frontend/scripts/quality-report.js new file mode 100644 index 00000000..79af8345 --- /dev/null +++ b/frontend/scripts/quality-report.js @@ -0,0 +1,443 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') +const { execSync } = require('child_process') + +// 创建报告目录 +const reportDir = path.resolve(process.cwd(), 'quality-report') +if (!fs.existsSync(reportDir)) { + fs.mkdirSync(reportDir, { recursive: true }) +} + +// 生成时间戳 +const timestamp = new Date().toISOString().replace(/[:.]/g, '-') +const reportFile = path.join(reportDir, `quality-report-${timestamp}.html`) + +// 报告模板 +const reportTemplate = ` + + + + + + 代码质量报告 + + + +
+

代码质量报告

+

生成时间: ${new Date().toLocaleString('zh-CN')}

+
+ +
+

概览

+
+
+

测试覆盖率

+
-
+

代码行覆盖率

+
+
+

ESLint 问题

+
-
+

代码风格问题

+
+
+

类型错误

+
-
+

TypeScript 类型错误

+
+
+

安全漏洞

+
-
+

npm audit 结果

+
+
+
+ +
+

测试覆盖率

+
+
+ +
+

代码风格检查

+
+
+ +
+

类型检查

+
+
+ +
+

安全检查

+
+
+ + + + +` + +// 写入报告文件 +fs.writeFileSync(reportFile, reportTemplate) + +console.log(`✅ 代码质量报告已生成: ${reportFile}`) + +// 运行各种检查并更新报告 +async function generateQualityReport() { + try { + // 1. 运行测试覆盖率 + console.log('🔍 运行测试覆盖率...') + try { + execSync('npm run test:unit:coverage', { stdio: 'pipe' }) + const coverageSummary = JSON.parse(fs.readFileSync('coverage/coverage-summary.json', 'utf8')) + updateTestCoverage(coverageSummary) + } catch (error) { + console.error('❌ 测试覆盖率检查失败:', error.message) + updateTestCoverage(null, error.message) + } + + // 2. 运行 ESLint + console.log('🔍 运行 ESLint...') + try { + const eslintOutput = execSync('npm run lint -- --format=json', { stdio: 'pipe' }).toString() + const eslintResults = JSON.parse(eslintOutput) + updateESLintResults(eslintResults) + } catch (error) { + console.error('❌ ESLint 检查失败:', error.message) + updateESLintResults(null, error.message) + } + + // 3. 运行类型检查 + console.log('🔍 运行类型检查...') + try { + execSync('npm run type-check', { stdio: 'pipe' }) + updateTypeCheckResults(true) + } catch (error) { + console.error('❌ 类型检查失败:', error.message) + updateTypeCheckResults(false, error.message) + } + + // 4. 运行安全审计 + console.log('🔍 运行安全审计...') + try { + const auditOutput = execSync('npm audit --json', { stdio: 'pipe' }).toString() + const auditResults = JSON.parse(auditOutput) + updateSecurityResults(auditResults) + } catch (error) { + console.error('❌ 安全审计失败:', error.message) + updateSecurityResults(null, error.message) + } + + console.log('✅ 代码质量报告更新完成') + } catch (error) { + console.error('❌ 生成代码质量报告时出错:', error) + } +} + +// 更新测试覆盖率信息 +function updateTestCoverage(coverageSummary, error) { + let html = '' + + if (error) { + html = ` +
+ 状态 + 检查失败 +
+
${error}
+ ` + } else { + const { lines, functions, branches, statements } = coverageSummary.total + const linesPercent = parseFloat(lines.pct) + + html = ` +
+ 行覆盖率 + ${lines.pct}% +
+
+
+
+
+ 函数覆盖率 + ${functions.pct}% +
+
+ 分支覆盖率 + ${branches.pct}% +
+
+ 语句覆盖率 + ${statements.pct}% +
+ ` + + // 更新概览 + updateOverview('test-coverage', lines.pct + '%', linesPercent >= 80 ? 'success' : linesPercent >= 60 ? 'warning' : 'error') + } + + updateReportSection('coverage-details', html) +} + +// 更新 ESLint 结果 +function updateESLintResults(eslintResults, error) { + let html = '' + + if (error) { + html = ` +
+ 状态 + 检查失败 +
+
${error}
+ ` + } else { + let totalErrors = 0 + let totalWarnings = 0 + + eslintResults.forEach(file => { + totalErrors += file.errorCount + totalWarnings += file.warningCount + }) + + const status = totalErrors === 0 && totalWarnings === 0 ? 'success' : totalErrors === 0 ? 'warning' : 'error' + + html = ` +
+ 错误 + ${totalErrors} +
+
+ 警告 + ${totalWarnings} +
+
+ 状态 + ${totalErrors === 0 && totalWarnings === 0 ? '通过' : totalErrors === 0 ? '警告' : '失败'} +
+ ` + + // 更新概览 + updateOverview('eslint-issues', totalErrors + totalWarnings, status) + } + + updateReportSection('eslint-details', html) +} + +// 更新类型检查结果 +function updateTypeCheckResults(success, error) { + let html = '' + + if (success) { + html = ` +
+ 状态 + 通过 +
+
+ 类型错误 + 0 +
+ ` + + // 更新概览 + updateOverview('type-errors', '0', 'success') + } else { + html = ` +
+ 状态 + 失败 +
+
${error}
+ ` + + // 更新概览 + updateOverview('type-errors', '>', 'error') + } + + updateReportSection('type-check-details', html) +} + +// 更新安全检查结果 +function updateSecurityResults(auditResults, error) { + let html = '' + + if (error) { + html = ` +
+ 状态 + 检查失败 +
+
${error}
+ ` + + // 更新概览 + updateOverview('security-vulnerabilities', '?', 'error') + } else { + const { vulnerabilities } = auditResults.metadata + const { low, moderate, high, critical } = vulnerabilities + + const totalVulns = low + moderate + high + critical + const status = critical > 0 || high > 0 ? 'error' : moderate > 0 ? 'warning' : 'success' + + html = ` +
+ 严重 + ${critical} +
+
+ 高危 + ${high} +
+
+ 中危 + ${moderate} +
+
+ 低危 + ${low} +
+
+ 总计 + ${totalVulns} +
+ ` + + // 更新概览 + updateOverview('security-vulnerabilities', totalVulns, status) + } + + updateReportSection('security-details', html) +} + +// 更新概览 +function updateOverview(id, value, status) { + const elementId = id + const className = status === 'success' ? 'success' : status === 'warning' ? 'warning' : 'error' + + // 这里需要使用 DOM 操作,但在 Node.js 环境中无法直接操作 HTML + // 实际实现中可以使用 cheerio 或其他 HTML 解析库 + console.log(`更新概览 ${id}: ${value} (${status})`) +} + +// 更新报告部分 +function updateReportSection(id, html) { + // 这里需要使用 DOM 操作,但在 Node.js 环境中无法直接操作 HTML + // 实际实现中可以使用 cheerio 或其他 HTML 解析库 + console.log(`更新报告部分 ${id}`) +} + +// 运行报告生成 +generateQualityReport() + +module.exports = { + generateQualityReport +} \ No newline at end of file diff --git a/frontend/scripts/test.js b/frontend/scripts/test.js new file mode 100644 index 00000000..83945fc6 --- /dev/null +++ b/frontend/scripts/test.js @@ -0,0 +1,263 @@ +#!/usr/bin/env node + +const { spawn } = require('child_process') +const path = require('path') +const fs = require('fs') + +// 颜色输出函数 +const colors = { + reset: '\x1b[0m', + bright: '\x1b[1m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + magenta: '\x1b[35m', + cyan: '\x1b[36m' +} + +function colorLog(color, message) { + console.log(`${colors[color]}${message}${colors.reset}`) +} + +// 解析命令行参数 +const args = process.argv.slice(2) +const options = { + unit: args.includes('--unit'), + e2e: args.includes('--e2e'), + coverage: args.includes('--coverage'), + watch: args.includes('--watch'), + verbose: args.includes('--verbose'), + component: args.includes('--component'), + api: args.includes('--api'), + store: args.includes('--store'), + ci: args.includes('--ci') +} + +// 如果没有指定测试类型,默认运行所有测试 +if (!options.unit && !options.e2e && !options.component && !options.api && !options.store) { + options.unit = true + options.e2e = true +} + +// 构建测试命令 +function buildTestCommand(type) { + let command = 'npx' + let args = [] + + if (type === 'unit') { + args.push('vitest', 'run') + + if (options.coverage) { + args.push('--coverage') + } + + if (options.watch) { + args = args.filter(arg => arg !== 'run') + args.push('--watch') + } + + if (options.verbose) { + args.push('--verbose') + } + + // 添加特定的测试文件模式 + if (options.component) { + args.push('--dir', 'tests/unit/components') + } else if (options.api) { + args.push('--dir', 'tests/unit/services') + } else if (options.store) { + args.push('--dir', 'tests/unit/stores') + } + } else if (type === 'e2e') { + args.push('playwright', 'test') + + if (options.ci) { + args.push('--reporter=line') + } else { + args.push('--reporter=list') + args.push('--reporter=html') + } + + if (options.verbose) { + args.push('--verbose') + } + } + + return { command, args } +} + +// 运行测试命令 +function runTestCommand(type) { + return new Promise((resolve, reject) => { + const { command, args } = buildTestCommand(type) + + colorLog('cyan', `运行 ${type} 测试...`) + colorLog('blue', `${command} ${args.join(' ')}`) + + const testProcess = spawn(command, args, { + stdio: 'inherit', + shell: true, + cwd: path.resolve(__dirname, '..') + }) + + testProcess.on('close', (code) => { + if (code === 0) { + colorLog('green', `${type} 测试通过!`) + resolve(code) + } else { + colorLog('red', `${type} 测试失败!`) + reject(new Error(`${type} 测试失败,退出码: ${code}`)) + } + }) + + testProcess.on('error', (error) => { + colorLog('red', `运行 ${type} 测试时出错: ${error.message}`) + reject(error) + }) + }) +} + +// 运行代码质量检查 +function runCodeQualityChecks() { + return new Promise((resolve, reject) => { + colorLog('cyan', '运行代码质量检查...') + + // 运行ESLint + const eslintProcess = spawn('npx', ['eslint', '--ext', '.js,.vue,.ts', 'src/', 'tests/'], { + stdio: 'inherit', + shell: true, + cwd: path.resolve(__dirname, '..') + }) + + eslintProcess.on('close', (code) => { + if (code === 0) { + colorLog('green', 'ESLint 检查通过!') + + // 运行Prettier检查 + const prettierProcess = spawn('npx', ['prettier', '--check', 'src/**/*.{js,vue,ts,css,scss,json,md}'], { + stdio: 'inherit', + shell: true, + cwd: path.resolve(__dirname, '..') + }) + + prettierProcess.on('close', (prettierCode) => { + if (prettierCode === 0) { + colorLog('green', 'Prettier 检查通过!') + resolve() + } else { + colorLog('red', 'Prettier 检查失败!') + reject(new Error(`Prettier 检查失败,退出码: ${prettierCode}`)) + } + }) + + prettierProcess.on('error', (error) => { + colorLog('red', `运行 Prettier 检查时出错: ${error.message}`) + reject(error) + }) + } else { + colorLog('red', 'ESLint 检查失败!') + reject(new Error(`ESLint 检查失败,退出码: ${code}`)) + } + }) + + eslintProcess.on('error', (error) => { + colorLog('red', `运行 ESLint 检查时出错: ${error.message}`) + reject(error) + }) + }) +} + +// 生成测试报告 +function generateTestReports() { + return new Promise((resolve) => { + colorLog('cyan', '生成测试报告...') + + // 确保报告目录存在 + const reportsDir = path.resolve(__dirname, '../reports') + if (!fs.existsSync(reportsDir)) { + fs.mkdirSync(reportsDir, { recursive: true }) + } + + // 创建测试报告摘要 + const summaryPath = path.join(reportsDir, 'test-summary.json') + const summary = { + timestamp: new Date().toISOString(), + tests: { + unit: options.unit, + e2e: options.e2e, + component: options.component, + api: options.api, + store: options.store + }, + coverage: options.coverage, + watch: options.watch, + verbose: options.verbose + } + + fs.writeFileSync(summaryPath, JSON.stringify(summary, null, 2)) + colorLog('green', '测试报告已生成!') + resolve() + }) +} + +// 主函数 +async function main() { + try { + colorLog('bright', '开始运行自动化测试和代码质量检查...') + + // 运行代码质量检查 + await runCodeQualityChecks() + + // 运行单元测试 + if (options.unit) { + await runTestCommand('unit') + } + + // 运行E2E测试 + if (options.e2e) { + await runTestCommand('e2e') + } + + // 生成测试报告 + await generateTestReports() + + colorLog('bright', colorLog('green', '所有测试和代码质量检查通过!')) + process.exit(0) + } catch (error) { + colorLog('red', `测试或代码质量检查失败: ${error.message}`) + process.exit(1) + } +} + +// 显示帮助信息 +function showHelp() { + colorLog('bright', '自动化测试和代码质量检查工具') + console.log('') + console.log('用法: node scripts/test.js [选项]') + console.log('') + console.log('选项:') + console.log(' --unit 运行单元测试') + console.log(' --e2e 运行端到端测试') + console.log(' --component 运行组件测试') + console.log(' --api 运行API服务测试') + console.log(' --store 运行状态管理测试') + console.log(' --coverage 生成测试覆盖率报告') + console.log(' --watch 监视模式运行测试') + console.log(' --verbose 详细输出') + console.log(' --ci CI模式运行测试') + console.log('') + console.log('示例:') + console.log(' node scripts/test.js --unit --coverage') + console.log(' node scripts/test.js --e2e --verbose') + console.log(' node scripts/test.js --component --watch') +} + +// 检查是否需要显示帮助信息 +if (args.includes('--help') || args.includes('-h')) { + showHelp() + process.exit(0) +} + +// 运行主函数 +main() \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 322b474a..4272da97 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,22 +1,67 @@ \ No newline at end of file diff --git a/frontend/src/components/CacheableComponent.vue b/frontend/src/components/CacheableComponent.vue new file mode 100644 index 00000000..4d2afe8c --- /dev/null +++ b/frontend/src/components/CacheableComponent.vue @@ -0,0 +1,292 @@ +/** + * 可缓存组件 + * 提供组件级别的缓存功能,支持动态缓存策略配置 + */ + + + + + + \ No newline at end of file diff --git a/frontend/src/components/ErrorBoundary.vue b/frontend/src/components/ErrorBoundary.vue index 8632d65f..4ff1d7d7 100644 --- a/frontend/src/components/ErrorBoundary.vue +++ b/frontend/src/components/ErrorBoundary.vue @@ -8,13 +8,28 @@

{{ title || '出现错误' }}

-

{{ message || '应用程序遇到了意外错误' }}

- - 重试 - - - 返回首页 - +

{{ message || errorMessage || '应用程序遇到了意外错误' }}

+
+ + 重试 + + + 返回首页 + + + {{ showDetailsContent ? '隐藏' : '显示' }}详情 + +
+
+ + +
{{ errorDetails }}
+
+ +
{{ componentStack }}
+
+
+
@@ -22,8 +37,10 @@ \ No newline at end of file diff --git a/frontend/src/components/PerformanceDashboard.vue b/frontend/src/components/PerformanceDashboard.vue new file mode 100644 index 00000000..c52347be --- /dev/null +++ b/frontend/src/components/PerformanceDashboard.vue @@ -0,0 +1,318 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/ResourcePreloader.vue b/frontend/src/components/ResourcePreloader.vue new file mode 100644 index 00000000..d49bae89 --- /dev/null +++ b/frontend/src/components/ResourcePreloader.vue @@ -0,0 +1,166 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/SecureForm.vue b/frontend/src/components/SecureForm.vue new file mode 100644 index 00000000..7c6e0891 --- /dev/null +++ b/frontend/src/components/SecureForm.vue @@ -0,0 +1,381 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/SecureInput.vue b/frontend/src/components/SecureInput.vue new file mode 100644 index 00000000..391a18e3 --- /dev/null +++ b/frontend/src/components/SecureInput.vue @@ -0,0 +1,442 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/config/security.js b/frontend/src/config/security.js new file mode 100644 index 00000000..41903b8a --- /dev/null +++ b/frontend/src/config/security.js @@ -0,0 +1,282 @@ +/** + * 安全配置文件 + * 集中管理前端安全相关的配置 + */ + +// 安全配置 +export const securityConfig = { + // API安全配置 + api: { + // 请求超时时间(毫秒) + timeout: 30000, + // 最大重试次数 + maxRetries: 3, + // 重试延迟(毫秒) + retryDelay: 1000, + // 是否启用请求签名 + enableRequestSigning: true, + // 是否启用响应验证 + enableResponseValidation: true, + // 是否启用CSRF保护 + enableCSRFProtection: true, + // CSRF令牌存储键名 + csrfTokenKey: 'csrf_token', + // 敏感操作需要二次验证 + sensitiveOperationsRequire2FA: true + }, + + // 数据加密配置 + encryption: { + // 默认加密算法 + algorithm: 'AES', + // 默认密钥(实际项目中应该从环境变量获取) + defaultKey: 'HardwarePerformance2023SecretKey', + // 默认向量(实际项目中应该从环境变量获取) + defaultIv: 'Hardware2023IV', + // 加密模式 + mode: 'CBC', + // 填充方式 + padding: 'Pkcs7', + // 是否加密敏感数据 + encryptSensitiveData: true, + // 敏感数据键名模式 + sensitiveDataKeyPattern: /password|token|secret|key|credential/i + }, + + // 存储安全配置 + storage: { + // 是否加密localStorage + encryptLocalStorage: true, + // 是否加密sessionStorage + encryptSessionStorage: true, + // 是否启用安全Cookie + useSecureCookies: true, + // Cookie SameSite属性 + cookieSameSite: 'Strict', + // Cookie过期时间(天) + cookieExpirationDays: 7, + // 敏感数据存储键名 + sensitiveStorageKeys: ['token', 'user', 'credentials'] + }, + + // 内容安全策略配置 + csp: { + // 是否启用CSP + enabled: true, + // 默认源 + defaultSrc: "'self'", + // 脚本源 + scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'"], + // 样式源 + styleSrc: ["'self'", "'unsafe-inline'"], + // 图片源 + imgSrc: ["'self'", "data:", "https:"], + // 连接源 + connectSrc: ["'self'"], + // 字体源 + fontSrc: ["'self'", "data:"], + // 对象源 + objectSrc: "'none'", + // 媒体源 + mediaSrc: "'self'", + // 框架源 + frameSrc: "'none'", + // 表单源 + formAction: "'self'", + // 基础URI + baseUri: "'self'", + // 是否启用报告 + reportOnly: false, + // 报告URI + reportUri: '/api/csp-report' + }, + + // XSS防护配置 + xss: { + // 是否启用XSS防护 + enabled: true, + // 是否启用输入过滤 + enableInputFiltering: true, + // 是否启用输出编码 + enableOutputEncoding: true, + // 是否启用DOMPurify(需要安装dompurify库) + enableDOMPurify: false, + // 危险标签列表 + dangerousTags: ['script', 'iframe', 'object', 'embed', 'link', 'meta', 'style'], + // 危险属性列表 + dangerousAttributes: ['onload', 'onerror', 'onclick', 'onmouseover', 'onfocus', 'onblur'], + // 允许的HTML标签 + allowedTags: ['p', 'div', 'span', 'a', 'img', 'br', 'strong', 'em', 'ul', 'ol', 'li'], + // 允许的属性 + allowedAttributes: ['href', 'src', 'alt', 'title', 'class', 'id', 'style'] + }, + + // CSRF防护配置 + csrf: { + // 是否启用CSRF防护 + enabled: true, + // 令牌存储位置 + tokenStorage: 'localStorage', // localStorage, sessionStorage, cookie + // 令牌过期时间(分钟) + tokenExpirationMinutes: 60, + // 令牌刷新阈值(分钟) + tokenRefreshThresholdMinutes: 10, + // 需要CSRF保护的HTTP方法 + protectedMethods: ['POST', 'PUT', 'DELETE', 'PATCH'], + // 不需要CSRF保护的URL模式 + excludedUrls: ['/api/auth/login', '/api/auth/register', '/api/csrf-token'] + }, + + // 密码策略配置 + passwordPolicy: { + // 最小长度 + minLength: 8, + // 最大长度 + maxLength: 128, + // 是否需要小写字母 + requireLowercase: true, + // 是否需要大写字母 + requireUppercase: true, + // 是否需要数字 + requireNumbers: true, + // 是否需要特殊字符 + requireSpecialChars: true, + // 允许的特殊字符 + allowedSpecialChars: '!@#$%^&*()_+-=[]{}|;:,.<>?', + // 禁止的常见密码 + forbiddenPasswords: ['password', '123456', 'qwerty', 'admin', 'letmein'], + // 密码历史记录数量(防止重复使用旧密码) + passwordHistoryCount: 5, + // 密码过期天数 + passwordExpirationDays: 90 + }, + + // 会话安全配置 + session: { + // 会话超时时间(分钟) + timeoutMinutes: 30, + // 会话警告时间(分钟) + warningMinutes: 5, + // 是否启用会话心跳 + enableHeartbeat: true, + // 心跳间隔(分钟) + heartbeatIntervalMinutes: 5, + // 是否启用会话锁定 + enableLocking: true, + // 空闲时间(分钟)后锁定 + lockAfterIdleMinutes: 10, + // 是否启用多设备登录检测 + enableMultiDeviceDetection: true, + // 最大允许设备数 + maxDevices: 3 + }, + + // 安全日志配置 + logging: { + // 是否启用安全日志 + enabled: true, + // 日志级别 + level: 'info', // debug, info, warn, error + // 是否记录到服务器 + logToServer: true, + // 服务器日志端点 + logEndpoint: '/api/security/log', + // 本地日志最大条数 + maxLocalLogEntries: 1000, + // 日志保留天数 + retentionDays: 30, + // 记录的安全事件类型 + eventTypes: [ + 'login_attempt', + 'login_success', + 'login_failure', + 'logout', + 'session_expired', + 'password_change', + 'account_locked', + 'suspicious_activity', + 'xss_attempt', + 'csrf_attempt', + 'injection_attempt' + ] + }, + + // 安全监控配置 + monitoring: { + // 是否启用安全监控 + enabled: true, + // 是否监控异常登录 + monitorAnomalousLogin: true, + // 异常登录阈值(次) + anomalousLoginThreshold: 3, + // 是否监控暴力破解 + monitorBruteForce: true, + // 暴力破解阈值(次) + bruteForceThreshold: 5, + // 暴力破解时间窗口(分钟) + bruteForceTimeWindowMinutes: 15, + // 是否监控异常API调用 + monitorAnomalousApiCalls: true, + // 异常API调用阈值(次) + anomalousApiCallsThreshold: 100, + // 异常API调用时间窗口(分钟) + anomalousApiCallsTimeWindowMinutes: 10, + // 是否启用实时警报 + enableRealTimeAlerts: true, + // 警报端点 + alertEndpoint: '/api/security/alert' + } +} + +// 环境特定配置 +export const getEnvironmentConfig = () => { + const env = import.meta.env.MODE || 'development' + + switch (env) { + case 'development': + return { + ...securityConfig, + csp: { + ...securityConfig.csp, + reportOnly: true + }, + logging: { + ...securityConfig.logging, + level: 'debug', + logToServer: false + } + } + + case 'staging': + return { + ...securityConfig, + csp: { + ...securityConfig.csp, + reportOnly: true + }, + logging: { + ...securityConfig.logging, + level: 'info' + } + } + + case 'production': + return { + ...securityConfig, + csp: { + ...securityConfig.csp, + reportOnly: false + }, + logging: { + ...securityConfig.logging, + level: 'warn' + } + } + + default: + return securityConfig + } +} + +// 获取当前环境的安全配置 +export const currentSecurityConfig = getEnvironmentConfig() \ No newline at end of file diff --git a/frontend/src/main.js b/frontend/src/main.js index 903964e2..949c9301 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -6,10 +6,52 @@ import * as ElementPlusIconsVue from '@element-plus/icons-vue' import router from './router' import App from './App.vue' import './assets/style.css' +import monitor from './utils/monitor' +import { init as initPerformanceMetrics, recordInteraction } from './utils/performanceMetrics' +import { initPWA, checkPWAInstallable } from './utils/pwa' +import { initLazyLoad } from './utils/lazyLoad' +import { installPersistPlugin } from './plugins/piniaPersistPlugin' + +// 初始化性能监控 +monitor.init({ + reportUrl: '/api/monitor/report', // 错误和性能数据上报地址 + enablePerformance: true, // 是否启用性能监控 + enableErrorTracking: true, // 是否启用错误追踪 + maxErrorCount: 50, // 最大错误记录数 + reportInterval: 60000 // 上报间隔(毫秒) +}) + +// 初始化性能指标收集 +initPerformanceMetrics({ + reportUrl: '/api/performance/report', + sampleRate: 1.0, + reportInterval: 30000 +}) + +// 初始化PWA功能 +initPWA() + +// 检查PWA安装状态 +const pwaInfo = checkPWAInstallable() +console.log('[PWA] 安装状态:', pwaInfo) + +// 初始化图片懒加载 +initLazyLoad({ + selector: 'img[data-src]', + placeholder: '/images/placeholder.png', + threshold: 0.1, + enableNativeLazyLoad: true +}) + +// 记录应用启动时间 +monitor.logAppStart() const app = createApp(App) const pinia = createPinia() +// 安装Pinia持久化插件 +installPersistPlugin(pinia) + // 注册所有Element Plus图标 for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) @@ -21,6 +63,12 @@ app.config.errorHandler = (err, instance, info) => { console.error('错误组件实例:', instance) console.error('错误信息:', info) + // 使用监控记录错误 + monitor.logError(err, { + component: instance?.$options?.name || 'Unknown', + info + }) + // 使用Element Plus显示错误通知 ElNotification({ title: '应用错误', @@ -34,6 +82,12 @@ app.config.errorHandler = (err, instance, info) => { window.addEventListener('unhandledrejection', event => { console.error('未处理的Promise错误:', event.reason) + // 使用监控记录错误 + monitor.logError(event.reason, { + type: 'unhandled_promise_rejection', + promise: event.promise + }) + ElNotification({ title: '未处理的错误', message: `应用发生未处理的错误: ${event.reason?.message || '未知错误'}`, @@ -49,4 +103,26 @@ app.use(pinia) app.use(router) app.use(ElementPlus) +// 记录路由切换性能 +router.beforeEach((to, from, next) => { + // 记录路由切换开始时间 + window.routeChangeStartTime = performance.now() + next() +}) + +router.afterEach((to) => { + // 计算路由切换耗时 + if (window.routeChangeStartTime) { + recordInteraction('route-change', window.routeChangeStartTime, performance.now(), { + from: from?.path, + to: to.path + }) + } + + // 更新页面标题 + if (to.meta?.title) { + document.title = to.meta.title + } +}) + app.mount('#app') \ No newline at end of file diff --git a/frontend/src/middleware/security.js b/frontend/src/middleware/security.js new file mode 100644 index 00000000..5191c6eb --- /dev/null +++ b/frontend/src/middleware/security.js @@ -0,0 +1,511 @@ +/** + * 安全中间件 + * 提供前端安全防护功能 + */ + +import { currentSecurityConfig } from '../config/security' +import { + aesEncrypt, + aesDecrypt, + generateCSRFToken, + validateCSRFToken, + sanitizeHtml, + sanitizeInput, + secureLocalStorageSet, + secureLocalStorageGet, + secureSessionStorageSet, + secureSessionStorageGet, + enableBrowserSecurity +} from '../utils/security' + +/** + * 初始化安全中间件 + */ +export function initSecurityMiddleware() { + // 启用浏览器安全策略 + enableBrowserSecurity() + + // 初始化CSRF令牌 + initCSRFToken() + + // 初始化内容安全策略 + initCSP() + + // 初始化XSS防护 + initXSSProtection() + + // 初始化会话管理 + initSessionManagement() + + // 初始化安全监控 + initSecurityMonitoring() +} + +/** + * 初始化CSRF令牌 + */ +function initCSRFToken() { + const config = currentSecurityConfig.csrf + + if (!config.enabled) return + + const tokenKey = config.tokenStorage === 'localStorage' + ? 'csrf_token' + : 'csrf_token' + + let token = config.tokenStorage === 'localStorage' + ? secureLocalStorageGet(tokenKey) + : secureSessionStorageGet(tokenKey) + + // 如果令牌不存在或已过期,生成新令牌 + if (!token || isTokenExpired(token)) { + token = generateCSRFToken() + + if (config.tokenStorage === 'localStorage') { + secureLocalStorageSet(tokenKey, token) + } else { + secureSessionStorageSet(tokenKey, token) + } + } +} + +/** + * 检查令牌是否过期 + * @param {string} token 令牌 + * @returns {boolean} 是否过期 + */ +function isTokenExpired(token) { + // 简单实现,实际项目中应该在令牌中包含过期时间 + const storedTime = localStorage.getItem('csrf_token_time') || sessionStorage.getItem('csrf_token_time') + if (!storedTime) return true + + const expirationTime = parseInt(storedTime) + (currentSecurityConfig.csrf.tokenExpirationMinutes * 60 * 1000) + return Date.now() > expirationTime +} + +/** + * 获取CSRF令牌 + * @returns {string} CSRF令牌 + */ +export function getCSRFToken() { + const config = currentSecurityConfig.csrf + const tokenKey = 'csrf_token' + + return config.tokenStorage === 'localStorage' + ? secureLocalStorageGet(tokenKey) + : secureSessionStorageGet(tokenKey) +} + +/** + * 验证CSRF令牌 + * @param {string} token 要验证的令牌 + * @returns {boolean} 是否有效 + */ +export function validateCSRF(token) { + const config = currentSecurityConfig.csrf + if (!config.enabled) return true + + const storedToken = getCSRFToken() + return validateCSRFToken(token, storedToken) +} + +/** + * 初始化内容安全策略 + */ +function initCSP() { + const config = currentSecurityConfig.csp + + if (!config.enabled) return + + // 构建CSP策略字符串 + const cspPolicy = [ + `default-src ${config.defaultSrc}`, + `script-src ${config.scriptSrc.join(' ')}`, + `style-src ${config.styleSrc.join(' ')}`, + `img-src ${config.imgSrc.join(' ')}`, + `connect-src ${config.connectSrc.join(' ')}`, + `font-src ${config.fontSrc.join(' ')}`, + `object-src ${config.objectSrc}`, + `media-src ${config.mediaSrc}`, + `frame-src ${config.frameSrc}`, + `form-action ${config.formAction}`, + `base-uri ${config.baseUri}` + ].join('; ') + + // 创建并添加CSP meta标签 + const meta = document.createElement('meta') + meta.httpEquiv = config.reportOnly ? 'Content-Security-Policy-Report-Only' : 'Content-Security-Policy' + meta.content = cspPolicy + document.head.appendChild(meta) +} + +/** + * 初始化XSS防护 + */ +function initXSSProtection() { + const config = currentSecurityConfig.xss + + if (!config.enabled) return + + // 添加X-XSS-Protection头(虽然现代浏览器已弃用,但仍可作为后备) + const meta = document.createElement('meta') + meta.httpEquiv = 'X-XSS-Protection' + meta.content = '1; mode=block' + document.head.appendChild(meta) + + // 重写innerHTML和outerHTML以进行XSS过滤 + if (config.enableOutputEncoding) { + const originalInnerHTML = Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML') + const originalOuterHTML = Object.getOwnPropertyDescriptor(Element.prototype, 'outerHTML') + + Object.defineProperty(Element.prototype, 'innerHTML', { + set: function(value) { + if (config.enableInputFiltering) { + value = sanitizeHtml(value) + } + originalInnerHTML.set.call(this, value) + }, + get: originalInnerHTML.get + }) + + Object.defineProperty(Element.prototype, 'outerHTML', { + set: function(value) { + if (config.enableInputFiltering) { + value = sanitizeHtml(value) + } + originalOuterHTML.set.call(this, value) + }, + get: originalOuterHTML.get + }) + } +} + +/** + * 初始化会话管理 + */ +function initSessionManagement() { + const config = currentSecurityConfig.session + + if (!config.enableHeartbeat) return + + // 设置会话超时警告 + const warningTimeout = setTimeout(() => { + showSessionWarning() + }, (config.timeoutMinutes - config.warningMinutes) * 60 * 1000) + + // 设置会话超时 + const timeout = setTimeout(() => { + handleSessionTimeout() + }, config.timeoutMinutes * 60 * 1000) + + // 设置心跳 + if (config.enableHeartbeat) { + const heartbeatInterval = setInterval(() => { + sendHeartbeat() + }, config.heartbeatIntervalMinutes * 60 * 1000) + + // 清理定时器 + window.addEventListener('beforeunload', () => { + clearTimeout(warningTimeout) + clearTimeout(timeout) + clearInterval(heartbeatInterval) + }) + } +} + +/** + * 显示会话警告 + */ +function showSessionWarning() { + const config = currentSecurityConfig.session + + // 这里可以使用Element Plus的MessageBox或其他通知组件 + // 为了简化,这里使用浏览器原生confirm + const result = confirm(`您的会话将在${config.warningMinutes}分钟后过期,是否继续?`) + + if (result) { + // 用户确认继续,重置会话 + resetSession() + } else { + // 用户取消,立即登出 + logout() + } +} + +/** + * 处理会话超时 + */ +function handleSessionTimeout() { + // 记录会话超时事件 + logSecurityEvent('session_expired', { timestamp: Date.now() }) + + // 显示超时消息 + alert('您的会话已过期,请重新登录') + + // 执行登出 + logout() +} + +/** + * 重置会话 + */ +function resetSession() { + // 发送心跳请求以重置会话 + sendHeartbeat() + + // 重新设置会话超时警告 + const config = currentSecurityConfig.session + setTimeout(() => { + showSessionWarning() + }, (config.timeoutMinutes - config.warningMinutes) * 60 * 1000) +} + +/** + * 发送心跳 + */ +function sendHeartbeat() { + // 这里应该发送API请求到服务器以保持会话活跃 + // 为了简化,这里只是一个示例 + console.log('Sending heartbeat to keep session alive') +} + +/** + * 登出 + */ +function logout() { + // 清除本地存储 + localStorage.clear() + sessionStorage.clear() + + // 重定向到登录页面 + window.location.href = '/login' +} + +/** + * 初始化安全监控 + */ +function initSecurityMonitoring() { + const config = currentSecurityConfig.monitoring + + if (!config.enabled) return + + // 监控异常登录 + if (config.monitorAnomalousLogin) { + monitorAnomalousLogin() + } + + // 监控暴力破解 + if (config.monitorBruteForce) { + monitorBruteForce() + } + + // 监控异常API调用 + if (config.monitorAnomalousApiCalls) { + monitorAnomalousApiCalls() + } +} + +/** + * 监控异常登录 + */ +function monitorAnomalousLogin() { + // 实现异常登录监控逻辑 + // 这里只是一个示例 + console.log('Monitoring anomalous login attempts') +} + +/** + * 监控暴力破解 + */ +function monitorBruteForce() { + // 实现暴力破解监控逻辑 + // 这里只是一个示例 + console.log('Monitoring brute force attempts') +} + +/** + * 监控异常API调用 + */ +function monitorAnomalousApiCalls() { + // 实现异常API调用监控逻辑 + // 这里只是一个示例 + console.log('Monitoring anomalous API calls') +} + +/** + * 记录安全事件 + * @param {string} eventType 事件类型 + * @param {object} eventData 事件数据 + */ +export function logSecurityEvent(eventType, eventData = {}) { + const config = currentSecurityConfig.logging + + if (!config.enabled || !config.eventTypes.includes(eventType)) return + + const event = { + type: eventType, + timestamp: Date.now(), + userAgent: navigator.userAgent, + url: window.location.href, + ...eventData + } + + // 记录到本地存储 + const logs = secureLocalStorageGet('security_logs', false, []) + logs.push(event) + + // 限制日志数量 + if (logs.length > config.maxLocalLogEntries) { + logs.splice(0, logs.length - config.maxLocalLogEntries) + } + + secureLocalStorageSet('security_logs', logs, false) + + // 发送到服务器 + if (config.logToServer) { + sendSecurityLogToServer(event) + } +} + +/** + * 发送安全日志到服务器 + * @param {object} event 安全事件 + */ +function sendSecurityLogToServer(event) { + // 这里应该发送API请求到服务器 + // 为了简化,这里只是一个示例 + console.log('Sending security log to server:', event) +} + +/** + * 安全请求拦截器 + * @param {object} config 请求配置 + * @returns {object} 修改后的请求配置 + */ +export function secureRequestInterceptor(config) { + const securityConfig = currentSecurityConfig.api + + // 添加CSRF令牌 + if (securityConfig.enableCSRFProtection && + securityConfig.protectedMethods.includes(config.method?.toUpperCase())) { + const token = getCSRFToken() + if (token) { + config.headers['X-CSRF-Token'] = token + } + } + + // 添加请求签名 + if (securityConfig.enableRequestSigning) { + const timestamp = Date.now().toString() + const nonce = generateNonce() + const signature = generateRequestSignature(config, timestamp, nonce) + + config.headers['X-Timestamp'] = timestamp + config.headers['X-Nonce'] = nonce + config.headers['X-Signature'] = signature + } + + // 加密敏感数据 + if (securityConfig.encryptSensitiveData && config.data) { + config.data = encryptSensitiveData(config.data) + } + + return config +} + +/** + * 安全响应拦截器 + * @param {object} response 响应对象 + * @returns {object} 修改后的响应对象 + */ +export function secureResponseInterceptor(response) { + const securityConfig = currentSecurityConfig.api + + // 验证响应签名 + if (securityConfig.enableResponseValidation && response.headers['x-signature']) { + const isValid = validateResponseSignature(response) + if (!isValid) { + throw new Error('Invalid response signature') + } + } + + // 解密敏感数据 + if (securityConfig.encryptSensitiveData && response.data) { + response.data = decryptSensitiveData(response.data) + } + + return response +} + +/** + * 生成随机数 + * @returns {string} 随机数 + */ +function generateNonce() { + return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) +} + +/** + * 生成请求签名 + * @param {object} config 请求配置 + * @param {string} timestamp 时间戳 + * @param {string} nonce 随机数 + * @returns {string} 签名 + */ +function generateRequestSignature(config, timestamp, nonce) { + // 这里应该实现请求签名逻辑 + // 为了简化,这里只是一个示例 + const data = JSON.stringify(config.data || '') + timestamp + nonce + return aesEncrypt(data) +} + +/** + * 验证响应签名 + * @param {object} response 响应对象 + * @returns {boolean} 是否有效 + */ +function validateResponseSignature(response) { + // 这里应该实现响应签名验证逻辑 + // 为了简化,这里只是一个示例 + return true +} + +/** + * 加密敏感数据 + * @param {object} data 数据对象 + * @returns {object} 加密后的数据对象 + */ +function encryptSensitiveData(data) { + const config = currentSecurityConfig.encryption + const encryptedData = { ...data } + + for (const key in encryptedData) { + if (config.sensitiveDataKeyPattern.test(key)) { + encryptedData[key] = aesEncrypt(JSON.stringify(encryptedData[key])) + } + } + + return encryptedData +} + +/** + * 解密敏感数据 + * @param {object} data 数据对象 + * @returns {object} 解密后的数据对象 + */ +function decryptSensitiveData(data) { + const config = currentSecurityConfig.encryption + const decryptedData = { ...data } + + for (const key in decryptedData) { + if (config.sensitiveDataKeyPattern.test(key)) { + try { + decryptedData[key] = JSON.parse(aesDecrypt(decryptedData[key])) + } catch (error) { + console.error(`Failed to decrypt sensitive data for key: ${key}`, error) + } + } + } + + return decryptedData +} \ No newline at end of file diff --git a/frontend/src/plugins/piniaPersistPlugin.js b/frontend/src/plugins/piniaPersistPlugin.js new file mode 100644 index 00000000..f01fc896 --- /dev/null +++ b/frontend/src/plugins/piniaPersistPlugin.js @@ -0,0 +1,23 @@ +/** + * Pinia持久化插件 + * 集成到主应用中,自动为所有store添加持久化功能 + */ + +import { createPersistPlugin } from '../utils/piniaPersist' + +/** + * 安装Pinia持久化插件 + * @param {Object} pinia Pinia实例 + */ +export const installPersistPlugin = (pinia) => { + // 为所有store添加持久化功能 + pinia.use(({ store, options }) => { + // 如果store已经配置了persist选项,则应用持久化插件 + if (options.persist) { + const persistPlugin = createPersistPlugin(options.persist) + return persistPlugin({ store, options }) + } + }) +} + +export default installPersistPlugin \ No newline at end of file diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 672ea838..3d28aeb7 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -1,46 +1,147 @@ import { createRouter, createWebHistory } from 'vue-router' +import monitor from '@/utils/monitor' +import { preloadNextRoutes, smartPreload } from '@/utils/routePreloader' +import { dynamicImport, preloadComponent, batchPreloadComponents } from '@/utils/dynamicImport' +import { globalBeforeGuard, globalAfterGuard } from './securityGuards' const routes = [ { path: '/', name: 'Home', - component: () => import('../views/Home.vue'), + component: () => dynamicImport( + () => import('../views/Home.vue'), + 'home-page', + { timeout: 5000 } + ), meta: { - title: '硬件性能排行榜 - 首页' + title: '硬件性能排行榜 - 首页', + securityLevel: 'low' } }, { path: '/category/:id', name: 'CategoryRanking', - component: () => import('../views/CategoryRanking.vue'), + component: () => dynamicImport( + () => import('../views/CategoryRanking.vue'), + 'category-ranking-page', + { timeout: 5000 } + ), props: true, meta: { - title: '硬件性能排行榜 - 类别排名' + title: '硬件性能排行榜 - 类别排名', + securityLevel: 'low' } }, { path: '/product/:id', name: 'ProductDetail', - component: () => import('../views/ProductDetail.vue'), + component: () => dynamicImport( + () => import('../views/ProductDetail.vue'), + 'product-detail-page', + { timeout: 5000 } + ), props: true, meta: { - title: '硬件性能排行榜 - 产品详情' + title: '硬件性能排行榜 - 产品详情', + securityLevel: 'low' } }, { path: '/compare', name: 'ProductComparison', - component: () => import('../views/ProductComparison.vue'), + component: () => dynamicImport( + () => import('../views/ProductComparison.vue'), + 'product-comparison-page', + { timeout: 5000 } + ), meta: { - title: '硬件性能排行榜 - 产品对比' + title: '硬件性能排行榜 - 产品对比', + securityLevel: 'low' + } + }, + { + path: '/monitor', + name: 'PerformanceMonitor', + component: () => dynamicImport( + () => import('../views/PerformanceMonitor.vue'), + 'performance-monitor-page', + { timeout: 5000 } + ), + meta: { + title: '硬件性能排行榜 - 性能监控', + securityLevel: 'medium', + requiresAuth: true + } + }, + { + path: '/cache-management', + name: 'CacheManagement', + component: () => dynamicImport( + () => import('../views/CacheManagement.vue'), + 'cache-management-page', + { timeout: 5000 } + ), + meta: { + title: '硬件性能排行榜 - 缓存管理', + securityLevel: 'medium', + requiresAuth: true + } + }, + { + path: '/login', + name: 'Login', + component: () => dynamicImport( + () => import('../views/Login.vue'), + 'login-page', + { timeout: 5000 } + ), + meta: { + title: '硬件性能排行榜 - 登录', + securityLevel: 'medium', + requiresSecurityCheck: true + } + }, + { + path: '/profile', + name: 'UserProfile', + component: () => dynamicImport( + () => import('../views/UserProfile.vue'), + 'user-profile-page', + { timeout: 5000 } + ), + meta: { + title: '硬件性能排行榜 - 个人资料', + securityLevel: 'high', + requiresAuth: true + } + }, + { + path: '/admin', + name: 'AdminDashboard', + component: () => dynamicImport( + () => import('../views/AdminDashboard.vue'), + 'admin-dashboard-page', + { timeout: 5000 } + ), + meta: { + title: '硬件性能排行榜 - 管理后台', + securityLevel: 'critical', + requiresAuth: true, + requiresAdmin: true, + roles: ['admin', 'superadmin'] } }, { path: '/:pathMatch(.*)*', name: 'NotFound', - component: () => import('../views/NotFound.vue'), + component: () => dynamicImport( + () => import('../views/NotFound.vue'), + 'not-found-page', + { timeout: 3000 } + ), meta: { - title: '硬件性能排行榜 - 页面未找到' + title: '硬件性能排行榜 - 页面未找到', + securityLevel: 'low' } } ] @@ -58,13 +159,47 @@ const router = createRouter({ } }) -// 路由前置守卫,用于设置页面标题 -router.beforeEach((to, from, next) => { - // 设置页面标题 - if (to.meta.title) { - document.title = to.meta.title - } - next() +// 路由前置守卫,用于设置页面标题和安全检查 +router.beforeEach(globalBeforeGuard) + +// 路由后置守卫,用于记录路由切换性能和安全日志 +router.afterEach(globalAfterGuard) + +// 初始化路由 +router.isReady().then(() => { + // 设置智能预加载 + smartPreload(router) + + // 预加载关键组件 + batchPreloadComponents([ + { + importFn: () => import('@/views/Home.vue'), + cacheKey: 'home-page', + options: { delay: 2000 } + }, + { + importFn: () => import('@/views/CategoryRanking.vue'), + cacheKey: 'category-ranking-page', + options: { delay: 3000 } + }, + { + importFn: () => import('@/components/Header.vue'), + cacheKey: 'header-component', + options: { delay: 1000 } + }, + { + importFn: () => import('@/components/Footer.vue'), + cacheKey: 'footer-component', + options: { delay: 1000 } + } + ]) + + // 记录路由初始化完成 + monitor.logPerformance({ + name: 'router-ready', + value: performance.now() - window.performanceStartTime, + operation: '路由初始化' + }) }) export default router \ No newline at end of file diff --git a/frontend/src/router/securityGuards.js b/frontend/src/router/securityGuards.js new file mode 100644 index 00000000..bf3d1bf1 --- /dev/null +++ b/frontend/src/router/securityGuards.js @@ -0,0 +1,349 @@ +import { logSecurityEvent, validateSession } from '@/middleware/security' +import { ElMessage } from 'element-plus' +import { useUserStore } from '@/stores/userStore' + +/** + * 安全路由守卫 + * 提供路由级别的安全检查和访问控制 + */ + +/** + * 全局前置守卫 + * 在路由导航前执行安全检查 + * @param {Object} to - 目标路由对象 + * @param {Object} from - 来源路由对象 + * @param {Function} next - 导航函数 + */ +export const globalBeforeGuard = async (to, from, next) => { + // 记录路由导航事件 + logSecurityEvent('route_navigation', { + from: from.path, + to: to.path, + timestamp: new Date().toISOString() + }) + + // 检查路由是否需要认证 + if (to.meta.requiresAuth) { + const userStore = useUserStore() + + // 验证用户是否已登录 + if (!userStore.isAuthenticated) { + logSecurityEvent('unauthorized_access_attempt', { + path: to.path, + timestamp: new Date().toISOString() + }) + + ElMessage.error('请先登录后再访问此页面') + next('/login') + return + } + + // 验证会话是否有效 + try { + const isValid = await validateSession() + if (!isValid) { + logSecurityEvent('session_expired', { + path: to.path, + timestamp: new Date().toISOString() + }) + + ElMessage.error('登录已过期,请重新登录') + userStore.logout() + next('/login') + return + } + } catch (error) { + logSecurityEvent('session_validation_error', { + path: to.path, + error: error.message, + timestamp: new Date().toISOString() + }) + + ElMessage.error('会话验证失败,请重新登录') + userStore.logout() + next('/login') + return + } + } + + // 检查路由权限 + if (to.meta.roles && to.meta.roles.length > 0) { + const userStore = useUserStore() + + if (!userStore.hasAnyRole(to.meta.roles)) { + logSecurityEvent('insufficient_permissions', { + path: to.path, + requiredRoles: to.meta.roles, + userRoles: userStore.roles, + timestamp: new Date().toISOString() + }) + + ElMessage.error('您没有权限访问此页面') + next('/403') + return + } + } + + // 检查路由是否需要特定权限 + if (to.meta.permissions && to.meta.permissions.length > 0) { + const userStore = useUserStore() + + if (!userStore.hasAnyPermission(to.meta.permissions)) { + logSecurityEvent('insufficient_permissions', { + path: to.path, + requiredPermissions: to.meta.permissions, + userPermissions: userStore.permissions, + timestamp: new Date().toISOString() + }) + + ElMessage.error('您没有权限访问此页面') + next('/403') + return + } + } + + // 检查路由是否需要安全验证 + if (to.meta.requiresSecurityCheck) { + // 这里可以添加额外的安全检查逻辑 + // 例如:检查设备指纹、地理位置等 + + try { + // 示例:检查用户是否在允许的地理位置 + const isAllowedLocation = await checkUserLocation() + if (!isAllowedLocation) { + logSecurityEvent('location_blocked', { + path: to.path, + timestamp: new Date().toISOString() + }) + + ElMessage.error('您的当前位置不允许访问此页面') + next('/403') + return + } + } catch (error) { + logSecurityEvent('security_check_error', { + path: to.path, + error: error.message, + timestamp: new Date().toISOString() + }) + + ElMessage.error('安全验证失败,请稍后再试') + next(from.path) + return + } + } + + // 检查路由是否需要管理员权限 + if (to.meta.requiresAdmin) { + const userStore = useUserStore() + + if (!userStore.isAdmin) { + logSecurityEvent('admin_access_denied', { + path: to.path, + timestamp: new Date().toISOString() + }) + + ElMessage.error('需要管理员权限才能访问此页面') + next('/403') + return + } + } + + // 所有安全检查通过,继续导航 + next() +} + +/** + * 全局后置守卫 + * 在路由导航完成后执行安全日志记录 + * @param {Object} to - 目标路由对象 + * @param {Object} from - 来源路由对象 + */ +export const globalAfterGuard = (to, from) => { + // 记录成功导航事件 + logSecurityEvent('route_navigation_success', { + from: from.path, + to: to.path, + timestamp: new Date().toISOString() + }) + + // 更新页面访问统计 + updatePageAccessStats(to.path) +} + +/** + * 检查用户地理位置是否允许访问 + * @returns {Promise} 是否允许访问 + */ +const checkUserLocation = async () => { + // 这里可以实现地理位置检查逻辑 + // 例如:使用IP地理位置API或浏览器地理位置API + + try { + // 示例:使用浏览器地理位置API + return new Promise((resolve) => { + if (!navigator.geolocation) { + // 如果浏览器不支持地理位置API,默认允许访问 + resolve(true) + return + } + + navigator.geolocation.getCurrentPosition( + (position) => { + // 这里可以添加地理位置验证逻辑 + // 例如:检查是否在允许的国家/地区 + resolve(true) + }, + (error) => { + // 如果用户拒绝提供地理位置或获取失败,默认允许访问 + resolve(true) + } + ) + }) + } catch (error) { + // 如果发生错误,默认允许访问 + return true + } +} + +/** + * 更新页面访问统计 + * @param {string} path - 页面路径 + */ +const updatePageAccessStats = (path) => { + try { + // 获取当前访问统计 + const stats = JSON.parse(localStorage.getItem('pageAccessStats') || '{}') + + // 更新当前页面的访问次数 + if (!stats[path]) { + stats[path] = { + count: 0, + firstAccess: new Date().toISOString(), + lastAccess: new Date().toISOString() + } + } + + stats[path].count += 1 + stats[path].lastAccess = new Date().toISOString() + + // 保存更新后的统计 + localStorage.setItem('pageAccessStats', JSON.stringify(stats)) + } catch (error) { + console.error('Failed to update page access stats:', error) + } +} + +/** + * 获取页面访问统计 + * @returns {Object} 页面访问统计 + */ +export const getPageAccessStats = () => { + try { + return JSON.parse(localStorage.getItem('pageAccessStats') || '{}') + } catch (error) { + console.error('Failed to get page access stats:', error) + return {} + } +} + +/** + * 清除页面访问统计 + */ +export const clearPageAccessStats = () => { + try { + localStorage.removeItem('pageAccessStats') + } catch (error) { + console.error('Failed to clear page access stats:', error) + } +} + +/** + * 检查路由是否安全 + * @param {Object} route - 路由对象 + * @returns {boolean} 路由是否安全 + */ +export const isRouteSecure = (route) => { + // 检查路由是否使用HTTPS + if (process.env.NODE_ENV === 'production' && window.location.protocol !== 'https:') { + return false + } + + // 检查路由是否在允许的路径列表中 + const allowedPaths = [ + '/', + '/home', + '/login', + '/register', + '/forgot-password', + '/reset-password', + '/404', + '/403', + '/500' + ] + + // 如果路由在允许的路径列表中,则认为是安全的 + if (allowedPaths.includes(route.path)) { + return true + } + + // 检查路由是否符合安全模式 + const securePatterns = [ + /^\/products\/?$/, + /^\/products\/category\/[\w-]+\/?$/, + /^\/products\/[\w-]+\/?$/, + /^\/comparison\/?$/, + /^\/about\/?$/, + /^\/contact\/?$/, + /^\/privacy\/?$/, + /^\/terms\/?$/, + /^\/help\/?$/, + /^\/dashboard\/?$/, + /^\/profile\/?$/, + /^\/settings\/?$/ + ] + + return securePatterns.some(pattern => pattern.test(route.path)) +} + +/** + * 获取路由安全级别 + * @param {Object} route - 路由对象 + * @returns {string} 安全级别(low, medium, high) + */ +export const getRouteSecurityLevel = (route) => { + // 公开页面 - 低安全级别 + const lowSecurityRoutes = ['/', '/home', '/about', '/contact', '/privacy', '/terms', '/help'] + if (lowSecurityRoutes.includes(route.path)) { + return 'low' + } + + // 认证页面 - 中安全级别 + const mediumSecurityRoutes = ['/login', '/register', '/forgot-password', '/reset-password'] + if (mediumSecurityRoutes.includes(route.path)) { + return 'medium' + } + + // 用户页面 - 高安全级别 + const highSecurityRoutes = ['/dashboard', '/profile', '/settings'] + if (highSecurityRoutes.some(path => route.path.startsWith(path))) { + return 'high' + } + + // 管理员页面 - 最高安全级别 + if (route.path.startsWith('/admin')) { + return 'critical' + } + + // 默认安全级别 + return 'medium' +} + +export default { + globalBeforeGuard, + globalAfterGuard, + getPageAccessStats, + clearPageAccessStats, + isRouteSecure, + getRouteSecurityLevel +} \ No newline at end of file diff --git a/frontend/src/services/api.js b/frontend/src/services/api.js index d134ff77..a145d1fb 100644 --- a/frontend/src/services/api.js +++ b/frontend/src/services/api.js @@ -1,42 +1,112 @@ import axios from 'axios' import { ElMessage, ElNotification } from 'element-plus' import { useLoadingStore } from '../stores/loadingStore' +import { processApiResponse } from '@/utils/dataValidator' +import { getCache, setCache, updateCacheStats } from '@/utils/cacheManager' +import { addRetryInterceptor } from '@/utils/retryManager' +import monitor from '@/utils/monitor' +import { + initSecurityMiddleware, + secureRequestInterceptor, + secureResponseInterceptor, + logSecurityEvent +} from '../middleware/security' // 创建axios实例 const api = axios.create({ - baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:5172/api', - timeout: 10000, + baseURL: import.meta.env.VITE_API_BASE_URL || 'https://localhost:7001/api', + timeout: 15000, headers: { 'Content-Type': 'application/json' } }) +// 初始化安全中间件 +initSecurityMiddleware(api) + +// 添加重试拦截器 +addRetryInterceptor(api, { + maxRetries: 2, + retryDelay: 1000, + operation: 'API请求' +}) + // 重试配置 const maxRetry = 2 const retryDelay = 1000 +// 请求取消控制器存储 +const pendingRequests = new Map() + +// 生成请求的唯一键 +const generateRequestKey = (config) => { + const { method, url, params, data } = config + return [method, url, JSON.stringify(params), JSON.stringify(data)].join('&') +} + +// 取消重复请求 +const cancelPendingRequest = (config) => { + const requestKey = generateRequestKey(config) + if (pendingRequests.has(requestKey)) { + const cancel = pendingRequests.get(requestKey) + cancel('取消重复请求') + pendingRequests.delete(requestKey) + } +} + // 请求拦截器 api.interceptors.request.use( config => { + // 记录请求开始时间 + config.requestStartTime = Date.now() + + // 应用安全中间件 + const secureConfig = secureRequestInterceptor(config) + + // 取消重复请求 + cancelPendingRequest(secureConfig) + + // 创建取消令牌 + const controller = new AbortController() + secureConfig.signal = controller.signal + + // 存储取消函数 + const requestKey = generateRequestKey(secureConfig) + pendingRequests.set(requestKey, () => controller.abort()) + + // 检查缓存(仅对GET请求) + if (secureConfig.method?.toLowerCase() === 'get') { + const cachedData = getCache(secureConfig.url, secureConfig.params) + + if (cachedData) { + updateCacheStats(true) + // 标记请求为缓存命中,这样响应拦截器可以识别并直接返回缓存 + secureConfig.fromCache = true + secureConfig.cachedData = cachedData + } else { + updateCacheStats(false) + } + } + // 添加请求时间戳,防止缓存 - if (config.method === 'get') { - config.params = { - ...config.params, + if (secureConfig.method === 'get') { + secureConfig.params = { + ...secureConfig.params, _t: Date.now() } } // 添加请求ID用于跟踪 - config.metadata = { startTime: new Date() } + secureConfig.metadata = { startTime: new Date() } // 显示全局加载状态(仅对非静默请求) - if (!config.silent) { + if (!secureConfig.silent) { const loadingStore = useLoadingStore() - loadingStore.showLoading(config.loadingText || '加载中...') + loadingStore.showLoading(secureConfig.loadingText || '加载中...') } // 在发送请求之前做些什么 - return config + return secureConfig }, error => { // 对请求错误做些什么 @@ -48,22 +118,104 @@ api.interceptors.request.use( // 响应拦截器 api.interceptors.response.use( response => { + // 计算请求耗时 + const requestTime = Date.now() - response.config.requestStartTime + + // 应用安全中间件 + const secureResponse = secureResponseInterceptor(response) + + // 记录API请求性能 + monitor.logApiRequest({ + url: response.config.url, + method: response.config.method, + status: response.status, + duration: requestTime, + success: true + }) + + // 请求完成后,从pendingRequests中移除 + const requestKey = generateRequestKey(response.config) + pendingRequests.delete(requestKey) + // 隐藏全局加载状态(仅对非静默请求) if (!response.config.silent) { const loadingStore = useLoadingStore() loadingStore.hideLoading() } - // 对响应数据做点什么 - return response.data + // 如果是缓存命中的请求,直接返回缓存数据 + if (response.config.fromCache) { + return { + ...response, + data: response.config.cachedData, + fromCache: true + } + } + + // 处理API响应数据 + const processedResponse = processApiResponse(secureResponse.data, response.config.dataType) + + if (!processedResponse.success) { + // 如果验证失败,抛出错误 + const error = new Error(processedResponse.error || '数据验证失败') + error.isValidationError = true + return Promise.reject(error) + } + + // 缓存GET请求的响应(仅对成功响应) + if (response.config.method?.toLowerCase() === 'get' && processedResponse.data) { + setCache(response.config.url, response.config.params, processedResponse.data) + } + + // 返回处理后的数据 + return { + ...response, + data: processedResponse.data, + fromCache: false + } }, async error => { + // 计算请求耗时 + const requestTime = error.config ? Date.now() - error.config.requestStartTime : 0 + + // 记录API请求错误 + if (error.config) { + monitor.logApiRequest({ + url: error.config.url, + method: error.config.method, + status: error.response?.status || 0, + duration: requestTime, + success: false, + error: error.message + }) + } + + // 记录错误 + monitor.logError(error, { + type: 'api_error', + url: error.config?.url, + method: error.config?.method, + status: error.response?.status + }) + + // 请求失败后,从pendingRequests中移除 + if (error.config) { + const requestKey = generateRequestKey(error.config) + pendingRequests.delete(requestKey) + } + // 隐藏全局加载状态(仅对非静默请求) if (!error.config?.silent) { const loadingStore = useLoadingStore() loadingStore.hideLoading() } + // 如果是取消的请求,直接返回 + if (axios.isCancel(error)) { + console.log('请求被取消:', error.message) + return Promise.reject(error) + } + const originalRequest = error.config // 如果配置了不重试或者已经重试过,直接处理错误 @@ -94,69 +246,68 @@ api.interceptors.response.use( ) // 错误处理函数 -function handleError(error) { +const handleError = (error) => { if (error.response) { - // 服务器返回了错误状态码 const { status, data } = error.response switch (status) { case 400: - ElMessage.error(`请求参数错误: ${data.message || '请检查输入参数'}`) + ElMessage.error(data?.message || '请求参数错误,请检查输入') break case 401: - ElMessage.error(`未授权访问: ${data.message || '请先登录'}`) + ElMessage.error('登录已过期,请重新登录') + // 可以在这里添加跳转到登录页的逻辑 break case 403: - ElMessage.error(`禁止访问: ${data.message || '权限不足'}`) + ElMessage.error('没有权限访问此资源') break case 404: - ElMessage.error(`资源未找到: ${data.message || '请求的资源不存在'}`) - break - case 422: - // 处理验证错误 - if (data.errors && typeof data.errors === 'object') { - const errorMessages = Object.values(data.errors).flat() - ElMessage.error(`验证失败: ${errorMessages.join(', ')}`) - } else { - ElMessage.error(`验证失败: ${data.message || '输入数据不符合要求'}`) - } + ElMessage.error('请求的资源不存在') break case 429: - ElMessage.error(`请求过于频繁: ${data.message || '请稍后再试'}`) + ElMessage.error('请求过于频繁,请稍后再试') break case 500: - ElNotification({ - title: '服务器错误', - message: data.message || '服务器出现问题,请稍后再试', - type: 'error', - duration: 5000 - }) + ElMessage.error('服务器内部错误,请稍后重试') break case 502: + ElMessage.error('网关错误,请稍后重试') + break case 503: - case 504: - ElNotification({ - title: '服务不可用', - message: '服务器暂时无法响应,请稍后再试', - type: 'warning', - duration: 5000 - }) + ElMessage.error('服务暂时不可用,请稍后重试') break default: - ElMessage.error(`未知错误: ${data.message || '发生未知错误,请联系管理员'}`) + ElMessage.error(`请求失败,错误码: ${status}`) } } else if (error.request) { - // 请求已发出,但没有收到响应 - ElNotification({ - title: '网络错误', - message: '无法连接到服务器,请检查网络连接', - type: 'error', - duration: 5000 - }) + // 请求已发出但没有收到响应 + ElMessage.error('网络连接失败,请检查网络设置') } else { - // 在设置请求时发生了错误 - ElMessage.error(`请求配置错误: ${error.message}`) + // 其他错误 + ElMessage.error(error.message || '未知错误,请稍后重试') } } +// 导出API实例和辅助函数 +export { api } + +// 导出请求取消相关函数 +export const cancelAllRequests = () => { + pendingRequests.forEach((cancel) => { + cancel('取消所有请求') + }) + pendingRequests.clear() +} + +export const getRequestCount = () => { + return pendingRequests.size +} + +export const createCancelToken = () => { + return new AbortController() +} + +// 导出缓存管理函数 +export { clearCache, getCacheStats } from '@/utils/cacheManager' + export default api \ No newline at end of file diff --git a/frontend/src/services/categoryService.js b/frontend/src/services/categoryService.js index 0e495f4d..a7316a19 100644 --- a/frontend/src/services/categoryService.js +++ b/frontend/src/services/categoryService.js @@ -1,13 +1,19 @@ -import api from './api' +import { api, createCancelToken } from './api' export const categoryService = { // 获取所有类别 - getAll() { - return api.get('/categories') + async getAll() { + return await api.get('/api/categories', { + signal: createCancelToken().signal, + dataType: 'category' + }) }, // 根据ID获取类别详情 - getById(id) { - return api.get(`/categories/${id}`) + async getById(id) { + return await api.get(`/api/categories/${id}`, { + signal: createCancelToken().signal, + dataType: 'category' + }) } } \ No newline at end of file diff --git a/frontend/src/services/comparisonService.js b/frontend/src/services/comparisonService.js index 2d94ea8e..8b8bbea3 100644 --- a/frontend/src/services/comparisonService.js +++ b/frontend/src/services/comparisonService.js @@ -1,8 +1,11 @@ -import api from './api' +import { api, createCancelToken } from './api' export const comparisonService = { // 对比产品 - compare(productIds) { - return api.post('/comparison', { productIds }) + async compare(productIds) { + return await api.post('/api/comparison', productIds, { + signal: createCancelToken().signal, + dataType: 'comparison' + }) } } \ No newline at end of file diff --git a/frontend/src/services/productService.js b/frontend/src/services/productService.js index bc79494a..bc065c59 100644 --- a/frontend/src/services/productService.js +++ b/frontend/src/services/productService.js @@ -1,18 +1,29 @@ -import api from './api' +import { api, createCancelToken } from './api' export const productService = { - // 获取产品列表(支持分页和筛选) - getAll(params = {}) { - return api.get('/products', { params }) + // 获取产品列表 + async getAll(params = {}) { + return await api.get('/api/products', { + params, + signal: createCancelToken().signal, + dataType: 'product' + }) }, // 根据ID获取产品详情 - getById(id) { - return api.get(`/products/${id}`) + async getById(id) { + return await api.get(`/api/products/${id}`, { + signal: createCancelToken().signal, + dataType: 'product' + }) }, // 搜索产品 - search(params = {}) { - return api.get('/products/search', { params }) + async search(params = {}) { + return await api.get('/api/products/search', { + params, + signal: createCancelToken().signal, + dataType: 'product' + }) } } \ No newline at end of file diff --git a/frontend/src/stores/categoryStore.js b/frontend/src/stores/categoryStore.js index 51bdfb60..a51d9c42 100644 --- a/frontend/src/stores/categoryStore.js +++ b/frontend/src/stores/categoryStore.js @@ -1,5 +1,7 @@ import { defineStore } from 'pinia' import { categoryService } from '../services/categoryService' +import { ElMessage } from 'element-plus' +import { createPersistPlugin, presetConfigs } from '../utils/piniaPersist' export const useCategoryStore = defineStore('category', { state: () => ({ @@ -8,31 +10,115 @@ export const useCategoryStore = defineStore('category', { error: null }), + getters: { + // 获取所有类别 + allCategories: (state) => state.categories, + + // 根据ID获取类别 + getCategoryById: (state) => (id) => { + return state.categories.find(category => category.id === id) + }, + + // 检查是否正在加载 + isLoading: (state) => state.loading, + + // 获取错误信息 + errorMessage: (state) => state.error + }, + actions: { + // 获取所有类别 async fetchCategories() { this.loading = true this.error = null try { const response = await categoryService.getAll() - this.categories = response + + // 数据转换和验证 + if (response && response.success && Array.isArray(response.data)) { + this.categories = response.data.map(category => ({ + id: category.id, + name: category.name || '未知类别', + description: category.description || '', + productCount: category.productCount || 0 + })) + } else { + // 处理不规范的响应格式 + console.warn('API响应格式不符合预期:', response) + this.categories = Array.isArray(response) ? response : [] + this.error = '数据格式异常' + } } catch (error) { - this.error = error.message console.error('获取类别列表失败:', error) + this.error = error.message || '获取类别列表失败' + ElMessage.error(this.error) } finally { this.loading = false } }, + // 根据ID获取类别详情 async getCategoryById(id) { + // 先检查本地是否已有该类别数据 + const existingCategory = this.categories.find(category => category.id === id) + if (existingCategory) { + return existingCategory + } + + this.loading = true + this.error = null + try { const response = await categoryService.getById(id) - return response + + // 数据转换和验证 + if (response && response.success && response.data) { + const category = { + id: response.data.id, + name: response.data.name || '未知类别', + description: response.data.description || '', + productCount: response.data.productCount || 0 + } + + // 将新获取的类别添加到本地状态 + this.categories.push(category) + return category + } else { + throw new Error('获取类别详情失败:响应数据格式不正确') + } } catch (error) { - this.error = error.message - console.error('获取类别详情失败:', error) - return null + console.error(`获取类别详情失败 (ID: ${id}):`, error) + this.error = error.message || '获取类别详情失败' + ElMessage.error(this.error) + throw error + } finally { + this.loading = false } + }, + + // 清除错误状态 + clearError() { + this.error = null + }, + + // 重置状态 + resetState() { + this.categories = [] + this.loading = false + this.error = null + } + }, + + // 添加持久化配置 + persist: { + ...presetConfigs.tempData, + paths: ['categories'], // 只持久化类别数据,不持久化loading和error状态 + beforeRestore: ({ store }) => { + console.log('正在恢复categoryStore状态...') + }, + afterRestore: ({ store }) => { + console.log('categoryStore状态恢复完成') } } }) \ No newline at end of file diff --git a/frontend/src/stores/comparisonStore.js b/frontend/src/stores/comparisonStore.js index 717e0141..68d6c426 100644 --- a/frontend/src/stores/comparisonStore.js +++ b/frontend/src/stores/comparisonStore.js @@ -1,5 +1,7 @@ import { defineStore } from 'pinia' import { comparisonService } from '../services/comparisonService' +import { ElMessage } from 'element-plus' +import { createPersistPlugin, presetConfigs } from '../utils/piniaPersist' export const useComparisonStore = defineStore('comparison', { state: () => ({ @@ -10,41 +12,96 @@ export const useComparisonStore = defineStore('comparison', { }), getters: { + // 检查是否可以进行对比 canCompare: (state) => state.selectedProducts.length >= 2 && state.selectedProducts.length <= 4, - maxProductsReached: (state) => state.selectedProducts.length >= 4 + + // 检查是否已达到最大产品数量 + maxProductsReached: (state) => state.selectedProducts.length >= 4, + + // 获取已选择的产品数量 + selectedCount: (state) => state.selectedProducts.length, + + // 获取错误信息 + errorMessage: (state) => state.error, + + // 检查是否正在加载 + isLoading: (state) => state.loading, + + // 获取对比结果 + comparisonData: (state) => state.comparisonResult }, actions: { + // 添加产品到对比列表 addProduct(product) { + // 验证产品数据 + if (!product || !product.id) { + this.error = '无效的产品数据' + ElMessage.error(this.error) + return false + } + if (this.selectedProducts.length >= 4) { this.error = '最多只能选择4个产品进行对比' + ElMessage.warning(this.error) return false } // 检查产品是否已经在对比列表中 const exists = this.selectedProducts.some(p => p.id === product.id) if (!exists) { - this.selectedProducts.push(product) + // 确保产品数据结构完整 + const normalizedProduct = { + id: product.id, + name: product.name || '未知产品', + model: product.model || '', + manufacturer: product.manufacturer || '未知制造商', + performanceScore: product.performanceScore || 0, + currentRank: product.currentRank || 0, + categoryId: product.categoryId, + specifications: Array.isArray(product.specifications) ? product.specifications : [], + price: product.price || 0 + } + + this.selectedProducts.push(normalizedProduct) + ElMessage.success(`已添加 ${normalizedProduct.name} 到对比列表`) + return true + } else { + ElMessage.info('该产品已在对比列表中') + return false + } + }, + + // 从对比列表中移除产品 + removeProduct(productId) { + if (!productId) { + this.error = '无效的产品ID' + return false + } + + const index = this.selectedProducts.findIndex(p => p.id === productId) + if (index !== -1) { + const removedProduct = this.selectedProducts[index] + this.selectedProducts.splice(index, 1) + ElMessage.success(`已移除 ${removedProduct.name}`) return true } return false }, - removeProduct(productId) { - const index = this.selectedProducts.findIndex(p => p.id === productId) - if (index !== -1) { - this.selectedProducts.splice(index, 1) - } - }, - + // 清空对比选择 clearSelection() { this.selectedProducts = [] this.comparisonResult = null + this.error = null + ElMessage.info('已清空对比列表') }, + // 执行产品对比 async compareProducts() { if (!this.canCompare) { this.error = '请选择2-4个产品进行对比' + ElMessage.warning(this.error) return null } @@ -54,15 +111,64 @@ export const useComparisonStore = defineStore('comparison', { try { const productIds = this.selectedProducts.map(p => p.id) const response = await comparisonService.compare(productIds) - this.comparisonResult = response.data - return response.data + + // 数据转换和验证 + if (response && response.success && response.data) { + // 确保对比结果数据结构完整 + this.comparisonResult = { + products: Array.isArray(response.data.products) ? response.data.products.map(product => ({ + id: product.id, + name: product.name || '未知产品', + model: product.model || '', + manufacturer: product.manufacturer || '未知制造商', + performanceScore: product.performanceScore || 0, + currentRank: product.currentRank || 0, + specifications: Array.isArray(product.specifications) ? product.specifications : [], + price: product.price || 0 + })) : [], + comparisonMatrix: response.data.comparisonMatrix || {}, + bestValues: response.data.bestValues || {}, + worstValues: response.data.worstValues || {} + } + + ElMessage.success('产品对比完成') + return this.comparisonResult + } else { + throw new Error('产品对比失败:响应数据格式不正确') + } } catch (error) { - this.error = error.message console.error('产品对比失败:', error) + this.error = error.message || '产品对比失败' + ElMessage.error(this.error) return null } finally { this.loading = false } + }, + + // 清除错误状态 + clearError() { + this.error = null + }, + + // 重置状态 + resetState() { + this.selectedProducts = [] + this.comparisonResult = null + this.loading = false + this.error = null + } + }, + + // 添加持久化配置 + persist: { + ...presetConfigs.tempData, + paths: ['selectedProducts'], // 只持久化已选择的产品列表,不持久化对比结果和loading/error状态 + beforeRestore: ({ store }) => { + console.log('正在恢复comparisonStore状态...') + }, + afterRestore: ({ store }) => { + console.log('comparisonStore状态恢复完成') } } }) \ No newline at end of file diff --git a/frontend/src/stores/productStore.js b/frontend/src/stores/productStore.js index 515c4933..cd4bbf62 100644 --- a/frontend/src/stores/productStore.js +++ b/frontend/src/stores/productStore.js @@ -1,5 +1,7 @@ import { defineStore } from 'pinia' import { productService } from '../services/productService' +import { ElMessage } from 'element-plus' +import { createPersistPlugin, presetConfigs } from '../utils/piniaPersist' export const useProductStore = defineStore('product', { state: () => ({ @@ -24,7 +26,41 @@ export const useProductStore = defineStore('product', { error: null }), + getters: { + // 获取所有产品 + allProducts: (state) => state.products, + + // 获取当前页产品 + currentPageProducts: (state) => { + const start = (state.pagination.currentPage - 1) * state.pagination.pageSize + const end = start + state.pagination.pageSize + return state.products.slice(start, end) + }, + + // 获取分页信息 + paginationInfo: (state) => state.pagination, + + // 获取筛选条件 + currentFilters: (state) => state.filters, + + // 获取排序条件 + currentSorting: (state) => ({ + sortBy: state.sortBy, + sortOrder: state.sortOrder + }), + + // 检查是否正在加载 + isLoading: (state) => state.loading, + + // 获取错误信息 + errorMessage: (state) => state.error, + + // 获取产品详情 + productDetailData: (state) => state.productDetail + }, + actions: { + // 获取产品列表 async fetchProducts() { this.loading = true this.error = null @@ -44,45 +80,106 @@ export const useProductStore = defineStore('product', { if (this.filters.year) params.year = this.filters.year const response = await productService.getAll(params) - this.products = response.data.items - this.pagination.total = response.data.total - this.pagination.currentPage = response.data.currentPage + + // 数据转换和验证 + if (response && response.success && response.data) { + // 确保分页数据结构正确 + this.pagination.total = response.data.total || 0 + this.pagination.currentPage = response.data.currentPage || 1 + + // 转换产品数据 + this.products = Array.isArray(response.data.items) ? response.data.items.map(product => ({ + id: product.id, + name: product.name || '未知产品', + model: product.model || '', + manufacturer: product.manufacturer || '未知制造商', + releaseDate: product.releaseDate || '', + currentRank: product.currentRank || 0, + imageUrl: product.imageUrl || '', + categoryId: product.categoryId, + performanceScore: product.performanceScore || 0, + specifications: product.specifications || [], + price: product.price || 0 + })) : [] + } else { + console.warn('API响应格式不符合预期:', response) + this.products = [] + this.error = '数据格式异常' + } } catch (error) { - this.error = error.message console.error('获取产品列表失败:', error) + this.error = error.message || '获取产品列表失败' + ElMessage.error(this.error) } finally { this.loading = false } }, + // 获取产品详情 async fetchProductById(id) { this.loading = true this.error = null try { const response = await productService.getById(id) - this.productDetail = response.data - return response.data + + // 数据转换和验证 + if (response && response.success && response.data) { + this.productDetail = { + id: response.data.id, + name: response.data.name || '未知产品', + model: response.data.model || '', + manufacturer: response.data.manufacturer || '未知制造商', + releaseDate: response.data.releaseDate || '', + currentRank: response.data.currentRank || 0, + imageUrl: response.data.imageUrl || '', + categoryId: response.data.categoryId, + performanceScore: response.data.performanceScore || 0, + specifications: Array.isArray(response.data.specifications) ? response.data.specifications : [], + price: response.data.price || 0 + } + return this.productDetail + } else { + throw new Error('获取产品详情失败:响应数据格式不正确') + } } catch (error) { - this.error = error.message console.error('获取产品详情失败:', error) + this.error = error.message || '获取产品详情失败' + ElMessage.error(this.error) return null } finally { this.loading = false } }, + // 直接获取产品信息,不更新store状态 async getProductById(id) { - // 直接调用API获取产品信息,不更新store状态 try { const response = await productService.getById(id) - return response.data + + if (response && response.success && response.data) { + return { + id: response.data.id, + name: response.data.name || '未知产品', + model: response.data.model || '', + manufacturer: response.data.manufacturer || '未知制造商', + releaseDate: response.data.releaseDate || '', + currentRank: response.data.currentRank || 0, + imageUrl: response.data.imageUrl || '', + categoryId: response.data.categoryId, + performanceScore: response.data.performanceScore || 0, + specifications: Array.isArray(response.data.specifications) ? response.data.specifications : [], + price: response.data.price || 0 + } + } + return null } catch (error) { console.error('获取产品详情失败:', error) return null } }, + // 搜索产品 async searchProducts(query) { this.loading = true this.error = null @@ -92,36 +189,61 @@ export const useProductStore = defineStore('product', { if (this.filters.categoryId) params.categoryId = this.filters.categoryId const response = await productService.search(params) - return response.data + + // 数据转换和验证 + if (response && response.success && Array.isArray(response.data)) { + return response.data.map(product => ({ + id: product.id, + name: product.name || '未知产品', + model: product.model || '', + manufacturer: product.manufacturer || '未知制造商', + releaseDate: product.releaseDate || '', + currentRank: product.currentRank || 0, + imageUrl: product.imageUrl || '', + categoryId: product.categoryId, + performanceScore: product.performanceScore || 0, + specifications: product.specifications || [], + price: product.price || 0 + })) + } else { + console.warn('搜索API响应格式不符合预期:', response) + return [] + } } catch (error) { - this.error = error.message console.error('搜索产品失败:', error) + this.error = error.message || '搜索产品失败' + ElMessage.error(this.error) return [] } finally { this.loading = false } }, + // 设置筛选条件 setFilters(filters) { this.filters = { ...this.filters, ...filters } this.pagination.currentPage = 1 // 重置到第一页 }, + // 设置排序条件 setSorting(sortBy, sortOrder) { this.sortBy = sortBy this.sortOrder = sortOrder this.pagination.currentPage = 1 // 重置到第一页 }, + // 设置当前页 setPage(page) { this.pagination.currentPage = page }, + // 设置每页数量 setPageSize(pageSize) { this.pagination.pageSize = pageSize this.pagination.currentPage = 1 // 重置到第一页 }, + // 重置筛选条件 resetFilters() { this.filters = { categoryId: null, @@ -131,6 +253,46 @@ export const useProductStore = defineStore('product', { year: null } this.pagination.currentPage = 1 + }, + + // 清除错误状态 + clearError() { + this.error = null + }, + + // 重置状态 + resetState() { + this.products = [] + this.productDetail = null + this.pagination = { + currentPage: 1, + pageSize: 20, + total: 0 + } + this.filters = { + categoryId: null, + manufacturer: '', + minScore: null, + maxScore: null, + year: null + } + this.sortBy = 'performanceScore' + this.sortOrder = 'desc' + this.searchQuery = '' + this.loading = false + this.error = null + } + }, + + // 添加持久化配置 + persist: { + ...presetConfigs.tempData, + paths: ['filters', 'sortBy', 'sortOrder', 'pagination.pageSize'], // 持久化筛选条件、排序和每页数量设置 + beforeRestore: ({ store }) => { + console.log('正在恢复productStore状态...') + }, + afterRestore: ({ store }) => { + console.log('productStore状态恢复完成') } } }) \ No newline at end of file diff --git a/frontend/src/utils/auth.js b/frontend/src/utils/auth.js new file mode 100644 index 00000000..7c13a5b6 --- /dev/null +++ b/frontend/src/utils/auth.js @@ -0,0 +1,164 @@ +/** + * 认证工具 + * 用于管理用户token和认证状态 + */ + +const TOKEN_KEY = 'performance_ranking_token' +const REFRESH_TOKEN_KEY = 'performance_ranking_refresh_token' +const USER_INFO_KEY = 'performance_ranking_user_info' + +/** + * 获取token + */ +export function getToken() { + return localStorage.getItem(TOKEN_KEY) +} + +/** + * 设置token + * @param {string} token - 访问令牌 + */ +export function setToken(token) { + localStorage.setItem(TOKEN_KEY, token) +} + +/** + * 获取刷新token + */ +export function getRefreshToken() { + return localStorage.getItem(REFRESH_TOKEN_KEY) +} + +/** + * 设置刷新token + * @param {string} refreshToken - 刷新令牌 + */ +export function setRefreshToken(refreshToken) { + localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken) +} + +/** + * 移除token + */ +export function removeToken() { + localStorage.removeItem(TOKEN_KEY) + localStorage.removeItem(REFRESH_TOKEN_KEY) + localStorage.removeItem(USER_INFO_KEY) +} + +/** + * 获取用户信息 + */ +export function getUserInfo() { + const userInfo = localStorage.getItem(USER_INFO_KEY) + return userInfo ? JSON.parse(userInfo) : null +} + +/** + * 设置用户信息 + * @param {Object} userInfo - 用户信息 + */ +export function setUserInfo(userInfo) { + localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo)) +} + +/** + * 检查是否已登录 + */ +export function isLoggedIn() { + return !!getToken() +} + +/** + * 检查token是否即将过期 + * @param {number} threshold - 阈值(秒),默认5分钟 + */ +export function isTokenExpiringSoon(threshold = 300) { + const token = getToken() + if (!token) return true + + try { + // 解析JWT token + const payload = JSON.parse(atob(token.split('.')[1])) + const now = Math.floor(Date.now() / 1000) + const expirationTime = payload.exp + + // 如果没有过期时间或已过期,返回true + if (!expirationTime || expirationTime <= now) { + return true + } + + // 检查是否在阈值范围内 + return (expirationTime - now) <= threshold + } catch (error) { + console.error('解析token失败:', error) + return true + } +} + +/** + * 刷新token + * @param {Function} refreshCallback - 刷新token的回调函数 + */ +export async function refreshToken(refreshCallback) { + const refreshToken = getRefreshToken() + if (!refreshToken) { + throw new Error('没有刷新token') + } + + try { + const response = await refreshCallback(refreshToken) + const { token, refreshToken: newRefreshToken } = response + + // 更新token + setToken(token) + if (newRefreshToken) { + setRefreshToken(newRefreshToken) + } + + return token + } catch (error) { + // 刷新失败,清除所有认证信息 + removeToken() + throw error + } +} + +/** + * 登出 + */ +export function logout() { + removeToken() + // 可以在这里添加其他登出逻辑,如清除缓存等 +} + +/** + * 初始化认证状态 + * @param {Function} onTokenExpired - token过期回调 + */ +export function initAuth(onTokenExpired) { + // 检查token是否过期 + if (isLoggedIn() && isTokenExpiringSoon()) { + if (onTokenExpired && typeof onTokenExpired === 'function') { + onTokenExpired() + } else { + // 默认行为:移除token + removeToken() + } + } +} + +export default { + getToken, + setToken, + getRefreshToken, + setRefreshToken, + removeToken, + getUserInfo, + setUserInfo, + isLoggedIn, + isTokenExpiringSoon, + refreshToken, + logout, + initAuth +} \ No newline at end of file diff --git a/frontend/src/utils/cacheManager.js b/frontend/src/utils/cacheManager.js new file mode 100644 index 00000000..07b8eaea --- /dev/null +++ b/frontend/src/utils/cacheManager.js @@ -0,0 +1,217 @@ +/** + * API请求缓存管理 + * 用于缓存API响应,减少重复请求 + */ + +// 缓存存储 +const cache = new Map() + +// 默认缓存配置 +const defaultConfig = { + // 默认缓存时间(毫秒) + defaultTTL: 5 * 60 * 1000, // 5分钟 + + // 最大缓存条目数 + maxEntries: 100, + + // 不同API端点的特定缓存时间 + endpointTTL: { + '/api/categories': 10 * 60 * 1000, // 10分钟 + '/api/products': 3 * 60 * 1000, // 3分钟 + '/api/products/search': 0, // 不缓存搜索结果 + '/api/comparison': 0 // 不缓存对比结果 + } +} + +/** + * 生成缓存键 + * @param {string} url - 请求URL + * @param {Object} params - 请求参数 + * @returns {string} 缓存键 + */ +function generateCacheKey(url, params = {}) { + // 将参数对象转换为排序后的字符串 + const sortedParams = Object.keys(params) + .sort() + .reduce((result, key) => { + if (params[key] !== undefined && params[key] !== null) { + result[key] = params[key] + } + return result + }, {}) + + const paramsStr = JSON.stringify(sortedParams) + return `${url}?${paramsStr}` +} + +/** + * 清理过期的缓存条目 + */ +function cleanExpiredEntries() { + const now = Date.now() + for (const [key, entry] of cache.entries()) { + if (entry.expiryTime < now) { + cache.delete(key) + } + } +} + +/** + * 清理最旧的缓存条目(当缓存超过最大条目数时) + */ +function cleanOldestEntries() { + if (cache.size <= defaultConfig.maxEntries) { + return + } + + // 按创建时间排序,删除最旧的条目 + const sortedEntries = Array.from(cache.entries()) + .sort((a, b) => a[1].createTime - b[1].createTime) + + const entriesToDelete = sortedEntries.slice(0, sortedEntries.length - defaultConfig.maxEntries) + entriesToDelete.forEach(([key]) => cache.delete(key)) +} + +/** + * 获取特定端点的缓存时间 + * @param {string} url - 请求URL + * @returns {number} 缓存时间(毫秒) + */ +function getEndpointTTL(url) { + // 检查是否完全匹配 + if (defaultConfig.endpointTTL[url] !== undefined) { + return defaultConfig.endpointTTL[url] + } + + // 检查是否匹配前缀 + for (const [endpoint, ttl] of Object.entries(defaultConfig.endpointTTL)) { + if (url.startsWith(endpoint)) { + return ttl + } + } + + // 返回默认缓存时间 + return defaultConfig.defaultTTL +} + +/** + * 缓存API响应 + * @param {string} url - 请求URL + * @param {Object} params - 请求参数 + * @param {any} data - 响应数据 + * @param {number} [customTTL] - 自定义缓存时间(可选) + */ +export function setCache(url, params, data, customTTL) { + const cacheKey = generateCacheKey(url, params) + const ttl = customTTL !== undefined ? customTTL : getEndpointTTL(url) + + // 如果TTL为0,不缓存 + if (ttl <= 0) { + return + } + + // 清理过期条目 + cleanExpiredEntries() + + // 清理最旧条目(如果需要) + cleanOldestEntries() + + const now = Date.now() + cache.set(cacheKey, { + data, + createTime: now, + expiryTime: now + ttl + }) +} + +/** + * 获取缓存的响应 + * @param {string} url - 请求URL + * @param {Object} params - 请求参数 + * @returns {any|null} 缓存的数据,如果不存在或已过期则返回null + */ +export function getCache(url, params) { + const cacheKey = generateCacheKey(url, params) + const entry = cache.get(cacheKey) + + // 如果缓存不存在,返回null + if (!entry) { + return null + } + + // 检查是否过期 + const now = Date.now() + if (entry.expiryTime < now) { + cache.delete(cacheKey) + return null + } + + return entry.data +} + +/** + * 清除特定URL的缓存 + * @param {string} url - 请求URL(可选) + * @param {Object} params - 请求参数(可选) + */ +export function clearCache(url, params) { + // 如果没有提供URL,清除所有缓存 + if (!url) { + cache.clear() + return + } + + // 如果提供了URL和参数,清除特定缓存 + if (params) { + const cacheKey = generateCacheKey(url, params) + cache.delete(cacheKey) + return + } + + // 如果只提供了URL,清除该URL的所有缓存 + const keysToDelete = [] + for (const key of cache.keys()) { + if (key.startsWith(`${url}?`)) { + keysToDelete.push(key) + } + } + keysToDelete.forEach(key => cache.delete(key)) +} + +/** + * 获取缓存统计信息 + * @returns {Object} 缓存统计 + */ +export function getCacheStats() { + const now = Date.now() + let expiredCount = 0 + + for (const entry of cache.values()) { + if (entry.expiryTime < now) { + expiredCount++ + } + } + + return { + totalEntries: cache.size, + expiredEntries: expiredCount, + maxEntries: defaultConfig.maxEntries, + hitRate: window._cacheHits / (window._cacheHits + window._cacheMisses) || 0 + } +} + +// 初始化缓存统计 +window._cacheHits = 0 +window._cacheMisses = 0 + +/** + * 更新缓存统计 + * @param {boolean} isHit - 是否命中缓存 + */ +export function updateCacheStats(isHit) { + if (isHit) { + window._cacheHits++ + } else { + window._cacheMisses++ + } +} \ No newline at end of file diff --git a/frontend/src/utils/componentCache.js b/frontend/src/utils/componentCache.js new file mode 100644 index 00000000..4ad97ceb --- /dev/null +++ b/frontend/src/utils/componentCache.js @@ -0,0 +1,371 @@ +/** + * 组件缓存工具 + * 提供组件级别的缓存功能,支持动态组件缓存、缓存策略配置等 + */ + +// 缓存策略枚举 +export const CacheStrategy = { + // 永久缓存,直到手动清除 + FOREVER: 'forever', + // 基于时间的缓存,过期后自动清除 + TIME_BASED: 'time-based', + // 基于使用频率的缓存,LRU算法 + FREQUENCY_BASED: 'frequency-based', + // 基于内存压力的缓存,内存不足时自动清除 + MEMORY_PRESSURE: 'memory-pressure' +} + +// 默认配置 +const defaultConfig = { + // 默认缓存策略 + strategy: CacheStrategy.TIME_BASED, + // 默认缓存时间(毫秒) + defaultExpire: 5 * 60 * 1000, // 5分钟 + // 最大缓存数量 + maxCacheSize: 50, + // 内存阈值(字节),超过此值时清除缓存 + memoryThreshold: 50 * 1024 * 1024, // 50MB + // 键名前缀 + prefix: 'comp_cache_', + // 错误处理函数 + onError: (error) => console.error('Component cache error:', error) +} + +/** + * 组件缓存管理器 + */ +class ComponentCacheManager { + constructor(config = {}) { + this.config = { ...defaultConfig, ...config } + this.cache = new Map() + this.accessTimes = new Map() // 记录访问时间,用于LRU算法 + this.accessCounts = new Map() // 记录访问次数,用于频率统计 + this.initMemoryMonitor() + } + + /** + * 初始化内存监控 + */ + initMemoryMonitor() { + if (typeof window === 'undefined' || !window.performance || !window.performance.memory) { + console.warn('Memory monitoring not supported') + return + } + + // 定期检查内存使用情况 + this.memoryCheckInterval = setInterval(() => { + this.checkMemoryPressure() + }, 30000) // 每30秒检查一次 + } + + /** + * 检查内存压力 + */ + checkMemoryPressure() { + if (!window.performance || !window.performance.memory) return + + const memoryInfo = window.performance.memory + const usedMemory = memoryInfo.usedJSHeapSize + + if (usedMemory > this.config.memoryThreshold) { + console.warn(`Memory usage (${(usedMemory / 1024 / 1024).toFixed(2)}MB) exceeds threshold (${(this.config.memoryThreshold / 1024 / 1024).toFixed(2)}MB)`) + this.clearByMemoryPressure() + } + } + + /** + * 生成完整的键名 + */ + getFullKey(key) { + return `${this.config.prefix}${key}` + } + + /** + * 获取当前时间戳 + */ + now() { + return Date.now() + } + + /** + * 设置缓存 + */ + set(key, value, options = {}) { + const { + strategy = this.config.strategy, + expire = this.config.defaultExpire + } = options + + const fullKey = this.getFullKey(key) + const now = this.now() + + // 检查缓存大小限制 + if (this.cache.size >= this.config.maxCacheSize && !this.cache.has(fullKey)) { + this.evictByStrategy(strategy) + } + + // 创建缓存项 + const cacheItem = { + value, + createdAt: now, + lastAccessedAt: now, + accessCount: 1, + expire: strategy === CacheStrategy.TIME_BASED && expire > 0 ? now + expire : 0, + strategy, + size: this.estimateSize(value) + } + + // 更新缓存 + this.cache.set(fullKey, cacheItem) + this.accessTimes.set(fullKey, now) + this.accessCounts.set(fullKey, 1) + + return true + } + + /** + * 获取缓存 + */ + get(key) { + const fullKey = this.getFullKey(key) + const cacheItem = this.cache.get(fullKey) + + if (!cacheItem) { + return null + } + + const now = this.now() + + // 检查是否过期 + if (cacheItem.expire > 0 && now > cacheItem.expire) { + this.delete(key) + return null + } + + // 更新访问信息 + cacheItem.lastAccessedAt = now + cacheItem.accessCount++ + this.accessTimes.set(fullKey, now) + this.accessCounts.set(fullKey, cacheItem.accessCount) + + return cacheItem.value + } + + /** + * 删除缓存 + */ + delete(key) { + const fullKey = this.getFullKey(key) + const deleted = this.cache.delete(fullKey) + this.accessTimes.delete(fullKey) + this.accessCounts.delete(fullKey) + return deleted + } + + /** + * 清空所有缓存 + */ + clear() { + this.cache.clear() + this.accessTimes.clear() + this.accessCounts.clear() + } + + /** + * 根据策略淘汰缓存 + */ + evictByStrategy(strategy) { + switch (strategy) { + case CacheStrategy.FREQUENCY_BASED: + this.evictByLFU() // Least Frequently Used + break + case CacheStrategy.MEMORY_PRESSURE: + this.evictByMemoryPressure() + break + case CacheStrategy.TIME_BASED: + default: + this.evictByLRU() // Least Recently Used + break + } + } + + /** + * LRU淘汰算法 + */ + evictByLRU() { + let oldestKey = null + let oldestTime = this.now() + + for (const [key, time] of this.accessTimes) { + if (time < oldestTime) { + oldestTime = time + oldestKey = key + } + } + + if (oldestKey) { + const key = oldestKey.substring(this.config.prefix.length) + this.delete(key) + } + } + + /** + * LFU淘汰算法 + */ + evictByLFU() { + let leastUsedKey = null + let leastCount = Infinity + + for (const [key, count] of this.accessCounts) { + if (count < leastCount) { + leastCount = count + leastUsedKey = key + } + } + + if (leastUsedKey) { + const key = leastUsedKey.substring(this.config.prefix.length) + this.delete(key) + } + } + + /** + * 基于内存压力的淘汰算法 + */ + evictByMemoryPressure() { + // 按照缓存项大小排序,优先淘汰大的 + const entries = Array.from(this.cache.entries()) + entries.sort((a, b) => b[1].size - a[1].size) + + // 淘汰最大的几个缓存项,直到缓存大小减少至少20% + const targetSize = Math.floor(this.config.maxCacheSize * 0.8) + let evictedCount = 0 + + for (const [key] of entries) { + if (this.cache.size <= targetSize) break + + const cacheKey = key.substring(this.config.prefix.length) + this.delete(cacheKey) + evictedCount++ + } + + console.log(`Evicted ${evictedCount} cache items due to memory pressure`) + } + + /** + * 清除过期缓存 + */ + clearExpired() { + const now = this.now() + const expiredKeys = [] + + for (const [key, item] of this.cache) { + if (item.expire > 0 && now > item.expire) { + expiredKeys.push(key) + } + } + + for (const key of expiredKeys) { + const cacheKey = key.substring(this.config.prefix.length) + this.delete(cacheKey) + } + + return expiredKeys.length + } + + /** + * 估算对象大小(字节) + */ + estimateSize(obj) { + try { + return JSON.stringify(obj).length * 2 // 假设每个字符占用2字节 + } catch (error) { + return 1024 // 默认1KB + } + } + + /** + * 获取缓存统计信息 + */ + getStats() { + const now = this.now() + let totalSize = 0 + let expiredCount = 0 + + for (const [key, item] of this.cache) { + totalSize += item.size + if (item.expire > 0 && now > item.expire) { + expiredCount++ + } + } + + return { + size: this.cache.size, + maxSize: this.config.maxCacheSize, + totalSize, + memoryThreshold: this.config.memoryThreshold, + expiredCount, + strategy: this.config.strategy + } + } + + /** + * 获取所有缓存键 + */ + keys() { + return Array.from(this.cache.keys()).map(key => + key.substring(this.config.prefix.length) + ) + } + + /** + * 检查是否存在缓存 + */ + has(key) { + const fullKey = this.getFullKey(key) + const cacheItem = this.cache.get(fullKey) + + if (!cacheItem) { + return false + } + + const now = this.now() + + // 检查是否过期 + if (cacheItem.expire > 0 && now > cacheItem.expire) { + this.delete(key) + return false + } + + return true + } + + /** + * 销毁缓存管理器 + */ + destroy() { + if (this.memoryCheckInterval) { + clearInterval(this.memoryCheckInterval) + this.memoryCheckInterval = null + } + this.clear() + } +} + +// 创建默认实例 +const defaultCacheManager = new ComponentCacheManager() + +// 导出便捷方法 +export const setCache = (key, value, options) => defaultCacheManager.set(key, value, options) +export const getCache = (key) => defaultCacheManager.get(key) +export const deleteCache = (key) => defaultCacheManager.delete(key) +export const clearCache = () => defaultCacheManager.clear() +export const hasCache = (key) => defaultCacheManager.has(key) +export const getCacheStats = () => defaultCacheManager.getStats() +export const clearExpiredCache = () => defaultCacheManager.clearExpired() + +// 导出管理器类 +export { ComponentCacheManager } + +// 导出默认实例 +export default defaultCacheManager \ No newline at end of file diff --git a/frontend/src/utils/criticalCSS.js b/frontend/src/utils/criticalCSS.js new file mode 100644 index 00000000..acb8ffbb --- /dev/null +++ b/frontend/src/utils/criticalCSS.js @@ -0,0 +1,379 @@ +/** + * 关键CSS内联工具 + * 用于内联关键CSS,减少渲染阻塞,优化首屏加载速度 + */ + +/** + * 关键CSS配置 + */ +const criticalCSSConfig = { + // 是否启用关键CSS提取 + enabled: true, + // 关键CSS选择器列表 + selectors: [ + // 基础布局 + 'html', 'body', '#app', + // 顶部导航 + '.header', '.nav', '.logo', + // 首屏内容 + '.hero', '.main-content', '.category-card', + // 加载状态 + '.loading', '.spinner', + // 错误状态 + '.error', '.error-message' + ], + // 最大内联CSS大小(字节) + maxInlineSize: 15000, + // 是否压缩CSS + minify: true +} + +/** + * 关键CSS提取器 + */ +class CriticalCSSExtractor { + constructor(config = {}) { + this.config = { ...criticalCSSConfig, ...config } + this.criticalCSS = '' + this.originalCSS = '' + } + + /** + * 从CSS中提取关键CSS + * @param {string} css - 原始CSS + * @param {string} html - HTML内容 + */ + extractCriticalCSS(css, html = '') { + if (!this.config.enabled) return '' + + this.originalCSS = css + + // 如果提供了HTML,使用更精确的方法提取关键CSS + if (html) { + this.criticalCSS = this.extractFromHTML(css, html) + } else { + // 否则使用选择器匹配 + this.criticalCSS = this.extractBySelectors(css) + } + + // 压缩CSS + if (this.config.minify) { + this.criticalCSS = this.minifyCSS(this.criticalCSS) + } + + // 检查大小限制 + if (this.criticalCSS.length > this.config.maxInlineSize) { + console.warn(`关键CSS大小 (${this.criticalCSS.length} bytes) 超过限制 (${this.config.maxInlineSize} bytes)`) + // 截断CSS + this.criticalCSS = this.truncateCSS(this.criticalCSS, this.config.maxInlineSize) + } + + return this.criticalCSS + } + + /** + * 基于HTML内容提取关键CSS + * @param {string} css - 原始CSS + * @param {string} html - HTML内容 + */ + extractFromHTML(css, html) { + // 创建DOM解析器 + const parser = new DOMParser() + const doc = parser.parseFromString(html, 'text/html') + + // 获取所有在首屏可见的元素 + const visibleElements = this.getVisibleElements(doc) + + // 提取这些元素的CSS规则 + const criticalRules = this.extractRulesForElements(css, visibleElements) + + return criticalRules + } + + /** + * 获取首屏可见元素 + * @param {Document} doc - 文档对象 + */ + getVisibleElements(doc) { + const elements = [] + const viewportHeight = window.innerHeight || 800 + const allElements = doc.querySelectorAll('*') + + for (const element of allElements) { + // 获取元素位置 + const rect = element.getBoundingClientRect() + + // 检查元素是否在首屏可见 + if (rect.top < viewportHeight && rect.left >= 0 && rect.left <= window.innerWidth) { + elements.push(element) + } + } + + return elements + } + + /** + * 提取元素的CSS规则 + * @param {string} css - 原始CSS + * @param {Array} elements - 元素列表 + */ + extractRulesForElements(css, elements) { + // 解析CSS为规则 + const rules = this.parseCSS(css) + const criticalRules = [] + + // 获取所有元素的类名、ID和标签名 + const elementSelectors = new Set() + + for (const element of elements) { + // 添加标签名 + elementSelectors.add(element.tagName.toLowerCase()) + + // 添加ID + if (element.id) { + elementSelectors.add(`#${element.id}`) + } + + // 添加类名 + for (const className of element.classList) { + elementSelectors.add(`.${className}`) + } + + // 添加伪类和伪元素 + const computedStyle = window.getComputedStyle(element) + if (computedStyle) { + // 这里可以添加更复杂的逻辑来检测伪类和伪元素 + } + } + + // 筛选匹配元素的规则 + for (const rule of rules) { + if (this.ruleMatchesSelectors(rule, Array.from(elementSelectors))) { + criticalRules.push(rule) + } + } + + return criticalRules.join('\n') + } + + /** + * 基于选择器列表提取关键CSS + * @param {string} css - 原始CSS + */ + extractBySelectors(css) { + const rules = this.parseCSS(css) + const criticalRules = [] + + for (const rule of rules) { + if (this.ruleMatchesSelectors(rule, this.config.selectors)) { + criticalRules.push(rule) + } + } + + return criticalRules.join('\n') + } + + /** + * 解析CSS为规则数组 + * @param {string} css - CSS字符串 + */ + parseCSS(css) { + const rules = [] + + // 简单的CSS解析器,实际项目中可以使用更专业的CSS解析库 + const ruleRegex = /([^{]+)\{([^}]*)\}/g + let match + + while ((match = ruleRegex.exec(css)) !== null) { + const selector = match[1].trim() + const properties = match[2].trim() + + if (selector && properties) { + rules.push(`${selector} { ${properties} }`) + } + } + + return rules + } + + /** + * 检查规则是否匹配任何选择器 + * @param {string} rule - CSS规则 + * @param {Array} selectors - 选择器列表 + */ + ruleMatchesSelectors(rule, selectors) { + // 提取规则中的选择器部分 + const selectorMatch = rule.match(/^([^{]+)/) + if (!selectorMatch) return false + + const ruleSelectors = selectorMatch[1].split(',').map(s => s.trim()) + + // 检查是否有任何选择器匹配 + for (const ruleSelector of ruleSelectors) { + for (const selector of selectors) { + if (this.selectorMatches(ruleSelector, selector)) { + return true + } + } + } + + return false + } + + /** + * 检查单个选择器是否匹配 + * @param {string} ruleSelector - 规则选择器 + * @param {string} targetSelector - 目标选择器 + */ + selectorMatches(ruleSelector, targetSelector) { + // 简单的选择器匹配逻辑 + // 实际项目中应该使用更完整的选择器匹配库 + + // 直接匹配 + if (ruleSelector === targetSelector) { + return true + } + + // 包含匹配(例如,.card 匹配 .product-card) + if (targetSelector.startsWith('.') && ruleSelector.includes(targetSelector)) { + return true + } + + // ID匹配 + if (targetSelector.startsWith('#') && ruleSelector.includes(targetSelector)) { + return true + } + + // 标签匹配 + if (!targetSelector.startsWith('.') && !targetSelector.startsWith('#') && + ruleSelector.split(/\s+/).includes(targetSelector)) { + return true + } + + return false + } + + /** + * 压缩CSS + * @param {string} css - CSS字符串 + */ + minifyCSS(css) { + return css + // 移除注释 + .replace(/\/\*[\s\S]*?\*\//g, '') + // 移除多余的空白字符 + .replace(/\s+/g, ' ') + // 移除分号前的空格 + .replace(/\s*;\s*/g, ';') + // 移除花括号前后的空格 + .replace(/\s*{\s*/g, '{') + .replace(/\s*}\s*/g, '}') + // 移除冒号后的空格 + .replace(/:\s+/g, ':') + // 移除逗号后的空格 + .replace(/,\s+/g, ',') + .trim() + } + + /** + * 截断CSS到指定大小 + * @param {string} css - CSS字符串 + * @param {number} maxSize - 最大大小 + */ + truncateCSS(css, maxSize) { + if (css.length <= maxSize) return css + + // 尝试在规则边界截断 + let truncated = css.substring(0, maxSize) + const lastBraceIndex = truncated.lastIndexOf('}') + + if (lastBraceIndex > 0) { + truncated = truncated.substring(0, lastBraceIndex + 1) + } + + return truncated + } + + /** + * 获取非关键CSS + */ + getNonCriticalCSS() { + if (!this.originalCSS || !this.criticalCSS) return '' + + // 简单地从原始CSS中移除关键CSS部分 + // 实际项目中应该使用更精确的方法 + let nonCriticalCSS = this.originalCSS + + for (const rule of this.parseCSS(this.criticalCSS)) { + nonCriticalCSS = nonCriticalCSS.replace(rule, '') + } + + return nonCriticalCSS.trim() + } +} + +/** + * 内联关键CSS到HTML + * @param {string} html - HTML字符串 + * @param {string} css - CSS字符串 + * @param {Object} config - 配置选项 + */ +export function inlineCriticalCSS(html, css, config = {}) { + const extractor = new CriticalCSSExtractor(config) + const criticalCSS = extractor.extractCriticalCSS(css, html) + + if (!criticalCSS) return html + + // 查找head标签 + const headMatch = html.match(/]*>([\s\S]*?)<\/head>/i) + + if (!headMatch) { + // 如果没有head标签,在html标签后插入 + return html.replace(/]*>/i, `$&\n`) + } + + // 在head标签内插入关键CSS + const headContent = headMatch[1] + const newHeadContent = `\n${headContent}` + + return html.replace(headMatch[0], `${newHeadContent}`) +} + +/** + * 创建关键CSS样式标签 + * @param {string} css - CSS字符串 + * @param {Object} config - 配置选项 + */ +export function createCriticalStyleTag(css, config = {}) { + const extractor = new CriticalCSSExtractor(config) + const criticalCSS = extractor.extractCriticalCSS(css) + + if (!criticalCSS) return '' + + return `` +} + +/** + * 提取关键CSS + * @param {string} css - CSS字符串 + * @param {string} html - HTML内容 + * @param {Object} config - 配置选项 + */ +export function extractCriticalCSS(css, html = '', config = {}) { + const extractor = new CriticalCSSExtractor(config) + return extractor.extractCriticalCSS(css, html) +} + +/** + * 获取非关键CSS + * @param {string} css - CSS字符串 + * @param {string} html - HTML内容 + * @param {Object} config - 配置选项 + */ +export function getNonCriticalCSS(css, html = '', config = {}) { + const extractor = new CriticalCSSExtractor(config) + extractor.extractCriticalCSS(css, html) + return extractor.getNonCriticalCSS() +} + +export default CriticalCSSExtractor \ No newline at end of file diff --git a/frontend/src/utils/dataValidator.js b/frontend/src/utils/dataValidator.js new file mode 100644 index 00000000..e5791f45 --- /dev/null +++ b/frontend/src/utils/dataValidator.js @@ -0,0 +1,261 @@ +/** + * API响应数据验证和转换工具 + * 用于确保从后端API返回的数据符合前端预期格式 + */ + +/** + * 验证API响应的基本结构 + * @param {Object} response - API响应对象 + * @returns {Object} 验证结果 { isValid: boolean, data: any, error: string|null } + */ +export function validateApiResponse(response) { + if (!response || typeof response !== 'object') { + return { + isValid: false, + data: null, + error: 'API响应格式错误:响应不是有效的对象' + }; + } + + // 检查响应中是否有data字段 + if (response.data === undefined) { + return { + isValid: false, + data: null, + error: 'API响应格式错误:缺少data字段' + }; + } + + // 检查响应中是否有success字段 + if (response.success === undefined) { + return { + isValid: false, + data: null, + error: 'API响应格式错误:缺少success字段' + }; + } + + // 如果success为false,检查是否有message字段 + if (!response.success && !response.message) { + return { + isValid: false, + data: null, + error: 'API响应格式错误:失败的响应缺少message字段' + }; + } + + return { + isValid: true, + data: response.success ? response.data : null, + error: response.success ? null : response.message + }; +} + +/** + * 验证并转换类别数据 + * @param {any} data - API返回的类别数据 + * @returns {Object} 验证转换后的类别数据 + */ +export function validateCategoryData(data) { + // 如果是单个类别对象 + if (data && typeof data === 'object' && !Array.isArray(data)) { + return { + id: Number(data.id) || 0, + name: String(data.name || ''), + description: String(data.description || ''), + productCount: Number(data.productCount) || 0 + }; + } + + // 如果是类别数组 + if (Array.isArray(data)) { + return data.map(item => validateCategoryData(item)); + } + + // 默认返回空对象 + return { + id: 0, + name: '', + description: '', + productCount: 0 + }; +} + +/** + * 验证并转换产品数据 + * @param {any} data - API返回的产品数据 + * @returns {Object} 验证转换后的产品数据 + */ +export function validateProductData(data) { + // 如果是单个产品对象 + if (data && typeof data === 'object' && !Array.isArray(data)) { + return { + id: Number(data.id) || 0, + name: String(data.name || ''), + model: String(data.model || ''), + manufacturer: String(data.manufacturer || ''), + categoryId: Number(data.categoryId) || 0, + categoryName: String(data.categoryName || ''), + releaseDate: data.releaseDate ? new Date(data.releaseDate) : null, + currentRank: Number(data.currentRank) || 0, + imageUrl: String(data.imageUrl || ''), + specifications: Array.isArray(data.specifications) ? data.specifications.map(spec => ({ + id: Number(spec.id) || 0, + name: String(spec.name || ''), + value: String(spec.value || ''), + unit: String(spec.unit || '') + })) : [], + performanceScores: Array.isArray(data.performanceScores) ? data.performanceScores.map(score => ({ + id: Number(score.id) || 0, + benchmarkName: String(score.benchmarkName || ''), + score: Number(score.score) || 0, + recordDate: score.recordDate ? new Date(score.recordDate) : null + })) : [] + }; + } + + // 如果是产品数组 + if (Array.isArray(data)) { + return data.map(item => validateProductData(item)); + } + + // 默认返回空对象 + return { + id: 0, + name: '', + model: '', + manufacturer: '', + categoryId: 0, + categoryName: '', + releaseDate: null, + currentRank: 0, + imageUrl: '', + specifications: [], + performanceScores: [] + }; +} + +/** + * 验证并转换分页数据 + * @param {any} data - API返回的分页数据 + * @returns {Object} 验证转换后的分页数据 + */ +export function validatePaginationData(data) { + if (!data || typeof data !== 'object') { + return { + currentPage: 1, + totalPages: 1, + pageSize: 10, + totalCount: 0, + hasNext: false, + hasPrevious: false + }; + } + + return { + currentPage: Number(data.currentPage) || 1, + totalPages: Number(data.totalPages) || 1, + pageSize: Number(data.pageSize) || 10, + totalCount: Number(data.totalCount) || 0, + hasNext: Boolean(data.hasNext), + hasPrevious: Boolean(data.hasPrevious) + }; +} + +/** + * 验证并转换产品对比数据 + * @param {any} data - API返回的产品对比数据 + * @returns {Object} 验证转换后的产品对比数据 + */ +export function validateComparisonData(data) { + if (!data || typeof data !== 'object') { + return { + products: [], + comparisonMatrix: [], + summary: { + bestPerformer: null, + worstPerformer: null, + comparisonDate: null + } + }; + } + + return { + products: Array.isArray(data.products) ? validateProductData(data.products) : [], + comparisonMatrix: Array.isArray(data.comparisonMatrix) ? data.comparisonMatrix.map(row => ({ + category: String(row.category || ''), + values: Array.isArray(row.values) ? row.values.map(val => ({ + productId: Number(val.productId) || 0, + value: String(val.value || ''), + isBest: Boolean(val.isBest), + isWorst: Boolean(val.isWorst) + })) : [] + })) : [], + summary: { + bestPerformer: data.summary && data.summary.bestPerformer ? validateProductData(data.summary.bestPerformer) : null, + worstPerformer: data.summary && data.summary.worstPerformer ? validateProductData(data.summary.worstPerformer) : null, + comparisonDate: data.summary && data.summary.comparisonDate ? new Date(data.summary.comparisonDate) : null + } + }; +} + +/** + * 处理API响应,统一进行验证和转换 + * @param {Object} response - API响应对象 + * @param {string} dataType - 数据类型:'category', 'product', 'pagination', 'comparison' + * @returns {Object} 处理后的数据 { success: boolean, data: any, error: string|null } + */ +export function processApiResponse(response, dataType) { + // 首先验证响应基本结构 + const validation = validateApiResponse(response); + if (!validation.isValid) { + return { + success: false, + data: null, + error: validation.error + }; + } + + // 如果响应本身表示失败 + if (validation.error) { + return { + success: false, + data: null, + error: validation.error + }; + } + + // 根据数据类型进行相应的转换 + let processedData; + try { + switch (dataType) { + case 'category': + processedData = validateCategoryData(validation.data); + break; + case 'product': + processedData = validateProductData(validation.data); + break; + case 'pagination': + processedData = validatePaginationData(validation.data); + break; + case 'comparison': + processedData = validateComparisonData(validation.data); + break; + default: + processedData = validation.data; + } + + return { + success: true, + data: processedData, + error: null + }; + } catch (error) { + console.error('数据转换错误:', error); + return { + success: false, + data: null, + error: `数据转换错误: ${error.message}` + }; + } +} \ No newline at end of file diff --git a/frontend/src/utils/dynamicImport.js b/frontend/src/utils/dynamicImport.js new file mode 100644 index 00000000..776805ab --- /dev/null +++ b/frontend/src/utils/dynamicImport.js @@ -0,0 +1,232 @@ +/** + * 动态导入工具 + * 用于优化组件和资源的加载,提供更好的用户体验 + */ + +// 导入状态缓存 +const importCache = new Map() + +// 导入状态枚举 +const ImportStatus = { + PENDING: 'pending', + SUCCESS: 'success', + FAILED: 'failed' +} + +/** + * 动态导入组件或模块 + * @param {Function} importFn - 返回Promise的导入函数 + * @param {string} cacheKey - 缓存键 + * @param {Object} options - 选项 + * @returns {Promise} 导入结果 + */ +const dynamicImport = (importFn, cacheKey, options = {}) => { + const { + timeout = 10000, // 默认超时时间10秒 + retryCount = 2, // 默认重试次数 + fallback = null // 降级方案 + } = options + + // 检查缓存 + if (importCache.has(cacheKey)) { + const cached = importCache.get(cacheKey) + if (cached.status === ImportStatus.SUCCESS) { + return Promise.resolve(cached.data) + } else if (cached.status === ImportStatus.PENDING) { + return cached.promise + } + } + + // 创建导入Promise + let resolve, reject + const importPromise = new Promise((res, rej) => { + resolve = res + reject = rej + }) + + // 设置缓存状态为pending + importCache.set(cacheKey, { + status: ImportStatus.PENDING, + promise: importPromise + }) + + // 执行导入 + const executeImport = (attempt = 0) => { + const timeoutPromise = new Promise((_, timeoutReject) => { + setTimeout(() => timeoutReject(new Error('Import timeout')), timeout) + }) + + Promise.race([importFn(), timeoutPromise]) + .then(module => { + // 更新缓存状态为成功 + importCache.set(cacheKey, { + status: ImportStatus.SUCCESS, + data: module + }) + resolve(module) + }) + .catch(error => { + console.error(`Import failed (attempt ${attempt + 1}):`, error) + + // 重试逻辑 + if (attempt < retryCount) { + setTimeout(() => executeImport(attempt + 1), 1000 * (attempt + 1)) + } else { + // 使用降级方案 + if (fallback) { + try { + const fallbackModule = typeof fallback === 'function' ? fallback() : fallback + importCache.set(cacheKey, { + status: ImportStatus.SUCCESS, + data: fallbackModule + }) + resolve(fallbackModule) + } catch (fallbackError) { + // 更新缓存状态为失败 + importCache.set(cacheKey, { + status: ImportStatus.FAILED, + error + }) + reject(error) + } + } else { + // 更新缓存状态为失败 + importCache.set(cacheKey, { + status: ImportStatus.FAILED, + error + }) + reject(error) + } + } + }) + } + + executeImport() + return importPromise +} + +/** + * 预加载组件 + * @param {Function} importFn - 导入函数 + * @param {string} cacheKey - 缓存键 + * @param {Object} options - 选项 + */ +const preloadComponent = (importFn, cacheKey, options = {}) => { + // 延迟预加载,避免影响当前页面性能 + setTimeout(() => { + dynamicImport(importFn, cacheKey, options) + .then(() => { + console.log(`Component preloaded: ${cacheKey}`) + }) + .catch(error => { + console.error(`Failed to preload component: ${cacheKey}`, error) + }) + }, options.delay || 1000) +} + +/** + * 批量预加载组件 + * @param {Array} components - 组件列表,每个元素包含 { importFn, cacheKey, options } + */ +const batchPreloadComponents = (components) => { + // 使用requestIdleCallback在浏览器空闲时预加载 + if ('requestIdleCallback' in window) { + requestIdleCallback(() => { + components.forEach(({ importFn, cacheKey, options }) => { + preloadComponent(importFn, cacheKey, options) + }) + }) + } else { + // 降级方案:延迟预加载 + setTimeout(() => { + components.forEach(({ importFn, cacheKey, options }) => { + preloadComponent(importFn, cacheKey, options) + }) + }, 3000) + } +} + +/** + * 清除导入缓存 + * @param {string} cacheKey - 缓存键,不提供则清除所有 + */ +const clearImportCache = (cacheKey = null) => { + if (cacheKey) { + importCache.delete(cacheKey) + } else { + importCache.clear() + } +} + +/** + * 获取导入状态 + * @param {string} cacheKey - 缓存键 + * @returns {Object} 导入状态 + */ +const getImportStatus = (cacheKey) => { + const cached = importCache.get(cacheKey) + if (!cached) { + return { status: 'not_loaded' } + } + return { + status: cached.status, + hasData: cached.status === ImportStatus.SUCCESS, + hasError: cached.status === ImportStatus.FAILED + } +} + +/** + * 获取所有导入状态 + * @returns {Object} 所有导入状态 + */ +const getAllImportStatus = () => { + const result = {} + importCache.forEach((value, key) => { + result[key] = { + status: value.status, + hasData: value.status === ImportStatus.SUCCESS, + hasError: value.status === ImportStatus.FAILED + } + }) + return result +} + +/** + * 创建高阶组件,包装动态导入逻辑 + * @param {Function} importFn - 导入函数 + * @param {Object} options - 选项 + * @returns {Function} 高阶组件 + */ +const createLazyComponent = (importFn, options = {}) => { + const { + loadingComponent = null, + errorComponent = null, + delay = 200, + timeout = 10000 + } = options + + return { + async setup(props, { slots }) { + const cacheKey = options.cacheKey || importFn.toString() + + try { + const module = await dynamicImport(importFn, cacheKey, { timeout }) + return module.default || module + } catch (error) { + console.error('Failed to load component:', error) + return errorComponent || { template: '
加载失败
' } + } + } + } +} + +export { + dynamicImport, + preloadComponent, + batchPreloadComponents, + clearImportCache, + getImportStatus, + getAllImportStatus, + createLazyComponent, + ImportStatus +} \ No newline at end of file diff --git a/frontend/src/utils/errorHandler.js b/frontend/src/utils/errorHandler.js new file mode 100644 index 00000000..fbf35a5d --- /dev/null +++ b/frontend/src/utils/errorHandler.js @@ -0,0 +1,374 @@ +/** + * 全局错误处理工具 + * 用于统一处理应用中的各种错误 + */ + +import { ElMessage, ElNotification } from 'element-plus' +import router from '@/router' + +// 错误类型枚举 +export const ErrorTypes = { + NETWORK: 'network', + API: 'api', + VALIDATION: 'validation', + PERMISSION: 'permission', + BUSINESS: 'business', + UNKNOWN: 'unknown' +} + +// 错误级别枚举 +export const ErrorLevels = { + INFO: 'info', + WARNING: 'warning', + ERROR: 'error', + CRITICAL: 'critical' +} + +// 错误处理配置 +const errorHandlingConfig = { + // 是否显示错误通知 + showNotification: true, + // 是否记录错误日志 + logError: true, + // 是否上报错误 + reportError: true, + // 错误上报URL + reportUrl: '/api/errors/report', + // 最大重试次数 + maxRetries: 3, + // 重试延迟(毫秒) + retryDelay: 1000 +} + +/** + * 错误处理器类 + */ +class ErrorHandler { + constructor() { + this.errorQueue = [] + this.retryCount = new Map() + this.initGlobalErrorHandlers() + } + + /** + * 初始化全局错误处理器 + */ + initGlobalErrorHandlers() { + // 监听未捕获的Promise错误 + window.addEventListener('unhandledrejection', (event) => { + this.handleError(event.reason, { + type: ErrorTypes.UNKNOWN, + level: ErrorLevels.ERROR, + context: 'unhandledrejection', + promise: event.promise + }) + }) + + // 监听全局JavaScript错误 + window.addEventListener('error', (event) => { + this.handleError(event.error || new Error(event.message), { + type: ErrorTypes.UNKNOWN, + level: ErrorLevels.ERROR, + context: 'javascript', + filename: event.filename, + lineno: event.lineno, + colno: event.colno + }) + }) + } + + /** + * 处理错误 + * @param {Error} error - 错误对象 + * @param {Object} options - 错误处理选项 + */ + handleError(error, options = {}) { + const { + type = ErrorTypes.UNKNOWN, + level = ErrorLevels.ERROR, + context = '', + showMessage = true, + customMessage = '', + retryCallback = null, + ...otherOptions + } = options + + // 构建错误信息 + const errorInfo = { + message: error?.message || '未知错误', + stack: error?.stack || '', + type, + level, + context, + url: window.location.href, + userAgent: navigator.userAgent, + timestamp: new Date().toISOString(), + ...otherOptions + } + + // 记录错误 + if (errorHandlingConfig.logError) { + console.error(`[ErrorHandler] ${level.toUpperCase()}:`, error, errorInfo) + } + + // 上报错误 + if (errorHandlingConfig.reportError) { + this.reportError(errorInfo) + } + + // 显示错误消息 + if (showMessage) { + this.showErrorMessage(errorInfo, customMessage) + } + + // 执行重试回调 + if (retryCallback && typeof retryCallback === 'function') { + this.executeRetry(retryCallback, errorInfo) + } + + // 将错误添加到队列 + this.errorQueue.push(errorInfo) + + // 限制错误队列大小 + if (this.errorQueue.length > 100) { + this.errorQueue.shift() + } + + return errorInfo + } + + /** + * 处理网络错误 + * @param {Error} error - 错误对象 + * @param {Object} options - 错误处理选项 + */ + handleNetworkError(error, options = {}) { + return this.handleError(error, { + type: ErrorTypes.NETWORK, + level: ErrorLevels.WARNING, + context: 'network', + customMessage: '网络连接失败,请检查网络设置', + ...options + }) + } + + /** + * 处理API错误 + * @param {Object} response - API响应对象 + * @param {Object} options - 错误处理选项 + */ + handleApiError(response, options = {}) { + const { status, data } = response + let message = '服务器错误' + let level = ErrorLevels.ERROR + + // 根据状态码设置错误消息和级别 + switch (status) { + case 400: + message = data?.message || '请求参数错误' + level = ErrorLevels.WARNING + break + case 401: + message = '未授权,请重新登录' + level = ErrorLevels.WARNING + // 跳转到登录页 + router.push('/login') + break + case 403: + message = '没有权限访问该资源' + level = ErrorLevels.WARNING + break + case 404: + message = '请求的资源不存在' + level = ErrorLevels.WARNING + break + case 500: + message = '服务器内部错误' + level = ErrorLevels.ERROR + break + case 502: + case 503: + case 504: + message = '服务暂时不可用,请稍后重试' + level = ErrorLevels.ERROR + break + default: + message = data?.message || `服务器错误 (${status})` + level = ErrorLevels.ERROR + } + + return this.handleError(new Error(message), { + type: ErrorTypes.API, + level, + context: 'api', + status, + responseData: data, + ...options + }) + } + + /** + * 处理验证错误 + * @param {Object} errors - 验证错误对象 + * @param {Object} options - 错误处理选项 + */ + handleValidationErrors(errors, options = {}) { + let message = '输入验证失败' + + // 如果是数组,取第一个错误 + if (Array.isArray(errors) && errors.length > 0) { + message = errors[0].message || message + } + // 如果是对象,取第一个错误 + else if (typeof errors === 'object' && errors !== null) { + const firstKey = Object.keys(errors)[0] + if (firstKey && errors[firstKey]) { + message = Array.isArray(errors[firstKey]) + ? errors[firstKey][0] + : errors[firstKey].message || message + } + } + + return this.handleError(new Error(message), { + type: ErrorTypes.VALIDATION, + level: ErrorLevels.WARNING, + context: 'validation', + validationErrors: errors, + ...options + }) + } + + /** + * 显示错误消息 + * @param {Object} errorInfo - 错误信息 + * @param {string} customMessage - 自定义消息 + */ + showErrorMessage(errorInfo, customMessage = '') { + const message = customMessage || errorInfo.message + const { level } = errorInfo + + if (!errorHandlingConfig.showNotification) { + return + } + + // 根据错误级别选择不同的显示方式 + switch (level) { + case ErrorLevels.INFO: + ElMessage.info(message) + break + case ErrorLevels.WARNING: + ElMessage.warning(message) + break + case ErrorLevels.ERROR: + ElMessage.error(message) + break + case ErrorLevels.CRITICAL: + ElNotification({ + title: '严重错误', + message, + type: 'error', + duration: 0, // 不自动关闭 + showClose: true + }) + break + default: + ElMessage.error(message) + } + } + + /** + * 上报错误 + * @param {Object} errorInfo - 错误信息 + */ + reportError(errorInfo) { + try { + // 使用navigator.sendBeacon进行非阻塞上报 + if (navigator.sendBeacon) { + const data = new Blob([JSON.stringify(errorInfo)], { + type: 'application/json' + }) + navigator.sendBeacon(errorHandlingConfig.reportUrl, data) + } else { + // 降级使用fetch + fetch(errorHandlingConfig.reportUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(errorInfo), + keepalive: true // 尝试保持连接 + }).catch(err => { + console.error('[ErrorHandler] 上报错误失败:', err) + }) + } + } catch (err) { + console.error('[ErrorHandler] 上报错误异常:', err) + } + } + + /** + * 执行重试 + * @param {Function} callback - 重试回调 + * @param {Object} errorInfo - 错误信息 + */ + executeRetry(callback, errorInfo) { + const errorKey = `${errorInfo.type}_${errorInfo.context}` + const currentRetryCount = this.retryCount.get(errorKey) || 0 + + if (currentRetryCount < errorHandlingConfig.maxRetries) { + this.retryCount.set(errorKey, currentRetryCount + 1) + + ElMessage.info(`正在重试 (${currentRetryCount + 1}/${errorHandlingConfig.maxRetries})...`) + + setTimeout(() => { + try { + callback() + } catch (err) { + this.handleError(err, { + type: errorInfo.type, + level: errorInfo.level, + context: `${errorInfo.context}_retry`, + showMessage: false + }) + } + }, errorHandlingConfig.retryDelay) + } else { + ElMessage.error('已达到最大重试次数,请稍后再试') + this.retryCount.delete(errorKey) + } + } + + /** + * 获取错误队列 + */ + getErrorQueue() { + return [...this.errorQueue] + } + + /** + * 清空错误队列 + */ + clearErrorQueue() { + this.errorQueue = [] + } + + /** + * 配置错误处理 + * @param {Object} config - 配置选项 + */ + configure(config) { + Object.assign(errorHandlingConfig, config) + } +} + +// 创建全局错误处理器实例 +const globalErrorHandler = new ErrorHandler() + +export default globalErrorHandler + +// 导出便捷方法 +export const handleError = (error, options) => globalErrorHandler.handleError(error, options) +export const handleNetworkError = (error, options) => globalErrorHandler.handleNetworkError(error, options) +export const handleApiError = (response, options) => globalErrorHandler.handleApiError(response, options) +export const handleValidationErrors = (errors, options) => globalErrorHandler.handleValidationErrors(errors, options) +export const configureErrorHandler = (config) => globalErrorHandler.configure(config) \ No newline at end of file diff --git a/frontend/src/utils/lazyLoad.js b/frontend/src/utils/lazyLoad.js new file mode 100644 index 00000000..520a610a --- /dev/null +++ b/frontend/src/utils/lazyLoad.js @@ -0,0 +1,422 @@ +/** + * 图片懒加载工具 + * 用于延迟加载图片,优化页面加载性能 + */ + +/** + * 懒加载配置 + */ +const lazyLoadConfig = { + // 根边距,提前多少像素开始加载 + rootMargin: '50px', + // 阈值,目标元素可见比例达到多少时开始加载 + threshold: 0.1, + // 是否启用淡入效果 + enableFadeIn: true, + // 淡入动画持续时间(毫秒) + fadeInDuration: 300, + // 占位图片URL + placeholderImage: '/placeholder.svg', + // 错误图片URL + errorImage: '/placeholder.svg', + // 是否使用WebP格式 + useWebP: true, + // 是否启用响应式图片 + enableResponsive: true, + // 断点配置 + breakpoints: { + sm: 640, + md: 768, + lg: 1024, + xl: 1280, + xxl: 1536 + } +} + +/** + * 图片懒加载管理器 + */ +class ImageLazyLoader { + constructor(config = {}) { + this.config = { ...lazyLoadConfig, ...config } + this.observer = null + this.loadedImages = new Set() + this.init() + } + + /** + * 初始化懒加载器 + */ + init() { + // 检查浏览器支持 + if (!('IntersectionObserver' in window)) { + console.warn('浏览器不支持IntersectionObserver,将回退到传统懒加载方式') + this.initFallback() + return + } + + // 创建Intersection Observer + this.observer = new IntersectionObserver( + this.handleIntersection.bind(this), + { + rootMargin: this.config.rootMargin, + threshold: this.config.threshold + } + ) + + // 初始化现有图片 + this.initExistingImages() + + // 监听DOM变化 + this.observeDOMChanges() + } + + /** + * 初始化现有图片 + */ + initExistingImages() { + const images = document.querySelectorAll('img[data-src]') + images.forEach(img => this.observeImage(img)) + } + + /** + * 观察图片 + * @param {HTMLImageElement} img - 图片元素 + */ + observeImage(img) { + if (!this.observer || this.loadedImages.has(img)) return + + // 设置占位图片 + if (!img.src && this.config.placeholderImage) { + img.src = this.config.placeholderImage + } + + // 添加加载状态类 + img.classList.add('lazy-loading') + + // 观察图片 + this.observer.observe(img) + } + + /** + * 停止观察图片 + * @param {HTMLImageElement} img - 图片元素 + */ + unobserveImage(img) { + if (!this.observer) return + + this.observer.unobserve(img) + } + + /** + * 处理图片进入视口 + * @param {Array} entries - IntersectionObserver条目 + */ + handleIntersection(entries) { + entries.forEach(entry => { + if (entry.isIntersecting) { + const img = entry.target + this.loadImage(img) + this.unobserveImage(img) + } + }) + } + + /** + * 加载图片 + * @param {HTMLImageElement} img - 图片元素 + */ + loadImage(img) { + const src = img.dataset.src + if (!src || this.loadedImages.has(img)) return + + // 创建新图片对象进行预加载 + const newImg = new Image() + + // 处理加载成功 + newImg.onload = () => { + // 设置实际图片源 + img.src = src + + // 移除加载状态类 + img.classList.remove('lazy-loading') + img.classList.add('lazy-loaded') + + // 添加淡入效果 + if (this.config.enableFadeIn) { + img.style.opacity = '0' + img.style.transition = `opacity ${this.config.fadeInDuration}ms ease-in-out` + + // 触发重排以应用过渡效果 + img.offsetHeight + + img.style.opacity = '1' + } + + // 标记为已加载 + this.loadedImages.add(img) + + // 触发自定义事件 + img.dispatchEvent(new CustomEvent('lazyload', { detail: { img, src } })) + } + + // 处理加载失败 + newImg.onerror = () => { + // 设置错误图片 + if (this.config.errorImage) { + img.src = this.config.errorImage + } + + // 移除加载状态类 + img.classList.remove('lazy-loading') + img.classList.add('lazy-error') + + // 触发自定义事件 + img.dispatchEvent(new CustomEvent('lazyloaderror', { detail: { img, src } })) + } + + // 设置图片源 + newImg.src = this.processImageSrc(src) + } + + /** + * 处理图片源 + * @param {string} src - 原始图片源 + */ + processImageSrc(src) { + // 如果启用WebP且浏览器支持 + if (this.config.useWebP && this.supportsWebP() && !src.match(/\.(webp)(\?.*)?$/i)) { + // 检查是否已经包含查询参数 + const separator = src.includes('?') ? '&' : '?' + return `${src}${separator}format=webp` + } + + return src + } + + /** + * 检查浏览器是否支持WebP + */ + supportsWebP() { + // 简单的WebP支持检测 + const canvas = document.createElement('canvas') + canvas.width = 1 + canvas.height = 1 + return canvas.toDataURL('image/webp').indexOf('data:image/webp') === 0 + } + + /** + * 初始化回退方案 + */ + initFallback() { + // 使用传统的滚动事件监听 + let ticking = false + + const checkImages = () => { + const images = document.querySelectorAll('img[data-src]:not(.lazy-loaded):not(.lazy-error)') + + images.forEach(img => { + if (this.isInViewport(img)) { + this.loadImage(img) + } + }) + + ticking = false + } + + const requestTick = () => { + if (!ticking) { + requestAnimationFrame(checkImages) + ticking = true + } + } + + // 监听滚动事件 + window.addEventListener('scroll', requestTick) + window.addEventListener('resize', requestTick) + + // 初始检查 + checkImages() + } + + /** + * 检查元素是否在视口中 + * @param {Element} element - 要检查的元素 + */ + isInViewport(element) { + const rect = element.getBoundingClientRect() + const rootMargin = this.parseRootMargin(this.config.rootMargin) + + return ( + rect.bottom >= -rootMargin.bottom && + rect.right >= -rootMargin.left && + rect.top <= window.innerHeight + rootMargin.top && + rect.left <= window.innerWidth + rootMargin.right + ) + } + + /** + * 解析根边距 + * @param {string} rootMargin - 根边距字符串 + */ + parseRootMargin(rootMargin) { + const values = rootMargin.split(/\s+/).map(v => parseInt(v) || 0) + + // 默认值 + let top = 0, right = 0, bottom = 0, left = 0 + + switch (values.length) { + case 1: + top = right = bottom = left = values[0] + break + case 2: + top = bottom = values[0] + left = right = values[1] + break + case 3: + top = values[0] + left = right = values[1] + bottom = values[2] + break + case 4: + top = values[0] + right = values[1] + bottom = values[2] + left = values[3] + break + } + + return { top, right, bottom, left } + } + + /** + * 监听DOM变化 + */ + observeDOMChanges() { + if (!('MutationObserver' in window)) return + + const observer = new MutationObserver(mutations => { + mutations.forEach(mutation => { + mutation.addedNodes.forEach(node => { + // 检查新增的节点是否是图片或包含图片 + if (node.nodeType === Node.ELEMENT_NODE) { + if (node.tagName === 'IMG' && node.dataset.src) { + this.observeImage(node) + } else if (node.querySelectorAll) { + const images = node.querySelectorAll('img[data-src]') + images.forEach(img => this.observeImage(img)) + } + } + }) + }) + }) + + observer.observe(document.body, { + childList: true, + subtree: true + }) + } + + /** + * 创建响应式图片 + * @param {string} baseSrc - 基础图片URL + * @param {Object} options - 选项 + */ + createResponsiveImage(baseSrc, options = {}) { + if (!this.config.enableResponsive) return baseSrc + + const { sizes, breakpoints = this.config.breakpoints } = options + + // 如果没有提供sizes,使用默认断点 + if (!sizes) { + return baseSrc + } + + // 创建srcset + const srcset = Object.entries(sizes) + .sort(([a], [b]) => { + // 按断点大小排序 + return breakpoints[a] - breakpoints[b] + }) + .map(([breakpoint, width]) => { + const breakpointWidth = breakpoints[breakpoint] + const separator = baseSrc.includes('?') ? '&' : '?' + return `${baseSrc}${separator}width=${width} ${breakpointWidth}w` + }) + .join(', ') + + return srcset + } + + /** + * 重置懒加载器 + */ + reset() { + // 停止观察所有图片 + if (this.observer) { + this.observer.disconnect() + } + + // 清空已加载图片集合 + this.loadedImages.clear() + + // 重新初始化 + this.init() + } + + /** + * 销毁懒加载器 + */ + destroy() { + if (this.observer) { + this.observer.disconnect() + this.observer = null + } + + this.loadedImages.clear() + } +} + +// 创建默认懒加载器实例 +const defaultLazyLoader = new ImageLazyLoader() + +/** + * 初始化图片懒加载 + * @param {Object} config - 配置选项 + */ +export function initLazyLoad(config = {}) { + return new ImageLazyLoader(config) +} + +/** + * 观察单个图片 + * @param {HTMLImageElement} img - 图片元素 + * @param {Object} config - 配置选项 + */ +export function observeImage(img, config = {}) { + if (config.createNew) { + const loader = new ImageLazyLoader(config) + loader.observeImage(img) + return loader + } else { + defaultLazyLoader.observeImage(img) + } +} + +/** + * 创建响应式图片 + * @param {string} baseSrc - 基础图片URL + * @param {Object} options - 选项 + */ +export function createResponsiveImage(baseSrc, options = {}) { + return defaultLazyLoader.createResponsiveImage(baseSrc, options) +} + +/** + * 检查浏览器是否支持WebP + */ +export function supportsWebP() { + return defaultLazyLoader.supportsWebP() +} + +export default defaultLazyLoader \ No newline at end of file diff --git a/frontend/src/utils/monitor.js b/frontend/src/utils/monitor.js new file mode 100644 index 00000000..91305e21 --- /dev/null +++ b/frontend/src/utils/monitor.js @@ -0,0 +1,467 @@ +/** + * 前端性能监控和错误上报工具 + * 用于收集应用性能数据和错误信息,并上报到服务器 + */ + +// 配置信息 +const config = { + // 错误上报API地址 + errorReportUrl: '/api/errors', + + // 性能数据上报API地址 + performanceReportUrl: '/api/performance', + + // 是否启用错误上报 + enableErrorReporting: true, + + // 是否启用性能监控 + enablePerformanceMonitoring: true, + + // 上报批次大小 + batchSize: 10, + + // 上报间隔(毫秒) + reportInterval: 30000, // 30秒 + + // 最大重试次数 + maxRetries: 3, + + // 是否在开发环境也上报 + reportInDevelopment: false +} + +// 错误数据存储 +const errorQueue = [] +const performanceQueue = [] + +// 性能指标收集 +const performanceMetrics = { + // 页面加载时间 + pageLoadTime: 0, + + // 首次内容绘制时间 + firstContentfulPaint: 0, + + // 最大内容绘制时间 + largestContentfulPaint: 0, + + // 首次输入延迟 + firstInputDelay: 0, + + // 累积布局偏移 + cumulativeLayoutShift: 0, + + // API请求时间 + apiRequestTimes: {}, + + // 路由切换时间 + routeChangeTimes: {} +} + +/** + * 获取当前环境 + * @returns {string} 当前环境:development, production + */ +function getCurrentEnvironment() { + return import.meta.env.MODE || 'development' +} + +/** + * 判断是否应该上报数据 + * @returns {boolean} 是否应该上报 + */ +function shouldReport() { + const env = getCurrentEnvironment() + return config.enableErrorReporting && (env === 'production' || config.reportInDevelopment) +} + +/** + * 收集浏览器和设备信息 + * @returns {Object} 浏览器和设备信息 + */ +function collectBrowserInfo() { + const ua = navigator.userAgent + const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection + + return { + userAgent: ua, + url: window.location.href, + timestamp: Date.now(), + environment: getCurrentEnvironment(), + // 屏幕信息 + screen: { + width: screen.width, + height: screen.height, + colorDepth: screen.colorDepth + }, + // 视口信息 + viewport: { + width: window.innerWidth, + height: window.innerHeight + }, + // 网络信息 + connection: connection ? { + effectiveType: connection.effectiveType, + downlink: connection.downlink, + rtt: connection.rtt + } : null, + // 内存信息(如果支持) + memory: performance.memory ? { + usedJSHeapSize: performance.memory.usedJSHeapSize, + totalJSHeapSize: performance.memory.totalJSHeapSize, + jsHeapSizeLimit: performance.memory.jsHeapSizeLimit + } : null + } +} + +/** + * 上报数据到服务器 + * @param {string} url - 上报URL + * @param {Object} data - 上报数据 + * @param {number} retryCount - 当前重试次数 + */ +// 上报数据到服务器 + const reportData = async (data) => { + if (!config.reportUrl || config.isDevelopment) { + console.log('开发环境不上报数据:', data) + return + } + + try { + await fetch(config.reportUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data) + }) + console.log('数据上报成功:', data) + } catch (error) { + console.error('数据上报失败:', error) + } + } + +/** + * 批量上报错误数据 + */ +function reportErrors() { + if (errorQueue.length === 0) return + + const errors = errorQueue.splice(0, config.batchSize) + reportData(config.errorReportUrl, { + errors, + browserInfo: collectBrowserInfo() + }) +} + +/** + * 批量上报性能数据 + */ +function reportPerformance() { + if (performanceQueue.length === 0) return + + const metrics = performanceQueue.splice(0, config.batchSize) + reportData(config.performanceReportUrl, { + metrics, + browserInfo: collectBrowserInfo() + }) +} + +/** + * 定期上报数据 + */ +function startPeriodicReporting() { + if (!shouldReport()) return + + setInterval(() => { + reportErrors() + reportPerformance() + }, config.reportInterval) +} + +/** + * 捕获JavaScript错误 + * @param {Error} error - 错误对象 + * @param {Object} errorInfo - 错误信息 + */ +function captureError(error, errorInfo = {}) { + if (!config.enableErrorReporting) return + + const errorData = { + message: error.message || '未知错误', + stack: error.stack || '', + name: error.name || 'Error', + ...errorInfo, + timestamp: Date.now(), + url: window.location.href + } + + errorQueue.push(errorData) + + // 如果队列达到批次大小,立即上报 + if (errorQueue.length >= config.batchSize) { + reportErrors() + } +} + +/** + * 捕获未处理的Promise错误 + * @param {PromiseRejectionEvent} event - Promise拒绝事件 + */ +function captureUnhandledRejection(event) { + captureError(new Error(event.reason), { + type: 'unhandledRejection' + }) +} + +/** + * 记录API请求时间 + * @param {string} url - API URL + * @param {number} duration - 请求耗时(毫秒) + * @param {number} status - HTTP状态码 + * @param {string} method - HTTP方法 + */ +function recordApiRequest(url, duration, status, method = 'GET') { + if (!config.enablePerformanceMonitoring) return + + const apiInfo = { + url, + duration, + status, + method, + timestamp: Date.now() + } + + // 存储到性能队列 + performanceQueue.push({ + type: 'api', + data: apiInfo + }) + + // 更新API请求时间统计 + if (!performanceMetrics.apiRequestTimes[url]) { + performanceMetrics.apiRequestTimes[url] = [] + } + performanceMetrics.apiRequestTimes[url].push({ + duration, + status, + timestamp: Date.now() + }) + + // 如果队列达到批次大小,立即上报 + if (performanceQueue.length >= config.batchSize) { + reportPerformance() + } +} + +/** + * 记录路由切换时间 + * @param {string} from - 来源路由 + * @param {string} to - 目标路由 + * @param {number} duration - 切换耗时(毫秒) + */ +function recordRouteChange(from, to, duration) { + if (!config.enablePerformanceMonitoring) return + + const routeInfo = { + from, + to, + duration, + timestamp: Date.now() + } + + // 存储到性能队列 + performanceQueue.push({ + type: 'route', + data: routeInfo + }) + + // 更新路由切换时间统计 + const routeKey = `${from} -> ${to}` + if (!performanceMetrics.routeChangeTimes[routeKey]) { + performanceMetrics.routeChangeTimes[routeKey] = [] + } + performanceMetrics.routeChangeTimes[routeKey].push({ + duration, + timestamp: Date.now() + }) + + // 如果队列达到批次大小,立即上报 + if (performanceQueue.length >= config.batchSize) { + reportPerformance() + } +} + +/** + * 收集Web Vitals性能指标 + */ +function collectWebVitals() { + if (!config.enablePerformanceMonitoring) return + + // 首次内容绘制时间 + const observer = new PerformanceObserver((list) => { + for (const entry of list.getEntries()) { + if (entry.name === 'first-contentful-paint') { + performanceMetrics.firstContentfulPaint = entry.startTime + performanceQueue.push({ + type: 'web-vital', + data: { + metric: 'firstContentfulPaint', + value: entry.startTime, + timestamp: Date.now() + } + }) + } + } + }) + + try { + observer.observe({ entryTypes: ['paint'] }) + } catch (e) { + // 某些浏览器可能不支持 + } + + // 最大内容绘制时间 + if ('PerformanceObserver' in window) { + const lcpObserver = new PerformanceObserver((list) => { + const entries = list.getEntries() + const lastEntry = entries[entries.length - 1] + + performanceMetrics.largestContentfulPaint = lastEntry.startTime + performanceQueue.push({ + type: 'web-vital', + data: { + metric: 'largestContentfulPaint', + value: lastEntry.startTime, + timestamp: Date.now() + } + }) + }) + + try { + lcpObserver.observe({ entryTypes: ['largest-contentful-paint'] }) + } catch (e) { + // 某些浏览器可能不支持 + } + } + + // 累积布局偏移 + if ('PerformanceObserver' in window) { + let clsValue = 0 + + const clsObserver = new PerformanceObserver((list) => { + for (const entry of list.getEntries()) { + if (!entry.hadRecentInput) { + clsValue += entry.value + } + } + + performanceMetrics.cumulativeLayoutShift = clsValue + performanceQueue.push({ + type: 'web-vital', + data: { + metric: 'cumulativeLayoutShift', + value: clsValue, + timestamp: Date.now() + } + }) + }) + + try { + clsObserver.observe({ entryTypes: ['layout-shift'] }) + } catch (e) { + // 某些浏览器可能不支持 + } + } + + // 首次输入延迟 + if ('PerformanceObserver' in window) { + const fidObserver = new PerformanceObserver((list) => { + for (const entry of list.getEntries()) { + performanceMetrics.firstInputDelay = entry.processingStart - entry.startTime + performanceQueue.push({ + type: 'web-vital', + data: { + metric: 'firstInputDelay', + value: entry.processingStart - entry.startTime, + timestamp: Date.now() + } + }) + } + }) + + try { + fidObserver.observe({ entryTypes: ['first-input'] }) + } catch (e) { + // 某些浏览器可能不支持 + } + } +} + +/** + * 初始化性能监控和错误上报 + */ +function init() { + // 页面加载完成后收集性能指标 + window.addEventListener('load', () => { + // 页面加载时间 + const navigation = performance.getEntriesByType('navigation')[0] + if (navigation) { + performanceMetrics.pageLoadTime = navigation.loadEventEnd - navigation.fetchStart + performanceQueue.push({ + type: 'page-load', + data: { + value: performanceMetrics.pageLoadTime, + timestamp: Date.now() + } + }) + } + + // 收集Web Vitals + collectWebVitals() + }) + + // 捕获JavaScript错误 + window.addEventListener('error', (event) => { + captureError(event.error || new Error(event.message), { + filename: event.filename, + lineno: event.lineno, + colno: event.colno, + type: 'javascript' + }) + }) + + // 捕获未处理的Promise错误 + window.addEventListener('unhandledrejection', captureUnhandledRejection) + + // 启动定期上报 + startPeriodicReporting() +} + +/** + * 获取当前性能指标 + * @returns {Object} 性能指标对象 + */ +function getPerformanceMetrics() { + return { ...performanceMetrics } +} + +/** + * 配置监控选项 + * @param {Object} options - 配置选项 + */ +function configure(options) { + Object.assign(config, options) +} + +// 导出API +export default { + init, + configure, + captureError, + recordApiRequest, + recordRouteChange, + getPerformanceMetrics, + reportErrors: () => reportErrors(), + reportPerformance: () => reportPerformance() +} \ No newline at end of file diff --git a/frontend/src/utils/performanceMetrics.js b/frontend/src/utils/performanceMetrics.js new file mode 100644 index 00000000..29864f59 --- /dev/null +++ b/frontend/src/utils/performanceMetrics.js @@ -0,0 +1,455 @@ +/** + * 性能指标收集和分析工具 + * 用于收集和分析前端应用的各种性能指标 + */ + +// 性能指标数据 +const performanceMetrics = { + // 导航指标 + navigation: {}, + // 资源加载指标 + resources: [], + // 用户交互指标 + interactions: [], + // 自定义指标 + custom: [], + // 长任务 + longTasks: [], + // 内存使用 + memory: {} +} + +// 性能观察器 +let navigationObserver = null +let resourceObserver = null +let longTaskObserver = null +let interactionObserver = null + +// 配置选项 +const config = { + // 是否启用性能监控 + enabled: true, + // 上报URL + reportUrl: '/api/performance/report', + // 采样率 (0-1) + sampleRate: 1.0, + // 最大指标数量 + maxMetrics: 100, + // 上报间隔 (毫秒) + reportInterval: 30000, + // 长任务阈值 (毫秒) + longTaskThreshold: 50, + // 用户交互延迟阈值 (毫秒) + interactionDelayThreshold: 100 +} + +// 上报定时器 +let reportTimer = null + +/** + * 初始化性能监控 + * @param {Object} options - 配置选项 + */ +const init = (options = {}) => { + Object.assign(config, options) + + if (!config.enabled) return + + // 设置定时上报 + if (config.reportInterval > 0) { + reportTimer = setInterval(() => { + reportMetrics() + }, config.reportInterval) + } + + // 页面卸载时上报数据 + window.addEventListener('beforeunload', () => { + reportMetrics() + }) + + // 页面隐藏时上报数据 + document.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'hidden') { + reportMetrics() + } + }) + + // 收集导航指标 + collectNavigationMetrics() + + // 设置性能观察器 + setupPerformanceObservers() + + // 收集内存信息 + collectMemoryMetrics() + + console.log('性能监控已初始化') +} + +/** + * 收集导航指标 + */ +const collectNavigationMetrics = () => { + if (!window.performance || !window.performance.getEntriesByType) return + + const navigationEntries = window.performance.getEntriesByType('navigation') + if (navigationEntries.length > 0) { + const nav = navigationEntries[0] + + performanceMetrics.navigation = { + // DNS查询时间 + dnsLookup: nav.domainLookupEnd - nav.domainLookupStart, + // TCP连接时间 + tcpConnection: nav.connectEnd - nav.connectStart, + // 请求响应时间 + requestResponse: nav.responseEnd - nav.requestStart, + // DOM解析时间 + domParsing: nav.domContentLoadedEventEnd - nav.domLoading, + // 资源加载时间 + resourceLoading: nav.loadEventEnd - nav.domContentLoadedEventEnd, + // 首字节时间 + firstByte: nav.responseStart - nav.requestStart, + // 首次渲染时间 + firstPaint: null, + // 首次内容渲染时间 + firstContentfulPaint: null, + // 最大内容渲染时间 + largestContentfulPaint: null, + // 首次输入延迟 + firstInputDelay: null, + // 累计布局偏移 + cumulativeLayoutShift: null + } + + // 收集Paint指标 + const paintEntries = window.performance.getEntriesByType('paint') + paintEntries.forEach(entry => { + if (entry.name === 'first-paint') { + performanceMetrics.navigation.firstPaint = entry.startTime + } else if (entry.name === 'first-contentful-paint') { + performanceMetrics.navigation.firstContentfulPaint = entry.startTime + } + }) + } +} + +/** + * 设置性能观察器 + */ +const setupPerformanceObservers = () => { + // 观察资源加载 + if ('PerformanceObserver' in window) { + try { + // 资源加载观察器 + resourceObserver = new PerformanceObserver((list) => { + const entries = list.getEntries() + entries.forEach(entry => { + if (performanceMetrics.resources.length >= config.maxMetrics) { + performanceMetrics.resources.shift() + } + + performanceMetrics.resources.push({ + name: entry.name, + type: entry.initiatorType, + duration: entry.duration, + size: entry.transferSize || 0, + startTime: entry.startTime, + responseEnd: entry.responseEnd + }) + }) + }) + resourceObserver.observe({ entryTypes: ['resource'] }) + + // 长任务观察器 + if ('PerformanceLongTaskTiming' in window) { + longTaskObserver = new PerformanceObserver((list) => { + const entries = list.getEntries() + entries.forEach(entry => { + if (entry.duration > config.longTaskThreshold) { + if (performanceMetrics.longTasks.length >= config.maxMetrics) { + performanceMetrics.longTasks.shift() + } + + performanceMetrics.longTasks.push({ + duration: entry.duration, + startTime: entry.startTime, + name: entry.name || 'unknown' + }) + } + }) + }) + longTaskObserver.observe({ entryTypes: ['longtask'] }) + } + + // 最大内容渲染时间观察器 + if ('PerformanceObserver' in window && 'largest-contentful-paint' in PerformanceObserver.supportedEntryTypes) { + const lcpObserver = new PerformanceObserver((list) => { + const entries = list.getEntries() + const lastEntry = entries[entries.length - 1] + performanceMetrics.navigation.largestContentfulPaint = lastEntry.startTime + }) + lcpObserver.observe({ entryTypes: ['largest-contentful-paint'] }) + } + + // 累计布局偏移观察器 + if ('PerformanceObserver' in window && 'layout-shift' in PerformanceObserver.supportedEntryTypes) { + let clsValue = 0 + const clsObserver = new PerformanceObserver((list) => { + const entries = list.getEntries() + entries.forEach(entry => { + if (!entry.hadRecentInput) { + clsValue += entry.value + } + }) + performanceMetrics.navigation.cumulativeLayoutShift = clsValue + }) + clsObserver.observe({ entryTypes: ['layout-shift'] }) + } + + // 首次输入延迟观察器 + if ('PerformanceObserver' in window && 'first-input' in PerformanceObserver.supportedEntryTypes) { + const fidObserver = new PerformanceObserver((list) => { + const entries = list.getEntries() + entries.forEach(entry => { + if (entry.processingStart - entry.startTime > 0) { + performanceMetrics.navigation.firstInputDelay = entry.processingStart - entry.startTime + } + }) + }) + fidObserver.observe({ entryTypes: ['first-input'] }) + } + } catch (error) { + console.error('设置性能观察器失败:', error) + } + } +} + +/** + * 收集内存指标 + */ +const collectMemoryMetrics = () => { + if (window.performance && window.performance.memory) { + performanceMetrics.memory = { + usedJSHeapSize: window.performance.memory.usedJSHeapSize, + totalJSHeapSize: window.performance.memory.totalJSHeapSize, + jsHeapSizeLimit: window.performance.memory.jsHeapSizeLimit + } + } +} + +/** + * 记录用户交互指标 + * @param {string} name - 交互名称 + * @param {number} startTime - 开始时间 + * @param {number} endTime - 结束时间 + * @param {Object} metadata - 元数据 + */ +const recordInteraction = (name, startTime, endTime, metadata = {}) => { + if (!config.enabled) return + + const duration = endTime - startTime + + if (duration > config.interactionDelayThreshold) { + if (performanceMetrics.interactions.length >= config.maxMetrics) { + performanceMetrics.interactions.shift() + } + + performanceMetrics.interactions.push({ + name, + duration, + startTime, + endTime, + metadata + }) + } +} + +/** + * 记录自定义指标 + * @param {string} name - 指标名称 + * @param {number} value - 指标值 + * @param {Object} metadata - 元数据 + */ +const recordCustomMetric = (name, value, metadata = {}) => { + if (!config.enabled) return + + if (performanceMetrics.custom.length >= config.maxMetrics) { + performanceMetrics.custom.shift() + } + + performanceMetrics.custom.push({ + name, + value, + timestamp: Date.now(), + metadata + }) +} + +/** + * 获取页面加载性能评分 + * @returns {Object} 性能评分 + */ +const getPerformanceScore = () => { + const nav = performanceMetrics.navigation + const score = { + overall: 0, + metrics: {} + } + + // FCP评分 (0-100) + if (nav.firstContentfulPaint !== null) { + let fcpScore = 100 + if (nav.firstContentfulPaint > 1800) { + fcpScore = 50 + } else if (nav.firstContentfulPaint > 3000) { + fcpScore = 0 + } + score.metrics.firstContentfulPaint = fcpScore + } + + // LCP评分 (0-100) + if (nav.largestContentfulPaint !== null) { + let lcpScore = 100 + if (nav.largestContentfulPaint > 2500) { + lcpScore = 50 + } else if (nav.largestContentfulPaint > 4000) { + lcpScore = 0 + } + score.metrics.largestContentfulPaint = lcpScore + } + + // FID评分 (0-100) + if (nav.firstInputDelay !== null) { + let fidScore = 100 + if (nav.firstInputDelay > 100) { + fidScore = 50 + } else if (nav.firstInputDelay > 300) { + fidScore = 0 + } + score.metrics.firstInputDelay = fidScore + } + + // CLS评分 (0-100) + if (nav.cumulativeLayoutShift !== null) { + let clsScore = 100 + if (nav.cumulativeLayoutShift > 0.1) { + clsScore = 50 + } else if (nav.cumulativeLayoutShift > 0.25) { + clsScore = 0 + } + score.metrics.cumulativeLayoutShift = clsScore + } + + // 计算总体评分 + const metricValues = Object.values(score.metrics) + if (metricValues.length > 0) { + score.overall = Math.round(metricValues.reduce((sum, value) => sum + value, 0) / metricValues.length) + } + + return score +} + +/** + * 上报性能指标 + */ +const reportMetrics = () => { + if (!config.enabled) return + + // 采样率检查 + if (Math.random() > config.sampleRate) { + return + } + + // 收集最新的内存指标 + collectMemoryMetrics() + + // 获取性能评分 + const score = getPerformanceScore() + + const data = { + url: window.location.href, + userAgent: navigator.userAgent, + timestamp: Date.now(), + metrics: performanceMetrics, + score + } + + // 发送数据 + if (navigator.sendBeacon) { + navigator.sendBeacon(config.reportUrl, JSON.stringify(data)) + } else { + fetch(config.reportUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data), + keepalive: true + }).catch(error => { + console.error('上报性能指标失败:', error) + }) + } +} + +/** + * 清除性能指标 + */ +const clearMetrics = () => { + performanceMetrics.navigation = {} + performanceMetrics.resources = [] + performanceMetrics.interactions = [] + performanceMetrics.custom = [] + performanceMetrics.longTasks = [] + performanceMetrics.memory = {} +} + +/** + * 获取性能指标 + * @returns {Object} 性能指标 + */ +const getMetrics = () => { + // 收集最新的内存指标 + collectMemoryMetrics() + + return { + ...performanceMetrics, + score: getPerformanceScore() + } +} + +/** + * 销毁性能监控 + */ +const destroy = () => { + if (reportTimer) { + clearInterval(reportTimer) + reportTimer = null + } + + if (resourceObserver) { + resourceObserver.disconnect() + resourceObserver = null + } + + if (longTaskObserver) { + longTaskObserver.disconnect() + longTaskObserver = null + } + + if (interactionObserver) { + interactionObserver.disconnect() + interactionObserver = null + } +} + +export { + init, + recordInteraction, + recordCustomMetric, + getMetrics, + getPerformanceScore, + reportMetrics, + clearMetrics, + destroy, + config +} \ No newline at end of file diff --git a/frontend/src/utils/piniaPersist.js b/frontend/src/utils/piniaPersist.js new file mode 100644 index 00000000..09fe9406 --- /dev/null +++ b/frontend/src/utils/piniaPersist.js @@ -0,0 +1,257 @@ +/** + * Pinia状态持久化插件 + * 自动将Pinia store状态持久化到本地存储 + * 支持选择性持久化、数据加密、过期时间等功能 + */ + +import { StatePersistManager, StorageType } from './statePersist' + +/** + * 创建Pinia持久化插件 + * @param {Object} options 配置选项 + * @param {string} options.key store的唯一标识,默认使用store.$id + * @param {Array|string} options.paths 需要持久化的状态路径,默认持久化所有状态 + * @param {string} options.storage 存储类型,默认localStorage + * @param {boolean} options.encrypt 是否加密,默认false + * @param {number} options.expire 过期时间(毫秒),0表示永不过期 + * @param {Function} options.serializer 自定义序列化函数 + * @param {Function} options.deserializer 自定义反序列化函数 + * @param {Function} options.beforeRestore 恢复前钩子 + * @param {Function} options.afterRestore 恢复后钩子 + * @param {Function} options.filter 过滤函数,返回false的状态将不会被持久化 + * @returns {Function} Pinia插件函数 + */ +export const createPersistPlugin = (options = {}) => { + // 默认配置 + const defaultOptions = { + storage: StorageType.LOCAL, + encrypt: false, + expire: 0, + serializer: JSON.stringify, + deserializer: JSON.parse + } + + const config = { ...defaultOptions, ...options } + + // 创建持久化管理器 + const persistManager = new StatePersistManager({ + storageType: config.storage, + encrypt: config.encrypt, + defaultExpire: config.expire + }) + + // 返回Pinia插件函数 + return (context) => { + const { store, options: piniaOptions } = context + const storeId = config.key || store.$id + + // 初始化时从存储中恢复状态 + const initPersist = async () => { + try { + // 从存储中获取数据 + const persistedState = await persistManager.get(storeId) + + if (persistedState) { + // 执行恢复前钩子 + if (config.beforeRestore) { + await config.beforeRestore({ store, persistedState }) + } + + // 恢复状态 + if (config.paths) { + // 选择性恢复指定路径的状态 + if (Array.isArray(config.paths)) { + config.paths.forEach(path => { + if (persistedState[path] !== undefined) { + store[path] = persistedState[path] + } + }) + } else { + // 单个路径 + if (persistedState[config.paths] !== undefined) { + store[config.paths] = persistedState[config.paths] + } + } + } else { + // 恢复所有状态 + store.$patch(persistedState) + } + + // 执行恢复后钩子 + if (config.afterRestore) { + await config.afterRestore({ store }) + } + } + } catch (error) { + console.error(`Failed to restore state for store ${storeId}:`, error) + } + } + + // 监听状态变化并持久化 + const persistState = async (state) => { + try { + let stateToPersist = state + + // 应用过滤器 + if (config.filter) { + if (config.paths) { + stateToPersist = {} + if (Array.isArray(config.paths)) { + config.paths.forEach(path => { + if (config.filter(path, state[path])) { + stateToPersist[path] = state[path] + } + }) + } else { + if (config.filter(config.paths, state[config.paths])) { + stateToPersist[config.paths] = state[config.paths] + } + } + } else { + stateToPersist = {} + Object.keys(state).forEach(key => { + if (config.filter(key, state[key])) { + stateToPersist[key] = state[key] + } + }) + } + } else if (config.paths) { + // 选择性持久化指定路径的状态 + stateToPersist = {} + if (Array.isArray(config.paths)) { + config.paths.forEach(path => { + if (state[path] !== undefined) { + stateToPersist[path] = state[path] + } + }) + } else { + if (state[config.paths] !== undefined) { + stateToPersist[config.paths] = state[config.paths] + } + } + } + + // 持久化状态 + await persistManager.set(storeId, stateToPersist) + } catch (error) { + console.error(`Failed to persist state for store ${storeId}:`, error) + } + } + + // 初始化持久化 + initPersist() + + // 订阅状态变化 + store.$subscribe(async (mutation, state) => { + // 只在直接变更状态时持久化,避免循环更新 + if (mutation.type === 'direct') { + await persistState(state) + } + }, { detached: true }) + + // 添加手动持久化方法 + store.$persist = async (state) => { + await persistState(state || store.$state) + } + + // 添加手动恢复方法 + store.$restore = async () => { + await initPersist() + } + + // 添加清除持久化数据方法 + store.$clearPersist = async () => { + await persistManager.remove(storeId) + } + } +} + +/** + * 创建带有持久化功能的store + * @param {string} id store ID + * @param {Object} options store选项 + * @param {Object} persistOptions 持久化选项 + * @returns {Object} Pinia定义对象 + */ +export const definePersistStore = (id, options, persistOptions = {}) => { + return { + id, + ...options, + actions: { + ...options.actions, + // 添加手动持久化方法 + async $persist(state) { + const persistManager = new StatePersistManager({ + storageType: persistOptions.storage || StorageType.LOCAL, + encrypt: persistOptions.encrypt || false, + defaultExpire: persistOptions.expire || 0 + }) + + await persistManager.set(id, state || this.$state) + }, + // 添加手动恢复方法 + async $restore() { + const persistManager = new StatePersistManager({ + storageType: persistOptions.storage || StorageType.LOCAL, + encrypt: persistOptions.encrypt || false, + defaultExpire: persistOptions.expire || 0 + }) + + const persistedState = await persistManager.get(id) + if (persistedState) { + this.$patch(persistedState) + } + }, + // 添加清除持久化数据方法 + async $clearPersist() { + const persistManager = new StatePersistManager({ + storageType: persistOptions.storage || StorageType.LOCAL, + encrypt: persistOptions.encrypt || false, + defaultExpire: persistOptions.expire || 0 + }) + + await persistManager.remove(id) + } + } + } +} + +/** + * 常用预设配置 + */ +export const presetConfigs = { + // 用户信息持久化配置(使用sessionStorage,关闭浏览器后清除) + userSession: { + storage: StorageType.SESSION, + encrypt: false, + expire: 0, // sessionStorage本身会在关闭浏览器后清除 + paths: ['user', 'token'] + }, + + // 应用设置持久化配置(长期保存) + appSettings: { + storage: StorageType.LOCAL, + encrypt: false, + expire: 0, // 永不过期 + paths: ['settings', 'theme', 'language'] + }, + + // 敏感数据持久化配置(加密存储) + sensitiveData: { + storage: StorageType.LOCAL, + encrypt: true, + expire: 7 * 24 * 60 * 60 * 1000, // 7天过期 + paths: ['credentials', 'secrets'] + }, + + // 临时数据持久化配置(短期存储) + tempData: { + storage: StorageType.LOCAL, + encrypt: false, + expire: 24 * 60 * 60 * 1000, // 24小时过期 + paths: ['cache', 'temp'] + } +} + +// 导出默认插件 +export default createPersistPlugin \ No newline at end of file diff --git a/frontend/src/utils/pwa.js b/frontend/src/utils/pwa.js new file mode 100644 index 00000000..480e59b0 --- /dev/null +++ b/frontend/src/utils/pwa.js @@ -0,0 +1,355 @@ +// PWA工具文件,用于管理Service Worker和离线功能 +import { ElMessage, ElNotification } from 'element-plus' + +// Service Worker注册状态 +let swRegistration = null +let isOnline = navigator.onLine + +// PWA初始化 +export async function initPWA() { + try { + // 注册Service Worker + await registerServiceWorker() + + // 监听网络状态变化 + setupNetworkListeners() + + // 检查更新 + checkForUpdates() + + console.log('[PWA] 初始化成功') + } catch (error) { + console.error('[PWA] 初始化失败:', error) + } +} + +// 注册Service Worker +export async function registerServiceWorker() { + if ('serviceWorker' in navigator) { + try { + swRegistration = await navigator.serviceWorker.register('/sw.js', { + scope: '/' + }) + + console.log('[PWA] Service Worker 注册成功:', swRegistration.scope) + + // 监听Service Worker更新 + swRegistration.addEventListener('updatefound', () => { + const newWorker = swRegistration.installing + + newWorker.addEventListener('statechange', () => { + if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { + // 有新版本可用 + showUpdateNotification() + } + }) + }) + + return swRegistration + } catch (error) { + console.error('[PWA] Service Worker 注册失败:', error) + throw error + } + } else { + console.warn('[PWA] 当前浏览器不支持Service Worker') + throw new Error('浏览器不支持Service Worker') + } +} + +// 检查Service Worker更新 +export async function checkForUpdates() { + if (!swRegistration) return + + try { + await swRegistration.update() + console.log('[PWA] 检查Service Worker更新完成') + } catch (error) { + console.error('[PWA] 检查Service Worker更新失败:', error) + } +} + +// 显示更新通知 +function showUpdateNotification() { + ElNotification({ + title: '应用更新', + message: '发现新版本,点击刷新获取最新功能', + type: 'info', + duration: 0, // 不自动关闭 + onClick: () => { + // 刷新页面以应用更新 + window.location.reload() + } + }) +} + +// 应用更新 +export async function applyUpdate() { + if (!swRegistration || !swRegistration.waiting) { + console.warn('[PWA] 没有可用的更新') + return false + } + + try { + // 发送消息给等待中的Service Worker,告诉它跳过等待 + swRegistration.waiting.postMessage({ type: 'SKIP_WAITING' }) + + // 刷新页面以应用更新 + window.location.reload() + + return true + } catch (error) { + console.error('[PWA] 应用更新失败:', error) + return false + } +} + +// 设置网络状态监听 +function setupNetworkListeners() { + window.addEventListener('online', handleOnline) + window.addEventListener('offline', handleOffline) +} + +// 处理网络连接 +function handleOnline() { + isOnline = true + console.log('[PWA] 网络已连接') + ElMessage.success('网络已连接') + + // 触发后台同步 + triggerBackgroundSync() +} + +// 处理网络断开 +function handleOffline() { + isOnline = false + console.log('[PWA] 网络已断开') + ElMessage.warning('网络已断开,当前处于离线模式') +} + +// 触发后台同步 +export async function triggerBackgroundSync() { + if (!swRegistration) return + + try { + // 注册后台同步事件 + await swRegistration.sync.register('background-sync') + console.log('[PWA] 后台同步注册成功') + } catch (error) { + console.error('[PWA] 后台同步注册失败:', error) + } +} + +// 订阅推送通知 +export async function subscribeToPushNotifications() { + if (!swRegistration) { + console.error('[PWA] Service Worker未注册') + return null + } + + try { + // 请求推送通知权限 + const permission = await Notification.requestPermission() + + if (permission !== 'granted') { + console.warn('[PWA] 用户拒绝了推送通知权限') + return null + } + + // 订阅推送通知 + const subscription = await swRegistration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: urlBase64ToUint8Array(process.env.VITE_VAPID_PUBLIC_KEY) + }) + + console.log('[PWA] 推送通知订阅成功:', subscription) + + // 将订阅信息发送到服务器 + await sendSubscriptionToServer(subscription) + + return subscription + } catch (error) { + console.error('[PWA] 推送通知订阅失败:', error) + return null + } +} + +// 取消推送通知订阅 +export async function unsubscribeFromPushNotifications() { + if (!swRegistration) return false + + try { + const subscription = await swRegistration.pushManager.getSubscription() + + if (subscription) { + await subscription.unsubscribe() + console.log('[PWA] 推送通知订阅已取消') + + // 通知服务器删除订阅信息 + await removeSubscriptionFromServer(subscription) + + return true + } + + return false + } catch (error) { + console.error('[PWA] 取消推送通知订阅失败:', error) + return false + } +} + +// 将VAPID公钥转换为Uint8Array +function urlBase64ToUint8Array(base64String) { + const padding = '='.repeat((4 - base64String.length % 4) % 4) + const base64 = (base64String + padding) + .replace(/-/g, '+') + .replace(/_/g, '/') + + const rawData = window.atob(base64) + const outputArray = new Uint8Array(rawData.length) + + for (let i = 0; i < rawData.length; ++i) { + outputArray[i] = rawData.charCodeAt(i) + } + + return outputArray +} + +// 将订阅信息发送到服务器 +async function sendSubscriptionToServer(subscription) { + try { + const response = await fetch('/api/notifications/subscribe', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(subscription) + }) + + if (!response.ok) { + throw new Error('服务器响应错误') + } + + console.log('[PWA] 订阅信息已发送到服务器') + } catch (error) { + console.error('[PWA] 发送订阅信息到服务器失败:', error) + throw error + } +} + +// 从服务器删除订阅信息 +async function removeSubscriptionFromServer(subscription) { + try { + const response = await fetch('/api/notifications/unsubscribe', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(subscription) + }) + + if (!response.ok) { + throw new Error('服务器响应错误') + } + + console.log('[PWA] 订阅信息已从服务器删除') + } catch (error) { + console.error('[PWA] 从服务器删除订阅信息失败:', error) + throw error + } +} + +// 显示本地通知 +export function showLocalNotification(title, options = {}) { + if (!('Notification' in window)) { + console.warn('[PWA] 当前浏览器不支持通知') + return + } + + if (Notification.permission === 'granted') { + const notification = new Notification(title, { + icon: '/favicon.ico', + badge: '/favicon.ico', + ...options + }) + + // 自动关闭通知 + if (options.autoClose !== false) { + setTimeout(() => { + notification.close() + }, options.duration || 5000) + } + + return notification + } else if (Notification.permission !== 'denied') { + // 请求通知权限 + Notification.requestPermission().then(permission => { + if (permission === 'granted') { + showLocalNotification(title, options) + } + }) + } +} + +// 检查PWA安装条件 +export function checkPWAInstallable() { + // 检查是否在PWA模式下运行 + const isPWA = window.matchMedia('(display-mode: standalone)').matches || + window.navigator.standalone === true + + // 检查是否支持安装 + const isInstallable = 'beforeinstallprompt' in window + + return { + isPWA, + isInstallable, + isInstalled: isPWA + } +} + +// 获取网络状态信息 +export function getNetworkInfo() { + const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection + + return { + isOnline, + effectiveType: connection ? connection.effectiveType : 'unknown', + downlink: connection ? connection.downlink : 'unknown', + rtt: connection ? connection.rtt : 'unknown', + saveData: connection ? connection.saveData : false + } +} + +// 缓存管理 +export const cacheManager = { + // 获取缓存大小 + async getCacheSize() { + if ('storage' in navigator && 'estimate' in navigator.storage) { + const estimate = await navigator.storage.estimate() + return { + usage: estimate.usage, + quota: estimate.quota, + usagePercentage: (estimate.usage / estimate.quota * 100).toFixed(2) + } + } + return null + }, + + // 清除缓存 + async clearCache() { + if ('caches' in window) { + try { + const cacheNames = await caches.keys() + await Promise.all(cacheNames.map(name => caches.delete(name))) + console.log('[PWA] 缓存已清除') + return true + } catch (error) { + console.error('[PWA] 清除缓存失败:', error) + return false + } + } + return false + } +} + +// 导出Service Worker注册状态 +export { swRegistration, isOnline } \ No newline at end of file diff --git a/frontend/src/utils/request.js b/frontend/src/utils/request.js new file mode 100644 index 00000000..b0f167a4 --- /dev/null +++ b/frontend/src/utils/request.js @@ -0,0 +1,297 @@ +/** + * Axios请求工具 + * 统一处理HTTP请求和响应 + */ + +import axios from 'axios' +import { ElMessage, ElLoading } from 'element-plus' +import { getToken, removeToken } from '@/utils/auth' +import router from '@/router' +import globalErrorHandler, { ErrorTypes } from './errorHandler' + +// 创建axios实例 +const service = axios.create({ + baseURL: import.meta.env.VITE_API_BASE_URL || '/api', + timeout: 15000, // 请求超时时间 + headers: { + 'Content-Type': 'application/json' + } +}) + +// 存储当前请求的loading实例 +let loadingInstance = null +// 存储当前请求数量 +let requestCount = 0 + +/** + * 显示loading + */ +const showLoading = () => { + if (requestCount === 0) { + loadingInstance = ElLoading.service({ + lock: true, + text: '加载中...', + background: 'rgba(0, 0, 0, 0.7)' + }) + } + requestCount++ +} + +/** + * 隐藏loading + */ +const hideLoading = () => { + requestCount-- + if (requestCount <= 0) { + requestCount = 0 + if (loadingInstance) { + loadingInstance.close() + loadingInstance = null + } + } +} + +/** + * 请求拦截器 + */ +service.interceptors.request.use( + config => { + // 显示loading(可选) + if (config.showLoading !== false) { + showLoading() + } + + // 添加token到请求头 + const token = getToken() + if (token) { + config.headers.Authorization = `Bearer ${token}` + } + + // 添加请求ID用于追踪 + config.headers['X-Request-ID'] = generateRequestId() + + // 添加时间戳防止缓存 + if (config.method === 'get') { + config.params = { + ...config.params, + _t: Date.now() + } + } + + return config + }, + error => { + // 请求错误处理 + hideLoading() + globalErrorHandler.handleError(error, { + type: ErrorTypes.NETWORK, + context: 'request_interceptor', + showMessage: true + }) + return Promise.reject(error) + } +) + +/** + * 响应拦截器 + */ +service.interceptors.response.use( + response => { + // 隐藏loading + hideLoading() + + // 获取响应数据 + const res = response.data + + // 根据后端约定的响应码处理 + if (response.status === 200) { + // 如果响应中包含code字段,根据code判断 + if (res.code !== undefined) { + // 成功响应 + if (res.code === 200 || res.code === 0) { + return res.data || res + } + // token过期或无效 + else if (res.code === 401) { + ElMessage.error('登录已过期,请重新登录') + removeToken() + router.push('/login') + return Promise.reject(new Error('登录已过期')) + } + // 权限不足 + else if (res.code === 403) { + ElMessage.error('权限不足') + return Promise.reject(new Error('权限不足')) + } + // 其他业务错误 + else { + const message = res.message || '服务器响应错误' + ElMessage.error(message) + return Promise.reject(new Error(message)) + } + } + // 如果没有code字段,直接返回数据 + else { + return res + } + } else { + // 处理非200状态码 + return handleErrorResponse(response) + } + }, + error => { + // 隐藏loading + hideLoading() + + // 处理响应错误 + if (error.response) { + // 服务器返回了响应,但状态码不在2xx范围内 + return handleErrorResponse(error.response) + } else if (error.request) { + // 请求已发出,但没有收到响应 + globalErrorHandler.handleNetworkError(error, { + context: 'no_response', + showMessage: true + }) + return Promise.reject(error) + } else { + // 请求配置出错 + globalErrorHandler.handleError(error, { + type: ErrorTypes.NETWORK, + context: 'request_config', + showMessage: true + }) + return Promise.reject(error) + } + } +) + +/** + * 处理错误响应 + * @param {Object} response - 响应对象 + */ +function handleErrorResponse(response) { + const { status, data } = response + + // 使用全局错误处理器处理API错误 + globalErrorHandler.handleApiError(response, { + showMessage: true + }) + + return Promise.reject(new Error(data?.message || `请求失败 (${status})`)) +} + +/** + * 生成请求ID + */ +function generateRequestId() { + return Date.now().toString(36) + Math.random().toString(36).substr(2) +} + +/** + * 封装GET请求 + * @param {string} url - 请求地址 + * @param {Object} params - 请求参数 + * @param {Object} config - 请求配置 + */ +export function get(url, params = {}, config = {}) { + return service.get(url, { + params, + ...config + }) +} + +/** + * 封装POST请求 + * @param {string} url - 请求地址 + * @param {Object} data - 请求数据 + * @param {Object} config - 请求配置 + */ +export function post(url, data = {}, config = {}) { + return service.post(url, data, config) +} + +/** + * 封装PUT请求 + * @param {string} url - 请求地址 + * @param {Object} data - 请求数据 + * @param {Object} config - 请求配置 + */ +export function put(url, data = {}, config = {}) { + return service.put(url, data, config) +} + +/** + * 封装DELETE请求 + * @param {string} url - 请求地址 + * @param {Object} config - 请求配置 + */ +export function del(url, config = {}) { + return service.delete(url, config) +} + +/** + * 封装上传文件请求 + * @param {string} url - 请求地址 + * @param {FormData} formData - 表单数据 + * @param {Object} config - 请求配置 + */ +export function upload(url, formData, config = {}) { + return service.post(url, formData, { + headers: { + 'Content-Type': 'multipart/form-data' + }, + ...config + }) +} + +/** + * 封装下载文件请求 + * @param {string} url - 请求地址 + * @param {Object} params - 请求参数 + * @param {string} filename - 下载文件名 + */ +export function download(url, params = {}, filename = '') { + return service.get(url, { + params, + responseType: 'blob' + }).then(response => { + // 创建下载链接 + const blob = new Blob([response]) + const downloadUrl = window.URL.createObjectURL(blob) + const link = document.createElement('a') + link.href = downloadUrl + + // 设置下载文件名 + link.download = filename || `download_${Date.now()}` + + // 触发下载 + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + + // 释放URL对象 + window.URL.revokeObjectURL(downloadUrl) + + return response + }) +} + +/** + * 取消请求 + * @param {string} url - 请求地址 + */ +export function cancelRequest(url) { + // 这里可以实现取消特定请求的逻辑 + // 例如使用CancelToken或AbortController +} + +/** + * 取消所有请求 + */ +export function cancelAllRequests() { + // 这里可以实现取消所有请求的逻辑 + // 例如存储所有请求的CancelToken或AbortController +} + +export default service \ No newline at end of file diff --git a/frontend/src/utils/resourceLoader.js b/frontend/src/utils/resourceLoader.js new file mode 100644 index 00000000..45146936 --- /dev/null +++ b/frontend/src/utils/resourceLoader.js @@ -0,0 +1,410 @@ +/** + * 资源加载优化工具 + * 用于优化图片、字体和其他静态资源的加载 + */ + +// 资源缓存 +const resourceCache = new Map() + +// 加载状态枚举 +const LoadStatus = { + PENDING: 'pending', + SUCCESS: 'success', + FAILED: 'failed' +} + +/** + * 预加载图片 + * @param {string} src - 图片URL + * @param {Object} options - 选项 + * @returns {Promise} 加载结果 + */ +const preloadImage = (src, options = {}) => { + const { + priority = 'normal', // 'high', 'normal', 'low' + useWebP = true, // 是否尝试使用WebP格式 + fallbackSrc = null, // 降级图片URL + timeout = 10000 // 超时时间 + } = options + + // 检查缓存 + if (resourceCache.has(src)) { + const cached = resourceCache.get(src) + if (cached.status === LoadStatus.SUCCESS) { + return Promise.resolve(cached.data) + } else if (cached.status === LoadStatus.PENDING) { + return cached.promise + } + } + + // 创建加载Promise + let resolve, reject + const loadPromise = new Promise((res, rej) => { + resolve = res + reject = rej + }) + + // 设置缓存状态为pending + resourceCache.set(src, { + status: LoadStatus.PENDING, + promise: loadPromise + }) + + // 处理图片URL + const processImageUrl = (url) => { + if (useWebP && !url.endsWith('.webp') && !url.includes('?')) { + // 尝试使用WebP格式 + return `${url}?format=webp` + } + return url + } + + // 执行加载 + const loadImage = (url, attempt = 0) => { + const img = new Image() + const timeoutId = setTimeout(() => { + reject(new Error(`Image load timeout: ${src}`)) + }, timeout) + + img.onload = () => { + clearTimeout(timeoutId) + // 更新缓存状态为成功 + resourceCache.set(src, { + status: LoadStatus.SUCCESS, + data: img + }) + resolve(img) + } + + img.onerror = () => { + clearTimeout(timeoutId) + + // 尝试降级方案 + if (fallbackSrc && attempt === 0) { + loadImage(fallbackSrc, 1) + } else if (useWebP && !url.includes('format=webp') && attempt === 0) { + // 尝试不使用WebP格式 + loadImage(src.replace('?format=webp', ''), 1) + } else { + // 更新缓存状态为失败 + resourceCache.set(src, { + status: LoadStatus.FAILED, + error: new Error(`Failed to load image: ${src}`) + }) + reject(new Error(`Failed to load image: ${src}`)) + } + } + + // 根据优先级设置加载策略 + if (priority === 'high') { + img.fetchPriority = 'high' + } else if (priority === 'low') { + img.fetchPriority = 'low' + } + + img.src = processImageUrl(url) + } + + loadImage(src) + return loadPromise +} + +/** + * 批量预加载图片 + * @param {Array} images - 图片URL数组 + * @param {Object} options - 选项 + * @returns {Promise} 所有图片加载结果 + */ +const batchPreloadImages = (images, options = {}) => { + const { + concurrent = 3, // 并发加载数量 + delay = 100 // 延迟时间 + } = options + + // 延迟执行,避免影响页面初始加载 + return new Promise((resolve) => { + setTimeout(() => { + const results = [] + let currentIndex = 0 + + const loadNext = () => { + if (currentIndex >= images.length) { + resolve(results) + return + } + + const batch = images.slice(currentIndex, currentIndex + concurrent) + currentIndex += concurrent + + const batchPromises = batch.map(src => + preloadImage(src, options) + .then(img => ({ src, status: 'success', img })) + .catch(error => ({ src, status: 'failed', error })) + ) + + Promise.all(batchPromises).then(batchResults => { + results.push(...batchResults) + // 继续加载下一批 + setTimeout(loadNext, delay) + }) + } + + loadNext() + }, delay) + }) +} + +/** + * 预加载字体 + * @param {string} fontUrl - 字体URL + * @param {string} fontFamily - 字体族名称 + * @param {Object} options - 选项 + * @returns {Promise} 加载结果 + */ +const preloadFont = (fontUrl, fontFamily, options = {}) => { + const { + display = 'swap', // 字体显示策略 + timeout = 10000 // 超时时间 + } = options + + // 检查缓存 + const cacheKey = `font:${fontUrl}` + if (resourceCache.has(cacheKey)) { + const cached = resourceCache.get(cacheKey) + if (cached.status === LoadStatus.SUCCESS) { + return Promise.resolve(cached.data) + } else if (cached.status === LoadStatus.PENDING) { + return cached.promise + } + } + + // 创建加载Promise + let resolve, reject + const loadPromise = new Promise((res, rej) => { + resolve = res + reject = rej + }) + + // 设置缓存状态为pending + resourceCache.set(cacheKey, { + status: LoadStatus.PENDING, + promise: loadPromise + }) + + // 创建字体 + const font = new FontFace(fontFamily, `url(${fontUrl})`, { display }) + + // 设置超时 + const timeoutId = setTimeout(() => { + reject(new Error(`Font load timeout: ${fontUrl}`)) + }, timeout) + + font.load() + .then(loadedFont => { + clearTimeout(timeoutId) + // 添加字体到文档 + document.fonts.add(loadedFont) + + // 更新缓存状态为成功 + resourceCache.set(cacheKey, { + status: LoadStatus.SUCCESS, + data: loadedFont + }) + resolve(loadedFont) + }) + .catch(error => { + clearTimeout(timeoutId) + // 更新缓存状态为失败 + resourceCache.set(cacheKey, { + status: LoadStatus.FAILED, + error + }) + reject(error) + }) + + return loadPromise +} + +/** + * 预加载资源 + * @param {string} url - 资源URL + * @param {string} as - 资源类型 ('script', 'style', 'image', 'font', etc.) + * @param {Object} options - 选项 + * @returns {Promise} 加载结果 + */ +const preloadResource = (url, as, options = {}) => { + const { + crossorigin = null, // 跨域设置 + integrity = null, // 完整性校验 + timeout = 10000 // 超时时间 + } = options + + // 检查缓存 + const cacheKey = `${as}:${url}` + if (resourceCache.has(cacheKey)) { + const cached = resourceCache.get(cacheKey) + if (cached.status === LoadStatus.SUCCESS) { + return Promise.resolve(cached.data) + } else if (cached.status === LoadStatus.PENDING) { + return cached.promise + } + } + + // 创建加载Promise + let resolve, reject + const loadPromise = new Promise((res, rej) => { + resolve = res + reject = rej + }) + + // 设置缓存状态为pending + resourceCache.set(cacheKey, { + status: LoadStatus.PENDING, + promise: loadPromise + }) + + // 创建link元素 + const link = document.createElement('link') + link.rel = 'preload' + link.href = url + link.as = as + + if (crossorigin) { + link.crossOrigin = crossorigin + } + + if (integrity) { + link.integrity = integrity + } + + // 设置超时 + const timeoutId = setTimeout(() => { + document.head.removeChild(link) + reject(new Error(`Resource preload timeout: ${url}`)) + }, timeout) + + link.onload = () => { + clearTimeout(timeoutId) + // 更新缓存状态为成功 + resourceCache.set(cacheKey, { + status: LoadStatus.SUCCESS, + data: link + }) + resolve(link) + } + + link.onerror = () => { + clearTimeout(timeoutId) + document.head.removeChild(link) + // 更新缓存状态为失败 + resourceCache.set(cacheKey, { + status: LoadStatus.FAILED, + error: new Error(`Failed to preload resource: ${url}`) + }) + reject(new Error(`Failed to preload resource: ${url}`)) + } + + document.head.appendChild(link) + return loadPromise +} + +/** + * 智能预加载资源 + * 根据用户行为和网络状态智能预加载资源 + * @param {Array} resources - 资源列表 + * @param {Object} options - 选项 + */ +const smartPreloadResources = (resources, options = {}) => { + const { + networkThreshold = '4g', // 网络阈值,低于此值不预加载 + idleTimeout = 2000 // 空闲超时时间 + } = options + + // 检查网络状态 + if (navigator.connection && navigator.connection.effectiveType) { + const connectionType = navigator.connection.effectiveType + if (connectionType !== networkThreshold && + ['slow-2g', '2g', '3g'].includes(connectionType)) { + console.log('Network too slow, skipping preload') + return + } + } + + // 在空闲时预加载 + if ('requestIdleCallback' in window) { + requestIdleCallback(() => { + resources.forEach(resource => { + const { url, type, priority = 'normal' } = resource + + switch (type) { + case 'image': + preloadImage(url, { priority }) + break + case 'font': + preloadFont(url, resource.fontFamily || 'CustomFont') + break + default: + preloadResource(url, type, { priority }) + } + }) + }, { timeout: idleTimeout }) + } else { + // 降级方案:延迟预加载 + setTimeout(() => { + resources.forEach(resource => { + const { url, type, priority = 'normal' } = resource + + switch (type) { + case 'image': + preloadImage(url, { priority }) + break + case 'font': + preloadFont(url, resource.fontFamily || 'CustomFont') + break + default: + preloadResource(url, type, { priority }) + } + }) + }, idleTimeout) + } +} + +/** + * 清除资源缓存 + * @param {string} key - 缓存键,不提供则清除所有 + */ +const clearResourceCache = (key = null) => { + if (key) { + resourceCache.delete(key) + } else { + resourceCache.clear() + } +} + +/** + * 获取资源加载状态 + * @param {string} key - 缓存键 + * @returns {Object} 加载状态 + */ +const getResourceStatus = (key) => { + const cached = resourceCache.get(key) + if (!cached) { + return { status: 'not_loaded' } + } + return { + status: cached.status, + hasData: cached.status === LoadStatus.SUCCESS, + hasError: cached.status === LoadStatus.FAILED + } +} + +export { + preloadImage, + batchPreloadImages, + preloadFont, + preloadResource, + smartPreloadResources, + clearResourceCache, + getResourceStatus, + LoadStatus +} \ No newline at end of file diff --git a/frontend/src/utils/resourcePreloader.js b/frontend/src/utils/resourcePreloader.js new file mode 100644 index 00000000..7ab8afb8 --- /dev/null +++ b/frontend/src/utils/resourcePreloader.js @@ -0,0 +1,522 @@ +/** + * 资源预加载工具 + * 用于智能预加载关键资源,优化首屏加载速度 + */ + +/** + * 资源类型枚举 + */ +export const ResourceType = { + SCRIPT: 'script', + STYLE: 'style', + IMAGE: 'image', + FONT: 'font', + VIDEO: 'video', + AUDIO: 'audio', + DOCUMENT: 'document' +} + +/** + * 预加载优先级枚举 + */ +export const PreloadPriority = { + HIGH: 'high', + MEDIUM: 'medium', + LOW: 'low' +} + +/** + * 网络类型枚举 + */ +export const NetworkType = { + SLOW_2G: 'slow-2g', + _2G: '2g', + _3G: '3g', + _4G: '4g' +} + +/** + * 资源预加载配置 + */ +const defaultConfig = { + // 网络阈值,低于此网络类型不进行预加载 + networkThreshold: NetworkType._3G, + // 空闲超时时间(毫秒) + idleTimeout: 2000, + // 最大并发预加载数量 + maxConcurrent: 3, + // 预加载超时时间(毫秒) + preloadTimeout: 10000, + // 是否使用请求空闲回调 + useRequestIdleCallback: true, + // 是否使用Intersection Observer + useIntersectionObserver: true, + // 是否启用缓存 + enableCache: true, + // 缓存过期时间(毫秒) + cacheExpiration: 3600000 // 1小时 +} + +/** + * 资源预加载管理器 + */ +class ResourcePreloader { + constructor(config = {}) { + this.config = { ...defaultConfig, ...config } + this.preloadQueue = [] + this.activePreloads = 0 + this.cache = new Map() + this.observer = null + this.init() + } + + /** + * 初始化预加载器 + */ + init() { + // 检查浏览器支持 + this.checkBrowserSupport() + + // 初始化Intersection Observer + if (this.config.useIntersectionObserver && 'IntersectionObserver' in window) { + this.initIntersectionObserver() + } + + // 清理过期缓存 + this.cleanExpiredCache() + } + + /** + * 检查浏览器支持 + */ + checkBrowserSupport() { + this.supports = { + linkRelPreload: document.createElement('link').relList.supports('preload'), + requestIdleCallback: 'requestIdleCallback' in window, + intersectionObserver: 'IntersectionObserver' in window, + webp: document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') === 0 + } + } + + /** + * 初始化Intersection Observer + */ + initIntersectionObserver() { + this.observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const element = entry.target + const url = element.dataset.preloadUrl + const type = element.dataset.preloadType + + if (url && type) { + this.preloadResource(url, type) + this.observer.unobserve(element) + } + } + }) + }, { + rootMargin: '50px' // 提前50px开始预加载 + }) + } + + /** + * 预加载单个资源 + * @param {string} url - 资源URL + * @param {string} type - 资源类型 + * @param {Object} options - 预加载选项 + */ + preloadResource(url, type, options = {}) { + // 检查缓存 + if (this.config.enableCache && this.cache.has(url)) { + const cached = this.cache.get(url) + if (Date.now() - cached.timestamp < this.config.cacheExpiration) { + return Promise.resolve(cached.data) + } + } + + // 检查网络条件 + if (!this.shouldPreload()) { + return Promise.reject(new Error('网络条件不满足预加载要求')) + } + + // 检查并发限制 + if (this.activePreloads >= this.config.maxConcurrent) { + return this.queuePreload(url, type, options) + } + + this.activePreloads++ + + return new Promise((resolve, reject) => { + const timeoutId = setTimeout(() => { + this.activePreloads-- + reject(new Error(`预加载超时: ${url}`)) + }, this.config.preloadTimeout) + + const handleComplete = (data) => { + clearTimeout(timeoutId) + this.activePreloads-- + + // 缓存结果 + if (this.config.enableCache) { + this.cache.set(url, { + data, + timestamp: Date.now() + }) + } + + resolve(data) + } + + const handleError = (error) => { + clearTimeout(timeoutId) + this.activePreloads-- + reject(error) + } + + // 根据资源类型选择预加载方法 + switch (type) { + case ResourceType.SCRIPT: + this.preloadScript(url, options).then(handleComplete).catch(handleError) + break + case ResourceType.STYLE: + this.preloadStyle(url, options).then(handleComplete).catch(handleError) + break + case ResourceType.IMAGE: + this.preloadImage(url, options).then(handleComplete).catch(handleError) + break + case ResourceType.FONT: + this.preloadFont(url, options).then(handleComplete).catch(handleError) + break + default: + this.preloadGeneric(url, type, options).then(handleComplete).catch(handleError) + } + }) + } + + /** + * 预加载脚本 + */ + preloadScript(url, options = {}) { + return new Promise((resolve, reject) => { + const link = document.createElement('link') + link.rel = 'preload' + link.as = 'script' + link.href = url + link.onload = resolve + link.onerror = reject + + // 添加到head + document.head.appendChild(link) + }) + } + + /** + * 预加载样式 + */ + preloadStyle(url, options = {}) { + return new Promise((resolve, reject) => { + const link = document.createElement('link') + link.rel = 'preload' + link.as = 'style' + link.href = url + link.onload = resolve + link.onerror = reject + + // 添加到head + document.head.appendChild(link) + }) + } + + /** + * 预加载图片 + */ + preloadImage(url, options = {}) { + return new Promise((resolve, reject) => { + const img = new Image() + img.onload = () => resolve(img) + img.onerror = reject + + // 如果支持WebP且URL中没有指定格式,尝试使用WebP + if (this.supports.webp && !url.match(/\.(jpg|jpeg|png|gif|webp)(\?.*)?$/i)) { + img.src = `${url}${url.includes('?') ? '&' : '?'}format=webp` + } else { + img.src = url + } + }) + } + + /** + * 预加载字体 + */ + preloadFont(url, options = {}) { + return new Promise((resolve, reject) => { + const link = document.createElement('link') + link.rel = 'preload' + link.as = 'font' + link.href = url + link.crossOrigin = 'anonymous' + link.onload = resolve + link.onerror = reject + + // 添加到head + document.head.appendChild(link) + }) + } + + /** + * 通用预加载方法 + */ + preloadGeneric(url, type, options = {}) { + return new Promise((resolve, reject) => { + if (this.supports.linkRelPreload) { + const link = document.createElement('link') + link.rel = 'preload' + link.as = type + link.href = url + link.onload = resolve + link.onerror = reject + + // 添加到head + document.head.appendChild(link) + } else { + // 降级使用fetch + fetch(url, { mode: 'no-cors' }) + .then(() => resolve()) + .catch(reject) + } + }) + } + + /** + * 智能预加载多个资源 + * @param {Array} resources - 资源列表 + * @param {Object} options - 预加载选项 + */ + smartPreload(resources, options = {}) { + // 按优先级排序 + const sortedResources = [...resources].sort((a, b) => { + const priorityOrder = { + [PreloadPriority.HIGH]: 3, + [PreloadPriority.MEDIUM]: 2, + [PreloadPriority.LOW]: 1 + } + + return (priorityOrder[b.priority] || 0) - (priorityOrder[a.priority] || 0) + }) + + // 分批预加载 + const batches = this.createBatches(sortedResources, this.config.maxConcurrent) + + // 使用requestIdleCallback或setTimeout延迟执行 + const executePreload = () => { + this.processBatch(batches, 0) + } + + if (this.config.useRequestIdleCallback && this.supports.requestIdleCallback) { + requestIdleCallback(executePreload, { timeout: this.config.idleTimeout }) + } else { + setTimeout(executePreload, this.config.idleTimeout) + } + } + + /** + * 创建预加载批次 + */ + createBatches(resources, batchSize) { + const batches = [] + for (let i = 0; i < resources.length; i += batchSize) { + batches.push(resources.slice(i, i + batchSize)) + } + return batches + } + + /** + * 处理预加载批次 + */ + processBatch(batches, index) { + if (index >= batches.length) return + + const batch = batches[index] + const promises = batch.map(resource => { + return this.preloadResource(resource.url, resource.type, resource.options) + .catch(error => { + console.warn(`预加载失败: ${resource.url}`, error) + return null + }) + }) + + Promise.all(promises).then(() => { + // 处理下一批次 + if (this.config.useRequestIdleCallback && this.supports.requestIdleCallback) { + requestIdleCallback(() => this.processBatch(batches, index + 1)) + } else { + setTimeout(() => this.processBatch(batches, index + 1), 100) + } + }) + } + + /** + * 将预加载加入队列 + */ + queuePreload(url, type, options) { + return new Promise((resolve, reject) => { + this.preloadQueue.push({ + url, + type, + options, + resolve, + reject + }) + }) + } + + /** + * 处理队列中的预加载 + */ + processQueue() { + while (this.activePreloads < this.config.maxConcurrent && this.preloadQueue.length > 0) { + const item = this.preloadQueue.shift() + this.preloadResource(item.url, item.type, item.options) + .then(item.resolve) + .catch(item.reject) + } + } + + /** + * 检查是否应该预加载 + */ + shouldPreload() { + // 检查网络连接 + if (navigator.connection) { + const connection = navigator.connection + const effectiveType = connection.effectiveType + const saveData = connection.saveData + + // 如果用户开启了省流量模式,不预加载 + if (saveData) return false + + // 检查网络类型是否满足阈值 + const networkOrder = [ + NetworkType.SLOW_2G, + NetworkType._2G, + NetworkType._3G, + NetworkType._4G + ] + + const thresholdIndex = networkOrder.indexOf(this.config.networkThreshold) + const currentIndex = networkOrder.indexOf(effectiveType) + + if (currentIndex < thresholdIndex) return false + } + + return true + } + + /** + * 清理过期缓存 + */ + cleanExpiredCache() { + if (!this.config.enableCache) return + + const now = Date.now() + for (const [url, cached] of this.cache.entries()) { + if (now - cached.timestamp > this.config.cacheExpiration) { + this.cache.delete(url) + } + } + } + + /** + * 清空缓存 + */ + clearCache() { + this.cache.clear() + } + + /** + * 获取缓存统计 + */ + getCacheStats() { + return { + size: this.cache.size, + entries: Array.from(this.cache.entries()).map(([url, cached]) => ({ + url, + timestamp: cached.timestamp, + age: Date.now() - cached.timestamp + })) + } + } + + /** + * 观察元素进行预加载 + * @param {Element} element - 要观察的元素 + * @param {string} url - 预加载URL + * @param {string} type - 资源类型 + */ + observeElement(element, url, type) { + if (!this.observer) return + + element.dataset.preloadUrl = url + element.dataset.preloadType = type + this.observer.observe(element) + } + + /** + * 停止观察元素 + * @param {Element} element - 要停止观察的元素 + */ + unobserveElement(element) { + if (!this.observer) return + + this.observer.unobserve(element) + } + + /** + * 销毁预加载器 + */ + destroy() { + if (this.observer) { + this.observer.disconnect() + this.observer = null + } + + this.clearCache() + this.preloadQueue = [] + } +} + +// 创建默认预加载器实例 +const defaultPreloader = new ResourcePreloader() + +/** + * 智能预加载资源 + * @param {Array} resources - 资源列表 + * @param {Object} config - 配置选项 + */ +export function smartPreloadResources(resources, config = {}) { + const preloader = new ResourcePreloader(config) + preloader.smartPreload(resources) +} + +/** + * 预加载单个资源 + * @param {string} url - 资源URL + * @param {string} type - 资源类型 + * @param {Object} options - 预加载选项 + */ +export function preloadResource(url, type, options = {}) { + return defaultPreloader.preloadResource(url, type, options) +} + +/** + * 观察元素进行预加载 + * @param {Element} element - 要观察的元素 + * @param {string} url - 预加载URL + * @param {string} type - 资源类型 + */ +export function observeForPreload(element, url, type) { + defaultPreloader.observeElement(element, url, type) +} + +export default defaultPreloader \ No newline at end of file diff --git a/frontend/src/utils/retryManager.js b/frontend/src/utils/retryManager.js new file mode 100644 index 00000000..6650144b --- /dev/null +++ b/frontend/src/utils/retryManager.js @@ -0,0 +1,238 @@ +/** + * API请求重试机制 + * 提供自动重试功能和UI反馈 + */ + +import { ElMessage, ElNotification } from 'element-plus' + +// 重试配置 +const retryConfig = { + // 默认最大重试次数 + defaultMaxRetries: 3, + + // 默认重试延迟(毫秒) + defaultRetryDelay: 1000, + + // 指数退避因子 + backoffFactor: 2, + + // 最大重试延迟(毫秒) + maxRetryDelay: 10000, + + // 需要重试的HTTP状态码 + retryableStatusCodes: [408, 429, 500, 502, 503, 504], + + // 需要重试的网络错误类型 + retryableErrorTypes: ['NETWORK_ERROR', 'TIMEOUT', 'SERVER_ERROR'] +} + +/** + * 计算重试延迟时间 + * @param {number} retryCount - 当前重试次数 + * @param {number} baseDelay - 基础延迟时间 + * @returns {number} 计算后的延迟时间 + */ +function calculateRetryDelay(retryCount, baseDelay = retryConfig.defaultRetryDelay) { + const delay = baseDelay * Math.pow(retryConfig.backoffFactor, retryCount - 1) + return Math.min(delay, retryConfig.maxRetryDelay) +} + +/** + * 判断错误是否可重试 + * @param {Error} error - 错误对象 + * @returns {boolean} 是否可重试 + */ +function isRetryableError(error) { + // 检查是否是网络错误 + if (error.code === 'NETWORK_ERROR' || error.code === 'TIMEOUT') { + return true + } + + // 检查HTTP状态码 + if (error.response && error.response.status) { + return retryConfig.retryableStatusCodes.includes(error.response.status) + } + + // 检查错误类型 + if (error.type && retryConfig.retryableErrorTypes.includes(error.type)) { + return true + } + + return false +} + +/** + * 显示重试通知 + * @param {string} operation - 操作描述 + * @param {number} retryCount - 当前重试次数 + * @param {number} maxRetries - 最大重试次数 + * @param {number} delay - 延迟时间 + * @returns {Object} 通知对象 + */ +function showRetryNotification(operation, retryCount, maxRetries, delay) { + const message = `${operation} 失败,正在第 ${retryCount}/${maxRetries} 次重试...` + + return ElNotification({ + title: '请求重试', + message, + type: 'warning', + duration: delay, + showClose: false + }) +} + +/** + * 显示重试失败通知 + * @param {string} operation - 操作描述 + * @param {Error} error - 错误对象 + */ +function showRetryFailedNotification(operation, error) { + ElMessage.error({ + message: `${operation} 失败,已达到最大重试次数: ${error.message || '未知错误'}`, + duration: 5000 + }) +} + +/** + * 带重试机制的请求函数 + * @param {Function} requestFn - 请求函数 + * @param {Object} options - 重试选项 + * @param {string} options.operation - 操作描述 + * @param {number} options.maxRetries - 最大重试次数 + * @param {number} options.retryDelay - 基础重试延迟 + * @param {Function} options.onRetry - 重试回调 + * @param {Function} options.onFinalError - 最终错误回调 + * @returns {Promise} 请求结果 + */ +export async function retryRequest(requestFn, options = {}) { + const { + operation = '请求', + maxRetries = retryConfig.defaultMaxRetries, + retryDelay = retryConfig.defaultRetryDelay, + onRetry, + onFinalError + } = options + + let lastError = null + let retryCount = 0 + + // 第一次尝试 + try { + return await requestFn() + } catch (error) { + lastError = error + + // 如果错误不可重试,直接抛出 + if (!isRetryableError(error)) { + throw error + } + } + + // 重试循环 + for (retryCount = 1; retryCount <= maxRetries; retryCount++) { + const delay = calculateRetryDelay(retryCount, retryDelay) + + // 显示重试通知 + const notification = showRetryNotification(operation, retryCount, maxRetries, delay) + + // 调用重试回调 + if (onRetry) { + onRetry(retryCount, maxRetries, delay, lastError) + } + + // 等待延迟 + await new Promise(resolve => setTimeout(resolve, delay)) + + // 关闭通知 + notification.close() + + try { + // 执行重试请求 + const result = await requestFn() + + // 重试成功,显示成功消息 + ElMessage.success({ + message: `${operation} 在第 ${retryCount} 次重试后成功`, + duration: 3000 + }) + + return result + } catch (error) { + lastError = error + + // 如果错误不可重试或已达到最大重试次数,跳出循环 + if (!isRetryableError(error) || retryCount === maxRetries) { + break + } + } + } + + // 所有重试都失败 + showRetryFailedNotification(operation, lastError) + + // 调用最终错误回调 + if (onFinalError) { + onFinalError(lastError, retryCount) + } + + throw lastError +} + +/** + * 创建带重试机制的API请求函数 + * @param {Function} apiRequest - API请求函数 + * @param {Object} retryOptions - 重试选项 + * @returns {Function} 带重试机制的请求函数 + */ +export function createRetryableRequest(apiRequest, retryOptions = {}) { + return async function(...args) { + return retryRequest(() => apiRequest(...args), retryOptions) + } +} + +/** + * 为axios实例添加重试拦截器 + * @param {Object} axiosInstance - axios实例 + * @param {Object} options - 重试选项 + */ +export function addRetryInterceptor(axiosInstance, options = {}) { + axiosInstance.interceptors.response.use( + response => response, + async error => { + const config = error.config + + // 如果没有配置对象或已禁用重试,直接抛出错误 + if (!config || config.disableRetry === true) { + return Promise.reject(error) + } + + // 获取重试配置 + const maxRetries = config.maxRetries || options.maxRetries || retryConfig.defaultMaxRetries + const retryDelay = config.retryDelay || options.retryDelay || retryConfig.defaultRetryDelay + const operation = config.operation || options.operation || 'API请求' + + // 初始化重试计数 + config.retryCount = config.retryCount || 0 + + // 如果已达到最大重试次数或错误不可重试,直接抛出错误 + if (config.retryCount >= maxRetries || !isRetryableError(error)) { + return Promise.reject(error) + } + + // 增加重试计数 + config.retryCount += 1 + + // 计算延迟时间 + const delay = calculateRetryDelay(config.retryCount, retryDelay) + + // 显示重试通知 + showRetryNotification(operation, config.retryCount, maxRetries, delay) + + // 等待延迟 + await new Promise(resolve => setTimeout(resolve, delay)) + + // 重新发起请求 + return axiosInstance(config) + } + ) +} \ No newline at end of file diff --git a/frontend/src/utils/routePreloader.js b/frontend/src/utils/routePreloader.js new file mode 100644 index 00000000..1009b281 --- /dev/null +++ b/frontend/src/utils/routePreloader.js @@ -0,0 +1,171 @@ +/** + * 路由预加载工具 + * 用于在用户可能访问某个路由前预加载对应的组件 + */ + +// 预加载状态 +const preloadState = { + preloadedRoutes: new Set(), + isPreloading: false +} + +// 路由预加载映射表 +const routePreloadMap = { + // 首页 -> 类别排名 + 'Home': ['CategoryRanking'], + // 类别排名 -> 产品详情 + 'CategoryRanking': ['ProductDetail'], + // 产品详情 -> 产品对比 + 'ProductDetail': ['ProductComparison'], + // 产品对比 -> 类别排名 + 'ProductComparison': ['CategoryRanking'] +} + +// 路由组件映射 +const routeComponentMap = { + 'Home': () => import('../views/Home.vue'), + 'CategoryRanking': () => import('../views/CategoryRanking.vue'), + 'ProductDetail': () => import('../views/ProductDetail.vue'), + 'ProductComparison': () => import('../views/ProductComparison.vue'), + 'PerformanceMonitor': () => import('../views/PerformanceMonitor.vue'), + 'NotFound': () => import('../views/NotFound.vue') +} + +/** + * 预加载指定路由的组件 + * @param {string} routeName - 路由名称 + */ +const preloadRouteComponent = async (routeName) => { + if (preloadState.preloadedRoutes.has(routeName)) { + return + } + + try { + const componentLoader = routeComponentMap[routeName] + if (componentLoader) { + await componentLoader() + preloadState.preloadedRoutes.add(routeName) + console.log(`预加载路由组件成功: ${routeName}`) + } + } catch (error) { + console.error(`预加载路由组件失败: ${routeName}`, error) + } +} + +/** + * 根据当前路由预加载可能访问的下一个路由 + * @param {string} currentRouteName - 当前路由名称 + */ +const preloadNextRoutes = (currentRouteName) => { + const nextRoutes = routePreloadMap[currentRouteName] || [] + + // 延迟预加载,避免影响当前页面性能 + setTimeout(() => { + nextRoutes.forEach(routeName => { + preloadRouteComponent(routeName) + }) + }, 1000) // 1秒后开始预加载 +} + +/** + * 预加载所有路由组件 + */ +const preloadAllRoutes = async () => { + if (preloadState.isPreloading) return + + preloadState.isPreloading = true + + try { + const preloadPromises = Object.keys(routeComponentMap).map(routeName => + preloadRouteComponent(routeName) + ) + + await Promise.all(preloadPromises) + console.log('所有路由组件预加载完成') + } catch (error) { + console.error('预加载所有路由组件失败', error) + } finally { + preloadState.isPreloading = false + } +} + +/** + * 清除预加载状态 + */ +const clearPreloadedRoutes = () => { + preloadState.preloadedRoutes.clear() + preloadState.isPreloading = false +} + +/** + * 获取预加载状态 + * @returns {Object} 预加载状态 + */ +const getPreloadState = () => { + return { + preloadedRoutes: Array.from(preloadState.preloadedRoutes), + isPreloading: preloadState.isPreloading + } +} + +/** + * 智能预加载 - 根据用户行为预测可能访问的路由 + */ +const smartPreload = { + // 鼠标悬停预加载 + setupHoverPreload(router) { + document.addEventListener('mouseover', (event) => { + const linkElement = event.target.closest('a[href]') + if (!linkElement) return + + const href = linkElement.getAttribute('href') + if (!href || href.startsWith('http')) return + + // 解析路由路径 + const routePath = href.replace(/^\//, '') + + // 根据路径预测路由名称 + let routeName = null + if (routePath === '') routeName = 'Home' + else if (routePath.startsWith('category/')) routeName = 'CategoryRanking' + else if (routePath.startsWith('product/')) routeName = 'ProductDetail' + else if (routePath === 'compare') routeName = 'ProductComparison' + else if (routePath === 'monitor') routeName = 'PerformanceMonitor' + + if (routeName && !preloadState.preloadedRoutes.has(routeName)) { + // 延迟预加载,避免用户只是快速划过 + setTimeout(() => { + if (linkElement.matches(':hover')) { + preloadRouteComponent(routeName) + } + }, 200) + } + }) + }, + + // 空闲时间预加载 + setupIdlePreload() { + if ('requestIdleCallback' in window) { + requestIdleCallback(() => { + // 在浏览器空闲时预加载常用路由 + preloadRouteComponent('Home') + preloadRouteComponent('CategoryRanking') + }) + } else { + // 降级方案:延迟预加载 + setTimeout(() => { + preloadRouteComponent('Home') + preloadRouteComponent('CategoryRanking') + }, 3000) + } + } +} + +export { + preloadRouteComponent, + preloadNextRoutes, + preloadAllRoutes, + clearPreloadedRoutes, + getPreloadState, + smartPreload +} \ No newline at end of file diff --git a/frontend/src/utils/security.js b/frontend/src/utils/security.js new file mode 100644 index 00000000..17c976e7 --- /dev/null +++ b/frontend/src/utils/security.js @@ -0,0 +1,484 @@ +/** + * 安全工具类 + * 提供数据加密、解密、安全验证等功能 + */ + +import CryptoJS from 'crypto-js' + +// 加密配置 +const ENCRYPTION_CONFIG = { + // 默认密钥(实际项目中应该从环境变量获取) + defaultKey: 'HardwarePerformance2023SecretKey', + // 默认向量(实际项目中应该从环境变量获取) + defaultIv: 'Hardware2023IV', + // 加密算法 + algorithm: 'AES', + // 加密模式 + mode: 'CBC', + // 填充方式 + padding: 'Pkcs7' +} + +/** + * AES加密 + * @param {string} data 要加密的数据 + * @param {string} key 加密密钥 + * @param {string} iv 初始化向量 + * @returns {string} 加密后的字符串 + */ +export function aesEncrypt(data, key = ENCRYPTION_CONFIG.defaultKey, iv = ENCRYPTION_CONFIG.defaultIv) { + try { + const keyWords = CryptoJS.enc.Utf8.parse(key) + const ivWords = CryptoJS.enc.Utf8.parse(iv) + const encrypted = CryptoJS.AES.encrypt(data, keyWords, { + iv: ivWords, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }) + return encrypted.toString() + } catch (error) { + console.error('加密失败:', error) + return '' + } +} + +/** + * AES解密 + * @param {string} encryptedData 要解密的数据 + * @param {string} key 解密密钥 + * @param {string} iv 初始化向量 + * @returns {string} 解密后的字符串 + */ +export function aesDecrypt(encryptedData, key = ENCRYPTION_CONFIG.defaultKey, iv = ENCRYPTION_CONFIG.defaultIv) { + try { + const keyWords = CryptoJS.enc.Utf8.parse(key) + const ivWords = CryptoJS.enc.Utf8.parse(iv) + const decrypted = CryptoJS.AES.decrypt(encryptedData, keyWords, { + iv: ivWords, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }) + return decrypted.toString(CryptoJS.enc.Utf8) + } catch (error) { + console.error('解密失败:', error) + return '' + } +} + +/** + * Base64编码 + * @param {string} data 要编码的数据 + * @returns {string} Base64编码后的字符串 + */ +export function base64Encode(data) { + try { + return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data)) + } catch (error) { + console.error('Base64编码失败:', error) + return '' + } +} + +/** + * Base64解码 + * @param {string} base64Data Base64编码的数据 + * @returns {string} 解码后的字符串 + */ +export function base64Decode(base64Data) { + try { + return CryptoJS.enc.Base64.parse(base64Data).toString(CryptoJS.enc.Utf8) + } catch (error) { + console.error('Base64解码失败:', error) + return '' + } +} + +/** + * MD5哈希 + * @param {string} data 要哈希的数据 + * @returns {string} MD5哈希值 + */ +export function md5Hash(data) { + try { + return CryptoJS.MD5(data).toString() + } catch (error) { + console.error('MD5哈希失败:', error) + return '' + } +} + +/** + * SHA256哈希 + * @param {string} data 要哈希的数据 + * @returns {string} SHA256哈希值 + */ +export function sha256Hash(data) { + try { + return CryptoJS.SHA256(data).toString() + } catch (error) { + console.error('SHA256哈希失败:', error) + return '' + } +} + +/** + * 生成随机字符串 + * @param {number} length 字符串长度 + * @param {string} charset 字符集 + * @returns {string} 随机字符串 + */ +export function generateRandomString(length = 16, charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') { + let result = '' + for (let i = 0; i < length; i++) { + result += charset.charAt(Math.floor(Math.random() * charset.length)) + } + return result +} + +/** + * 生成安全令牌 + * @param {number} length 令牌长度 + * @returns {string} 安全令牌 + */ +export function generateSecureToken(length = 32) { + // 使用更安全的字符集 + const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?' + return generateRandomString(length, charset) +} + +/** + * 验证密码强度 + * @param {string} password 密码 + * @returns {object} 密码强度信息 + */ +export function validatePasswordStrength(password) { + const result = { + score: 0, + feedback: [], + isStrong: false + } + + // 检查长度 + if (password.length < 8) { + result.feedback.push('密码长度至少需要8位') + } else { + result.score += 1 + } + + // 检查是否包含小写字母 + if (!/[a-z]/.test(password)) { + result.feedback.push('密码需要包含小写字母') + } else { + result.score += 1 + } + + // 检查是否包含大写字母 + if (!/[A-Z]/.test(password)) { + result.feedback.push('密码需要包含大写字母') + } else { + result.score += 1 + } + + // 检查是否包含数字 + if (!/[0-9]/.test(password)) { + result.feedback.push('密码需要包含数字') + } else { + result.score += 1 + } + + // 检查是否包含特殊字符 + if (!/[!@#$%^&*()_+\-=\[\]{}|;:,.<>?]/.test(password)) { + result.feedback.push('密码需要包含特殊字符') + } else { + result.score += 1 + } + + // 判断密码强度 + result.isStrong = result.score >= 4 + + return result +} + +/** + * 验证邮箱格式 + * @param {string} email 邮箱地址 + * @returns {boolean} 是否为有效邮箱 + */ +export function validateEmail(email) { + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ + return emailRegex.test(email) +} + +/** + * 验证手机号格式(中国) + * @param {string} phone 手机号 + * @returns {boolean} 是否为有效手机号 + */ +export function validatePhone(phone) { + const phoneRegex = /^1[3-9]\d{9}$/ + return phoneRegex.test(phone) +} + +/** + * 验证URL格式 + * @param {string} url URL地址 + * @returns {boolean} 是否为有效URL + */ +export function validateUrl(url) { + try { + new URL(url) + return true + } catch (error) { + return false + } +} + +/** + * 防XSS攻击 - 清理HTML + * @param {string} html HTML字符串 + * @returns {string} 清理后的HTML + */ +export function sanitizeHtml(html) { + // 简单的XSS防护,实际项目中建议使用DOMPurify等专业库 + return html + .replace(/)<[^<]*)*<\/script>/gi, '') + .replace(/)<[^<]*)*<\/iframe>/gi, '') + .replace(/javascript:/gi, '') + .replace(/on\w+\s*=/gi, '') +} + +/** + * 防SQL注入 - 清理输入 + * @param {string} input 输入字符串 + * @returns {string} 清理后的字符串 + */ +export function sanitizeInput(input) { + // 简单的SQL注入防护,实际项目中应在后端使用参数化查询 + return input + .replace(/['"\\;]/g, '') + .replace(/--/g, '') + .replace(/\/\*/g, '') + .replace(/\*\//g, '') +} + +/** + * 生成CSRF令牌 + * @returns {string} CSRF令牌 + */ +export function generateCSRFToken() { + return generateSecureToken(64) +} + +/** + * 验证CSRF令牌 + * @param {string} token 要验证的令牌 + * @param {string} sessionToken 会话中的令牌 + * @returns {boolean} 是否有效 + */ +export function validateCSRFToken(token, sessionToken) { + return token && sessionToken && token === sessionToken +} + +/** + * 创建安全的localStorage包装器 + * @param {string} key 键名 + * @param {any} value 值 + * @param {boolean} encrypt 是否加密 + * @returns {boolean} 是否成功 + */ +export function secureLocalStorageSet(key, value, encrypt = false) { + try { + const data = JSON.stringify(value) + const finalData = encrypt ? aesEncrypt(data) : data + localStorage.setItem(key, finalData) + return true + } catch (error) { + console.error('localStorage存储失败:', error) + return false + } +} + +/** + * 创建安全的localStorage读取器 + * @param {string} key 键名 + * @param {boolean} decrypt 是否解密 + * @param {any} defaultValue 默认值 + * @returns {any} 读取的值 + */ +export function secureLocalStorageGet(key, decrypt = false, defaultValue = null) { + try { + const data = localStorage.getItem(key) + if (!data) return defaultValue + + const finalData = decrypt ? aesDecrypt(data) : data + return JSON.parse(finalData) + } catch (error) { + console.error('localStorage读取失败:', error) + return defaultValue + } +} + +/** + * 创建安全的sessionStorage包装器 + * @param {string} key 键名 + * @param {any} value 值 + * @param {boolean} encrypt 是否加密 + * @returns {boolean} 是否成功 + */ +export function secureSessionStorageSet(key, value, encrypt = false) { + try { + const data = JSON.stringify(value) + const finalData = encrypt ? aesEncrypt(data) : data + sessionStorage.setItem(key, finalData) + return true + } catch (error) { + console.error('sessionStorage存储失败:', error) + return false + } +} + +/** + * 创建安全的sessionStorage读取器 + * @param {string} key 键名 + * @param {boolean} decrypt 是否解密 + * @param {any} defaultValue 默认值 + * @returns {any} 读取的值 + */ +export function secureSessionStorageGet(key, decrypt = false, defaultValue = null) { + try { + const data = sessionStorage.getItem(key) + if (!data) return defaultValue + + const finalData = decrypt ? aesDecrypt(data) : data + return JSON.parse(finalData) + } catch (error) { + console.error('sessionStorage读取失败:', error) + return defaultValue + } +} + +/** + * 创建安全的Cookie包装器 + * @param {string} name Cookie名称 + * @param {string} value Cookie值 + * @param {number} days 过期天数 + * @param {boolean} secure 是否仅HTTPS + * @param {boolean} httpOnly 是否仅HTTP + * @param {string} sameSite SameSite属性 + * @returns {boolean} 是否成功 + */ +export function secureCookieSet(name, value, days = 7, secure = true, httpOnly = false, sameSite = 'Strict') { + try { + let expires = '' + if (days) { + const date = new Date() + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)) + expires = '; expires=' + date.toUTCString() + } + + let cookieString = `${name}=${value || ''}${expires}; path=/` + + if (secure) { + cookieString += '; secure' + } + + if (httpOnly) { + cookieString += '; HttpOnly' + } + + if (sameSite) { + cookieString += `; SameSite=${sameSite}` + } + + document.cookie = cookieString + return true + } catch (error) { + console.error('Cookie设置失败:', error) + return false + } +} + +/** + * 创建安全的Cookie读取器 + * @param {string} name Cookie名称 + * @returns {string|null} Cookie值 + */ +export function secureCookieGet(name) { + try { + const nameEQ = name + '=' + const ca = document.cookie.split(';') + for (let i = 0; i < ca.length; i++) { + let c = ca[i] + while (c.charAt(0) === ' ') { + c = c.substring(1, c.length) + } + if (c.indexOf(nameEQ) === 0) { + return decodeURIComponent(c.substring(nameEQ.length, c.length)) + } + } + return null + } catch (error) { + console.error('Cookie读取失败:', error) + return null + } +} + +/** + * 删除Cookie + * @param {string} name Cookie名称 + * @returns {boolean} 是否成功 + */ +export function secureCookieDelete(name) { + try { + document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;` + return true + } catch (error) { + console.error('Cookie删除失败:', error) + return false + } +} + +/** + * 防止点击劫持 - 设置X-Frame-Options + * 在实际项目中,这应该由服务器设置 + */ +export function preventClickjacking() { + // 这只是一个示例,实际X-Frame-Options应该由服务器设置 + if (window.self !== window.top) { + // 页面被嵌入到iframe中 + window.top.location = window.self.location + } +} + +/** + * 防止内容嗅探 - 设置X-Content-Type-Options + * 在实际项目中,这应该由服务器设置 + */ +export function preventContentTypeSniffing() { + // 这只是一个示例,实际X-Content-Type-Options应该由服务器设置 + const meta = document.createElement('meta') + meta.httpEquiv = 'X-Content-Type-Options' + meta.content = 'nosniff' + document.head.appendChild(meta) +} + +/** + * 防止MIME类型混淆攻击 + * 在实际项目中,这应该由服务器设置 + */ +export function preventMimeSniffing() { + // 这只是一个示例,实际X-Content-Type-Options应该由服务器设置 + const meta = document.createElement('meta') + meta.httpEquiv = 'X-Content-Type-Options' + meta.content = 'nosniff' + document.head.appendChild(meta) +} + +/** + * 启用浏览器安全策略 + */ +export function enableBrowserSecurity() { + preventClickjacking() + preventContentTypeSniffing() + preventMimeSniffing() +} \ No newline at end of file diff --git a/frontend/src/utils/statePersist.js b/frontend/src/utils/statePersist.js new file mode 100644 index 00000000..72ae70c3 --- /dev/null +++ b/frontend/src/utils/statePersist.js @@ -0,0 +1,489 @@ +/** + * 状态持久化工具 + * 支持多种存储方式:localStorage、sessionStorage、IndexedDB、内存存储 + * 支持数据加密、过期时间、版本控制等功能 + */ + +// 存储类型枚举 +export const StorageType = { + LOCAL: 'localStorage', + SESSION: 'sessionStorage', + INDEXED_DB: 'indexedDB', + MEMORY: 'memory' +} + +// 默认配置 +const defaultConfig = { + // 默认存储类型 + storageType: StorageType.LOCAL, + // 是否启用加密 + encrypt: false, + // 加密密钥 + encryptKey: 'default-key', + // 默认过期时间(毫秒),0表示永不过期 + defaultExpire: 0, + // 版本号,用于数据迁移 + version: '1.0.0', + // 键名前缀 + prefix: 'app_', + // 错误处理函数 + onError: (error) => console.error('Storage error:', error) +} + +/** + * 状态持久化管理器 + */ +class StatePersistManager { + constructor(config = {}) { + this.config = { ...defaultConfig, ...config } + this.memoryStorage = new Map() + this.indexedDBCache = new Map() + this.initIndexedDB() + } + + /** + * 初始化IndexedDB + */ + async initIndexedDB() { + if (typeof window === 'undefined' || !window.indexedDB) { + console.warn('IndexedDB not supported') + return + } + + try { + this.db = await this.openIndexedDB() + } catch (error) { + this.config.onError(error) + } + } + + /** + * 打开IndexedDB数据库 + */ + openIndexedDB() { + return new Promise((resolve, reject) => { + const request = indexedDB.open('StatePersistDB', 1) + + request.onerror = () => reject(request.error) + request.onsuccess = () => resolve(request.result) + + request.onupgradeneeded = (event) => { + const db = event.target.result + if (!db.objectStoreNames.contains('stateStore')) { + db.createObjectStore('stateStore', { keyPath: 'key' }) + } + } + }) + } + + /** + * 生成完整的键名 + */ + getFullKey(key) { + return `${this.config.prefix}${key}` + } + + /** + * 序列化数据 + */ + serialize(data, expire = 0) { + const payload = { + data, + timestamp: Date.now(), + expire: expire > 0 ? Date.now() + expire : 0, + version: this.config.version + } + + let serialized = JSON.stringify(payload) + + // 加密处理 + if (this.config.encrypt) { + serialized = this.encrypt(serialized, this.config.encryptKey) + } + + return serialized + } + + /** + * 反序列化数据 + */ + deserialize(serialized) { + try { + // 解密处理 + if (this.config.encrypt) { + serialized = this.decrypt(serialized, this.config.encryptKey) + } + + const payload = JSON.parse(serialized) + + // 检查是否过期 + if (payload.expire > 0 && Date.now() > payload.expire) { + return null + } + + return payload.data + } catch (error) { + this.config.onError(error) + return null + } + } + + /** + * 简单加密(实际项目中应使用更安全的加密算法) + */ + encrypt(text, key) { + // 这里使用简单的Base64编码,实际项目中应使用更安全的加密算法 + return btoa(unescape(encodeURIComponent(text))) + } + + /** + * 简单解密 + */ + decrypt(text, key) { + try { + return decodeURIComponent(escape(atob(text))) + } catch (error) { + this.config.onError(error) + return '' + } + } + + /** + * 设置数据 + */ + async set(key, value, options = {}) { + const { + storageType = this.config.storageType, + expire = this.config.defaultExpire + } = options + + const fullKey = this.getFullKey(key) + const serialized = this.serialize(value, expire) + + try { + switch (storageType) { + case StorageType.LOCAL: + localStorage.setItem(fullKey, serialized) + break + case StorageType.SESSION: + sessionStorage.setItem(fullKey, serialized) + break + case StorageType.INDEXED_DB: + await this.setIndexedDB(fullKey, serialized, expire) + break + case StorageType.MEMORY: + this.memoryStorage.set(fullKey, { value: serialized, expire }) + break + default: + throw new Error(`Unsupported storage type: ${storageType}`) + } + return true + } catch (error) { + this.config.onError(error) + return false + } + } + + /** + * 获取数据 + */ + async get(key, options = {}) { + const { + storageType = this.config.storageType, + defaultValue = null + } = options + + const fullKey = this.getFullKey(key) + + try { + let serialized + + switch (storageType) { + case StorageType.LOCAL: + serialized = localStorage.getItem(fullKey) + break + case StorageType.SESSION: + serialized = sessionStorage.getItem(fullKey) + break + case StorageType.INDEXED_DB: + serialized = await this.getIndexedDB(fullKey) + break + case StorageType.MEMORY: + const memoryItem = this.memoryStorage.get(fullKey) + if (memoryItem) { + // 检查是否过期 + if (memoryItem.expire > 0 && Date.now() > memoryItem.expire) { + this.memoryStorage.delete(fullKey) + return defaultValue + } + serialized = memoryItem.value + } + break + default: + throw new Error(`Unsupported storage type: ${storageType}`) + } + + if (!serialized) { + return defaultValue + } + + const data = this.deserialize(serialized) + return data !== null ? data : defaultValue + } catch (error) { + this.config.onError(error) + return defaultValue + } + } + + /** + * 删除数据 + */ + async remove(key, options = {}) { + const { + storageType = this.config.storageType + } = options + + const fullKey = this.getFullKey(key) + + try { + switch (storageType) { + case StorageType.LOCAL: + localStorage.removeItem(fullKey) + break + case StorageType.SESSION: + sessionStorage.removeItem(fullKey) + break + case StorageType.INDEXED_DB: + await this.removeIndexedDB(fullKey) + break + case StorageType.MEMORY: + this.memoryStorage.delete(fullKey) + break + default: + throw new Error(`Unsupported storage type: ${storageType}`) + } + return true + } catch (error) { + this.config.onError(error) + return false + } + } + + /** + * 清空所有数据 + */ + async clear(options = {}) { + const { + storageType = this.config.storageType + } = options + + try { + switch (storageType) { + case StorageType.LOCAL: + // 只清空带前缀的键 + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i) + if (key && key.startsWith(this.config.prefix)) { + localStorage.removeItem(key) + } + } + break + case StorageType.SESSION: + // 只清空带前缀的键 + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i) + if (key && key.startsWith(this.config.prefix)) { + sessionStorage.removeItem(key) + } + } + break + case StorageType.INDEXED_DB: + await this.clearIndexedDB() + break + case StorageType.MEMORY: + this.memoryStorage.clear() + break + default: + throw new Error(`Unsupported storage type: ${storageType}`) + } + return true + } catch (error) { + this.config.onError(error) + return false + } + } + + /** + * 获取所有键名 + */ + async keys(options = {}) { + const { + storageType = this.config.storageType + } = options + + try { + let keys = [] + + switch (storageType) { + case StorageType.LOCAL: + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i) + if (key && key.startsWith(this.config.prefix)) { + keys.push(key.substring(this.config.prefix.length)) + } + } + break + case StorageType.SESSION: + for (let i = 0; i < sessionStorage.length; i++) { + const key = sessionStorage.key(i) + if (key && key.startsWith(this.config.prefix)) { + keys.push(key.substring(this.config.prefix.length)) + } + } + break + case StorageType.INDEXED_DB: + keys = await this.keysIndexedDB() + break + case StorageType.MEMORY: + for (const key of this.memoryStorage.keys()) { + if (key.startsWith(this.config.prefix)) { + keys.push(key.substring(this.config.prefix.length)) + } + } + break + default: + throw new Error(`Unsupported storage type: ${storageType}`) + } + + return keys + } catch (error) { + this.config.onError(error) + return [] + } + } + + /** + * IndexedDB操作方法 + */ + async setIndexedDB(key, value, expire) { + if (!this.db) { + await this.initIndexedDB() + } + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction(['stateStore'], 'readwrite') + const store = transaction.objectStore('stateStore') + + const request = store.put({ + key, + value, + expire: expire > 0 ? Date.now() + expire : 0 + }) + + request.onerror = () => reject(request.error) + request.onsuccess = () => resolve(request.result) + }) + } + + async getIndexedDB(key) { + if (!this.db) { + await this.initIndexedDB() + } + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction(['stateStore'], 'readonly') + const store = transaction.objectStore('stateStore') + + const request = store.get(key) + + request.onerror = () => reject(request.error) + request.onsuccess = () => { + const result = request.result + if (!result) { + resolve(null) + return + } + + // 检查是否过期 + if (result.expire > 0 && Date.now() > result.expire) { + this.removeIndexedDB(key) + resolve(null) + return + } + + resolve(result.value) + } + }) + } + + async removeIndexedDB(key) { + if (!this.db) { + await this.initIndexedDB() + } + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction(['stateStore'], 'readwrite') + const store = transaction.objectStore('stateStore') + + const request = store.delete(key) + + request.onerror = () => reject(request.error) + request.onsuccess = () => resolve(request.result) + }) + } + + async clearIndexedDB() { + if (!this.db) { + await this.initIndexedDB() + } + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction(['stateStore'], 'readwrite') + const store = transaction.objectStore('stateStore') + + const request = store.clear() + + request.onerror = () => reject(request.error) + request.onsuccess = () => resolve(request.result) + }) + } + + async keysIndexedDB() { + if (!this.db) { + await this.initIndexedDB() + } + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction(['stateStore'], 'readonly') + const store = transaction.objectStore('stateStore') + + const request = store.getAllKeys() + + request.onerror = () => reject(request.error) + request.onsuccess = () => { + const keys = request.result + const filteredKeys = keys + .filter(key => key.startsWith(this.config.prefix)) + .map(key => key.substring(this.config.prefix.length)) + + resolve(filteredKeys) + } + }) + } +} + +// 创建默认实例 +const defaultPersistManager = new StatePersistManager() + +// 导出便捷方法 +export const setItem = (key, value, options) => defaultPersistManager.set(key, value, options) +export const getItem = (key, options) => defaultPersistManager.get(key, options) +export const removeItem = (key, options) => defaultPersistManager.remove(key, options) +export const clearItems = (options) => defaultPersistManager.clear(options) +export const getKeys = (options) => defaultPersistManager.keys(options) + +// 导出管理器类 +export { StatePersistManager } + +// 导出默认实例 +export default defaultPersistManager \ No newline at end of file diff --git a/frontend/src/views/CacheManagement.vue b/frontend/src/views/CacheManagement.vue new file mode 100644 index 00000000..129d4534 --- /dev/null +++ b/frontend/src/views/CacheManagement.vue @@ -0,0 +1,257 @@ +/** + * 缓存管理页面 + * 提供缓存状态查看和管理功能 + */ + + + + + + \ No newline at end of file diff --git a/frontend/src/views/PerformanceMonitor.vue b/frontend/src/views/PerformanceMonitor.vue new file mode 100644 index 00000000..d8e1c68d --- /dev/null +++ b/frontend/src/views/PerformanceMonitor.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/frontend/tests/e2e/global-setup.js b/frontend/tests/e2e/global-setup.js new file mode 100644 index 00000000..30b6a746 --- /dev/null +++ b/frontend/tests/e2e/global-setup.js @@ -0,0 +1,72 @@ +const { chromium } = require('@playwright/test') + +async function globalSetup(config) { + console.log('🚀 开始全局设置...') + + // 获取浏览器实例 + const browser = await chromium.launch() + const context = await browser.newContext() + const page = await context.newPage() + + try { + // 设置测试数据 + await setupTestData(page) + + // 设置用户认证 + await setupAuthentication(page) + + // 设置测试环境变量 + await setupEnvironmentVariables() + + console.log('✅ 全局设置完成') + } catch (error) { + console.error('❌ 全局设置失败:', error) + throw error + } finally { + await context.close() + await browser.close() + } +} + +async function setupTestData(page) { + console.log('📊 设置测试数据...') + + // 这里可以设置测试数据,例如: + // 1. 创建测试用户 + // 2. 准备测试产品数据 + // 3. 设置测试类别等 + + // 示例:通过API设置测试数据 + // await page.goto('/api/test/setup') + // await page.waitForResponse(response => response.status() === 200) +} + +async function setupAuthentication(page) { + console.log('🔐 设置用户认证...') + + // 这里可以设置测试用户认证,例如: + // 1. 创建测试用户 + // 2. 登录测试用户 + // 3. 保存认证令牌 + + // 示例:通过API登录 + // await page.goto('/api/auth/login') + // await page.fill('[data-testid="username"]', 'testuser') + // await page.fill('[data-testid="password"]', 'testpassword') + // await page.click('[data-testid="login-button"]') + // await page.waitForResponse(response => response.status() === 200) + + // 保存认证状态 + // await context.storageState({ path: 'test-auth-state.json' }) +} + +async function setupEnvironmentVariables() { + console.log('🌍 设置环境变量...') + + // 设置测试环境变量 + process.env.TEST_MODE = 'true' + process.env.API_BASE_URL = 'http://localhost:7001/api' + process.env.TEST_TIMEOUT = '30000' +} + +module.exports = globalSetup \ No newline at end of file diff --git a/frontend/tests/e2e/global-teardown.js b/frontend/tests/e2e/global-teardown.js new file mode 100644 index 00000000..fd69d06e --- /dev/null +++ b/frontend/tests/e2e/global-teardown.js @@ -0,0 +1,120 @@ +const { chromium } = require('@playwright/test') + +async function globalTeardown(config) { + console.log('🧹 开始全局清理...') + + // 获取浏览器实例 + const browser = await chromium.launch() + const context = await browser.newContext() + const page = await context.newPage() + + try { + // 清理测试数据 + await cleanupTestData(page) + + // 清理用户认证 + await cleanupAuthentication() + + // 清理环境变量 + await cleanupEnvironmentVariables() + + // 清理测试文件 + await cleanupTestFiles() + + console.log('✅ 全局清理完成') + } catch (error) { + console.error('❌ 全局清理失败:', error) + throw error + } finally { + await context.close() + await browser.close() + } +} + +async function cleanupTestData(page) { + console.log('📊 清理测试数据...') + + // 这里可以清理测试数据,例如: + // 1. 删除测试用户 + // 2. 清理测试产品数据 + // 3. 重置测试类别等 + + // 示例:通过API清理测试数据 + // await page.goto('/api/test/cleanup') + // await page.waitForResponse(response => response.status() === 200) +} + +async function cleanupAuthentication() { + console.log('🔐 清理用户认证...') + + // 这里可以清理用户认证,例如: + // 1. 删除测试用户 + // 2. 清理认证令牌 + + // 示例:删除认证状态文件 + // const fs = require('fs') + // if (fs.existsSync('test-auth-state.json')) { + // fs.unlinkSync('test-auth-state.json') + // } +} + +async function cleanupEnvironmentVariables() { + console.log('🌍 清理环境变量...') + + // 清理测试环境变量 + delete process.env.TEST_MODE + delete process.env.API_BASE_URL + delete process.env.TEST_TIMEOUT +} + +async function cleanupTestFiles() { + console.log('📁 清理测试文件...') + + // 清理测试生成的文件 + const fs = require('fs') + const path = require('path') + + // 清理测试报告目录 + const reportDirs = ['test-results', 'playwright-report'] + reportDirs.forEach(dir => { + const dirPath = path.resolve(process.cwd(), dir) + if (fs.existsSync(dirPath)) { + // 保留目录,但清理其中的文件 + const files = fs.readdirSync(dirPath) + files.forEach(file => { + const filePath = path.join(dirPath, file) + const stat = fs.statSync(filePath) + + if (stat.isDirectory()) { + // 递归删除子目录 + deleteFolderRecursive(filePath) + } else { + // 删除文件 + fs.unlinkSync(filePath) + } + }) + } + }) +} + +// 递归删除文件夹 +function deleteFolderRecursive(folderPath) { + const fs = require('fs') + const path = require('path') + + if (fs.existsSync(folderPath)) { + fs.readdirSync(folderPath).forEach(file => { + const curPath = path.join(folderPath, file) + if (fs.lstatSync(curPath).isDirectory()) { + // 递归删除子目录 + deleteFolderRecursive(curPath) + } else { + // 删除文件 + fs.unlinkSync(curPath) + } + }) + fs.rmdirSync(folderPath) + } +} + +module.exports = globalTeardown \ No newline at end of file diff --git a/frontend/tests/e2e/user-journey.spec.js b/frontend/tests/e2e/user-journey.spec.js new file mode 100644 index 00000000..032005d9 --- /dev/null +++ b/frontend/tests/e2e/user-journey.spec.js @@ -0,0 +1,315 @@ +import { test, expect, chromium } from '@playwright/test' + +test.describe('用户旅程测试', () => { + let browser + let context + let page + + test.beforeAll(async () => { + // 启动浏览器 + browser = await chromium.launch() + }) + + test.afterAll(async () => { + // 关闭浏览器 + await browser.close() + }) + + test.beforeEach(async () => { + // 创建新的浏览器上下文和页面 + context = await browser.newContext() + page = await context.newPage() + + // 设置视口大小 + await page.setViewportSize({ width: 1280, height: 720 }) + }) + + test.afterEach(async () => { + // 关闭浏览器上下文 + await context.close() + }) + + test('用户应该能够浏览首页并选择产品类别', async () => { + // 访问首页 + await page.goto('/') + + // 检查页面标题 + await expect(page).toHaveTitle(/硬件性能排行榜/) + + // 检查应用标题 + await expect(page.locator('.header__title')).toContainText('硬件性能排行榜') + + // 等待类别卡片加载 + await page.waitForSelector('.category-card') + + // 检查类别卡片数量 + const categoryCards = await page.locator('.category-card').count() + expect(categoryCards).toBeGreaterThan(0) + + // 点击第一个类别卡片 + await page.locator('.category-card').first().click() + + // 检查是否跳转到类别排名页面 + await expect(page).toHaveURL(/\/category\/\d+/) + + // 检查页面标题是否更新为类别名称 + const categoryName = await page.locator('.page-title').textContent() + expect(categoryName).toBeTruthy() + }) + + test('用户应该能够浏览产品排名列表', async () => { + // 直接访问类别排名页面 + await page.goto('/category/1') + + // 等待产品列表加载 + await page.waitForSelector('.product-card') + + // 检查产品卡片数量 + const productCards = await page.locator('.product-card').count() + expect(productCards).toBeGreaterThan(0) + + // 检查排名显示 + const firstProductRank = await page.locator('.product-card').first().locator('.product-rank').textContent() + expect(firstProductRank).toContain('#1') + + // 点击第一个产品卡片 + await page.locator('.product-card').first().click() + + // 检查是否跳转到产品详情页面 + await expect(page).toHaveURL(/\/product\/\d+/) + + // 检查产品详情页面内容 + await expect(page.locator('.product-detail')).toBeVisible() + await expect(page.locator('.product-name')).toBeVisible() + await expect(page.locator('.product-specs')).toBeVisible() + }) + + test('用户应该能够使用搜索功能查找产品', async () => { + // 访问类别排名页面 + await page.goto('/category/1') + + // 等待搜索框加载 + await page.waitForSelector('.search-input') + + // 输入搜索关键词 + await page.fill('.search-input', 'Intel') + + // 点击搜索按钮 + await page.click('.search-button') + + // 等待搜索结果加载 + await page.waitForSelector('.product-card') + + // 检查搜索结果 + const productCards = await page.locator('.product-card').count() + expect(productCards).toBeGreaterThan(0) + + // 检查搜索结果是否包含搜索关键词 + const firstProductName = await page.locator('.product-card').first().locator('.product-name').textContent() + expect(firstProductName.toLowerCase()).toContain('intel'.toLowerCase()) + }) + + test('用户应该能够使用筛选功能过滤产品', async () => { + // 访问类别排名页面 + await page.goto('/category/1') + + // 等待筛选器加载 + await page.waitForSelector('.product-filter') + + // 选择品牌筛选 + await page.selectOption('.brand-filter', 'Intel') + + // 设置性能分数范围 + await page.fill('.min-score-input', '5000') + await page.fill('.max-score-input', '10000') + + // 点击应用筛选按钮 + await page.click('.apply-filter-button') + + // 等待筛选结果加载 + await page.waitForSelector('.product-card') + + // 检查筛选结果 + const productCards = await page.locator('.product-card').count() + expect(productCards).toBeGreaterThan(0) + + // 检查第一个产品的品牌 + const firstProductBrand = await page.locator('.product-card').first().locator('.product-brand').textContent() + expect(firstProductBrand).toContain('Intel') + }) + + test('用户应该能够使用排序功能对产品进行排序', async () => { + // 访问类别排名页面 + await page.goto('/category/1') + + // 等待排序选择器加载 + await page.waitForSelector('.sort-select') + + // 选择按性能分数降序排序 + await page.selectOption('.sort-select', 'score-desc') + + // 等待排序结果加载 + await page.waitForSelector('.product-card') + + // 检查第一个产品的性能分数是否最高 + const firstProductScore = await page.locator('.product-card').first().locator('.product-score').textContent() + const secondProductScore = await page.locator('.product-card').nth(1).locator('.product-score').textContent() + + // 提取数字部分进行比较 + const firstScore = parseInt(firstProductScore.replace(/[^0-9]/g, '')) + const secondScore = parseInt(secondProductScore.replace(/[^0-9]/g, '')) + + expect(firstScore).toBeGreaterThanOrEqual(secondScore) + }) + + test('用户应该能够选择产品进行对比', async () => { + // 访问类别排名页面 + await page.goto('/category/1') + + // 等待产品列表加载 + await page.waitForSelector('.product-card') + + // 选择第一个产品的复选框 + await page.check('.product-card').first().locator('.compare-checkbox') + + // 选择第二个产品的复选框 + await page.check('.product-card').nth(1).locator('.compare-checkbox') + + // 点击对比按钮 + await page.click('.compare-button') + + // 检查是否跳转到产品对比页面 + await expect(page).toHaveURL(/\/compare/) + + // 检查对比页面内容 + await expect(page.locator('.comparison-table')).toBeVisible() + await expect(page.locator('.comparison-chart')).toBeVisible() + }) + + test('用户应该能够查看性能监控页面', async () => { + // 访问性能监控页面 + await page.goto('/monitor') + + // 等待页面加载 + await page.waitForSelector('.monitor-dashboard') + + // 检查性能指标卡片 + await expect(page.locator('.metric-card')).toBeVisible() + + // 检查性能图表 + await expect(page.locator('.performance-chart')).toBeVisible() + + // 检查系统状态 + await expect(page.locator('.system-status')).toBeVisible() + }) + + test('用户应该能够在移动设备上正常使用应用', async () => { + // 设置移动设备视口 + await page.setViewportSize({ width: 375, height: 667 }) + + // 访问首页 + await page.goto('/') + + // 检查移动端菜单按钮 + await expect(page.locator('.header__mobile-menu')).toBeVisible() + + // 点击移动端菜单按钮 + await page.click('.header__mobile-menu') + + // 检查移动端菜单是否展开 + await expect(page.locator('.mobile-menu')).toBeVisible() + + // 点击类别卡片 + await page.click('.category-card').first() + + // 检查是否跳转到类别排名页面 + await expect(page).toHaveURL(/\/category\/\d+/) + + // 检查移动端产品列表布局 + await expect(page.locator('.product-card')).toBeVisible() + + // 检查移动端筛选器 + await expect(page.locator('.mobile-filter')).toBeVisible() + }) + + test('用户应该能够处理网络错误', async () => { + // 模拟网络错误 + await page.route('**/api/**', route => route.abort()) + + // 访问首页 + await page.goto('/') + + // 等待错误提示 + await page.waitForSelector('.error-message') + + // 检查错误提示内容 + await expect(page.locator('.error-message')).toContainText('网络错误') + + // 点击重试按钮 + await page.click('.retry-button') + + // 恢复网络连接 + await page.unroute('**/api/**') + + // 检查页面是否恢复正常 + await page.waitForSelector('.category-card') + await expect(page.locator('.category-card')).toBeVisible() + }) + + test('用户应该能够使用页面导航', async () => { + // 访问首页 + await page.goto('/') + + // 点击导航栏中的性能监控链接 + await page.click('[data-testid="monitor-button"]') + + // 检查是否跳转到性能监控页面 + await expect(page).toHaveURL('/monitor') + + // 点击浏览器后退按钮 + await page.goBack() + + // 检查是否返回到首页 + await expect(page).toHaveURL('/') + + // 点击浏览器前进按钮 + await page.goForward() + + // 检查是否前进到性能监控页面 + await expect(page).toHaveURL('/monitor') + }) + + test('用户应该能够使用分页功能浏览更多产品', async () => { + // 访问类别排名页面 + await page.goto('/category/1') + + // 等待产品列表和分页组件加载 + await page.waitForSelector('.product-card') + await page.waitForSelector('.pagination') + + // 记录第一页的产品 + const firstPageProducts = await page.locator('.product-card').allTextContents() + + // 点击下一页按钮 + await page.click('.pagination-next') + + // 等待新页面加载 + await page.waitForSelector('.product-card') + + // 记录第二页的产品 + const secondPageProducts = await page.locator('.product-card').allTextContents() + + // 检查两页的产品是否不同 + expect(firstPageProducts).not.toEqual(secondPageProducts) + + // 点击上一页按钮 + await page.click('.pagination-prev') + + // 等待页面加载 + await page.waitForSelector('.product-card') + + // 检查是否返回到第一页 + const backToFirstPageProducts = await page.locator('.product-card').allTextContents() + expect(backToFirstPageProducts).toEqual(firstPageProducts) + }) +}) \ No newline at end of file diff --git a/frontend/tests/setup.js b/frontend/tests/setup.js new file mode 100644 index 00000000..20c8a2f8 --- /dev/null +++ b/frontend/tests/setup.js @@ -0,0 +1,203 @@ +import { vi, beforeEach, afterEach, beforeAll, afterAll } from 'vitest' +import { config } from '@vue/test-utils' +import { createPinia, setActivePinia } from 'pinia' +import ElementPlus from 'element-plus' + +// 全局模拟 +// 模拟window.matchMedia +Object.defineProperty(window, 'matchMedia', { + writable: true, + value: vi.fn().mockImplementation(query => ({ + matches: false, + media: query, + onchange: null, + addListener: vi.fn(), // deprecated + removeListener: vi.fn(), // deprecated + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })), +}) + +// 模拟ResizeObserver +global.ResizeObserver = class ResizeObserver { + constructor(cb) { + this.cb = cb + } + observe() {} + unobserve() {} + disconnect() {} +} + +// 模拟IntersectionObserver +global.IntersectionObserver = class IntersectionObserver { + constructor(cb) { + this.cb = cb + } + observe() {} + unobserve() {} + disconnect() {} +} + +// 模拟window.location +Object.defineProperty(window, 'location', { + value: { + href: 'http://localhost:3000', + origin: 'http://localhost:3000', + protocol: 'http:', + host: 'localhost:3000', + hostname: 'localhost', + port: '3000', + pathname: '/', + search: '', + hash: '', + assign: vi.fn(), + replace: vi.fn(), + reload: vi.fn(), + }, + writable: true, +}) + +// 模拟localStorage +const localStorageMock = { + getItem: vi.fn(), + setItem: vi.fn(), + removeItem: vi.fn(), + clear: vi.fn(), + length: 0, + key: vi.fn(), +} +global.localStorage = localStorageMock + +// 模拟sessionStorage +const sessionStorageMock = { + getItem: vi.fn(), + setItem: vi.fn(), + removeItem: vi.fn(), + clear: vi.fn(), + length: 0, + key: vi.fn(), +} +global.sessionStorage = sessionStorageMock + +// 模拟navigator +Object.defineProperty(window, 'navigator', { + value: { + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + language: 'en-US', + languages: ['en-US', 'en'], + platform: 'Win32', + cookieEnabled: true, + onLine: true, + geolocation: { + getCurrentPosition: vi.fn(), + watchPosition: vi.fn(), + clearWatch: vi.fn(), + }, + }, + writable: true, +}) + +// 模拟performance +Object.defineProperty(window, 'performance', { + value: { + now: vi.fn(() => Date.now()), + timing: { + navigationStart: Date.now() - 1000, + loadEventEnd: Date.now(), + }, + getEntriesByType: vi.fn(() => []), + mark: vi.fn(), + measure: vi.fn(), + getEntriesByName: vi.fn(() => []), + clearMarks: vi.fn(), + clearMeasures: vi.fn(), + }, + writable: true, +}) + +// 模拟console方法以减少测试输出噪音 +global.console = { + ...console, + log: vi.fn(), + debug: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + error: vi.fn(), +} + +// 配置Vue Test Utils +config.global.plugins = [ElementPlus, createPinia()] + +// 配置全局组件 +config.global.stubs = { + 'el-button': true, + 'el-input': true, + 'el-form': true, + 'el-form-item': true, + 'el-select': true, + 'el-option': true, + 'el-table': true, + 'el-table-column': true, + 'el-pagination': true, + 'el-dialog': true, + 'el-drawer': true, + 'el-tooltip': true, + 'el-popover': true, + 'el-alert': true, + 'el-loading': true, + 'el-icon': true, + 'router-link': true, + 'router-view': true, +} + +// 配置全局mocks +config.global.mocks = { + $t: (key) => key, + $router: { + push: vi.fn(), + replace: vi.fn(), + go: vi.fn(), + back: vi.fn(), + forward: vi.fn(), + }, + $route: { + path: '/', + name: 'Home', + params: {}, + query: {}, + hash: '', + fullPath: '/', + matched: [], + meta: {}, + }, +} + +// 在每个测试前设置Pinia +beforeEach(() => { + const pinia = createPinia() + setActivePinia(pinia) +}) + +// 在所有测试前执行 +beforeAll(() => { + // 设置测试环境变量 + process.env.NODE_ENV = 'test' + + // 模拟API基础URL + process.env.VITE_API_BASE_URL = 'http://localhost:3000/api' +}) + +// 在所有测试后执行 +afterAll(() => { + // 清理测试环境 +}) + +// 在每个测试后执行 +afterEach(() => { + // 清理模拟 + vi.clearAllMocks() + + // 重置模块注册表 + vi.resetModules() +}) \ No newline at end of file diff --git a/frontend/tests/unit/components/Header.spec.js b/frontend/tests/unit/components/Header.spec.js new file mode 100644 index 00000000..12625973 --- /dev/null +++ b/frontend/tests/unit/components/Header.spec.js @@ -0,0 +1,281 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { mount } from '@vue/test-utils' +import { createPinia, setActivePinia } from 'pinia' +import Header from '@/components/Header.vue' +import { useCategoryStore } from '@/stores/categoryStore' + +// 模拟路由 +const mockRouter = { + push: vi.fn(), + replace: vi.fn(), + go: vi.fn(), + back: vi.fn(), + forward: vi.fn(), + currentRoute: { + value: { + path: '/', + name: 'Home', + params: {}, + query: {}, + hash: '', + fullPath: '/', + matched: [], + meta: {}, + } + } +} + +// 模拟Element Plus组件 +vi.mock('element-plus', () => ({ + ElMenu: { + name: 'ElMenu', + template: '
', + props: ['mode', 'default-active', 'router'] + }, + ElMenuItem: { + name: 'ElMenuItem', + template: '
', + props: ['index'] + }, + ElSubMenu: { + name: 'ElSubMenu', + template: '
', + props: ['index'] + }, + ElButton: { + name: 'ElButton', + template: '', + props: ['type', 'size', 'icon'] + }, + ElIcon: { + name: 'ElIcon', + template: '' + }, + ElDropdown: { + name: 'ElDropdown', + template: '
', + props: ['trigger'] + }, + ElDropdownMenu: { + name: 'ElDropdownMenu', + template: '
' + }, + ElDropdownItem: { + name: 'ElDropdownItem', + template: '
' + }, + ElDrawer: { + name: 'ElDrawer', + template: '
', + props: ['modelValue', 'title', 'direction', 'size'], + emits: ['update:modelValue'] + } +})) + +// 模拟Element Plus图标 +vi.mock('@element-plus/icons-vue', () => ({ + Menu: { name: 'Menu', template: '' }, + Close: { name: 'Close', template: '' }, + User: { name: 'User', template: '' }, + Setting: { name: 'Setting', template: '' }, + Monitor: { name: 'Monitor', template: '' }, + DataAnalysis: { name: 'DataAnalysis', template: '' } +})) + +describe('Header.vue', () => { + let wrapper + let pinia + let categoryStore + + beforeEach(() => { + // 创建Pinia实例 + pinia = createPinia() + setActivePinia(pinia) + + // 获取store实例 + categoryStore = useCategoryStore() + + // 模拟store数据 + categoryStore.categories = [ + { id: 1, name: '手机CPU', productCount: 50 }, + { id: 2, name: '手机GPU', productCount: 40 }, + { id: 3, name: '电脑CPU', productCount: 60 }, + { id: 4, name: '电脑GPU', productCount: 45 } + ] + + // 挂载组件 + wrapper = mount(Header, { + global: { + plugins: [pinia], + mocks: { + $router: mockRouter + }, + stubs: { + 'router-link': true, + 'router-view': true, + 'cache-status-indicator': true + } + } + }) + }) + + it('应该正确渲染Header组件', () => { + expect(wrapper.exists()).toBe(true) + expect(wrapper.find('.header').exists()).toBe(true) + expect(wrapper.find('.header__logo').exists()).toBe(true) + expect(wrapper.find('.header__nav').exists()).toBe(true) + }) + + it('应该显示应用标题', () => { + const title = wrapper.find('.header__title') + expect(title.exists()).toBe(true) + expect(title.text()).toBe('硬件性能排行榜') + }) + + it('应该显示产品类别菜单', async () => { + // 等待组件加载完成 + await wrapper.vm.$nextTick() + + // 检查类别菜单是否存在 + const categoryMenu = wrapper.find('.category-menu') + expect(categoryMenu.exists()).toBe(true) + + // 检查类别数量 + const menuItems = wrapper.findAll('.el-menu-item') + expect(menuItems.length).toBeGreaterThan(0) + }) + + it('应该显示产品对比按钮', () => { + const compareButton = wrapper.find('[data-testid="compare-button"]') + expect(compareButton.exists()).toBe(true) + expect(compareButton.text()).toContain('产品对比') + }) + + it('应该显示性能监控按钮', () => { + const monitorButton = wrapper.find('[data-testid="monitor-button"]') + expect(monitorButton.exists()).toBe(true) + expect(monitorButton.text()).toContain('性能监控') + }) + + it('应该响应式地在移动端显示菜单按钮', async () => { + // 模拟移动端窗口大小 + global.innerWidth = 500 + window.dispatchEvent(new Event('resize')) + await wrapper.vm.$nextTick() + + // 检查移动端菜单按钮是否存在 + const menuButton = wrapper.find('.header__mobile-menu') + expect(menuButton.exists()).toBe(true) + }) + + it('应该正确处理菜单点击事件', async () => { + // 获取第一个菜单项 + const firstMenuItem = wrapper.find('.el-menu-item') + expect(firstMenuItem.exists()).toBe(true) + + // 点击菜单项 + await firstMenuItem.trigger('click') + + // 检查是否触发了路由导航 + // 注意:由于使用了router-link stub,这里需要检查组件内部逻辑 + // 在实际测试中,你可能需要模拟router-link的行为或检查组件内部状态 + }) + + it('应该正确处理产品对比按钮点击', async () => { + const compareButton = wrapper.find('[data-testid="compare-button"]') + expect(compareButton.exists()).toBe(true) + + // 点击产品对比按钮 + await compareButton.trigger('click') + + // 检查是否触发了路由导航 + expect(mockRouter.push).toHaveBeenCalledWith('/compare') + }) + + it('应该正确处理性能监控按钮点击', async () => { + const monitorButton = wrapper.find('[data-testid="monitor-button"]') + expect(monitorButton.exists()).toBe(true) + + // 点击性能监控按钮 + await monitorButton.trigger('click') + + // 检查是否触发了路由导航 + expect(mockRouter.push).toHaveBeenCalledWith('/monitor') + }) + + it('应该在移动端正确处理菜单展开/收起', async () => { + // 模拟移动端窗口大小 + global.innerWidth = 500 + window.dispatchEvent(new Event('resize')) + await wrapper.vm.$nextTick() + + // 获取菜单按钮 + const menuButton = wrapper.find('.header__mobile-menu') + expect(menuButton.exists()).toBe(true) + + // 点击菜单按钮 + await menuButton.trigger('click') + + // 检查菜单是否展开 + expect(wrapper.vm.mobileMenuVisible).toBe(true) + + // 再次点击菜单按钮 + await menuButton.trigger('click') + + // 检查菜单是否收起 + expect(wrapper.vm.mobileMenuVisible).toBe(false) + }) + + it('应该正确计算当前激活的菜单项', async () => { + // 模拟当前路由为类别页面 + mockRouter.currentRoute.value.path = '/category/1' + await wrapper.vm.$nextTick() + + // 检查当前激活的菜单项 + expect(wrapper.vm.activeMenuItem).toBe('category') + }) + + it('应该在组件挂载时加载类别数据', async () => { + // 模拟fetchCategories方法 + const fetchCategoriesSpy = vi.spyOn(categoryStore, 'fetchCategories') + + // 重新挂载组件 + wrapper = mount(Header, { + global: { + plugins: [pinia], + mocks: { + $router: mockRouter + }, + stubs: { + 'router-link': true, + 'router-view': true, + 'cache-status-indicator': true + } + } + }) + + // 等待组件加载完成 + await wrapper.vm.$nextTick() + + // 检查是否调用了fetchCategories + expect(fetchCategoriesSpy).toHaveBeenCalled() + }) + + it('应该正确处理窗口大小变化', async () => { + // 模拟桌面端窗口大小 + global.innerWidth = 1200 + window.dispatchEvent(new Event('resize')) + await wrapper.vm.$nextTick() + + // 检查isMobile计算属性 + expect(wrapper.vm.isMobile).toBe(false) + + // 模拟移动端窗口大小 + global.innerWidth = 500 + window.dispatchEvent(new Event('resize')) + await wrapper.vm.$nextTick() + + // 检查isMobile计算属性 + expect(wrapper.vm.isMobile).toBe(true) + }) +}) \ No newline at end of file diff --git a/frontend/tests/unit/services/api.spec.js b/frontend/tests/unit/services/api.spec.js new file mode 100644 index 00000000..e84ee7aa --- /dev/null +++ b/frontend/tests/unit/services/api.spec.js @@ -0,0 +1,354 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' +import { api, clearCache, cancelAllRequests } from '@/services/api' +import axios from 'axios' + +// 模拟axios +vi.mock('axios') +const mockedAxios = vi.mocked(axios) + +// 模拟localStorage +const localStorageMock = { + getItem: vi.fn(), + setItem: vi.fn(), + removeItem: vi.fn(), + clear: vi.fn() +} +global.localStorage = localStorageMock + +// 模拟console方法 +const consoleSpy = { + error: vi.spyOn(console, 'error').mockImplementation(() => {}), + warn: vi.spyOn(console, 'warn').mockImplementation(() => {}), + log: vi.spyOn(console, 'log').mockImplementation(() => {}) +} + +// 模拟window.performance +Object.defineProperty(window, 'performance', { + value: { + now: vi.fn(() => Date.now()) + } +}) + +describe('API Service', () => { + beforeEach(() => { + // 重置所有模拟 + vi.clearAllMocks() + + // 模拟axios.create返回值 + mockedAxios.create.mockReturnValue({ + request: vi.fn(), + interceptors: { + request: { + use: vi.fn() + }, + response: { + use: vi.fn() + } + } + }) + }) + + afterEach(() => { + // 清理所有请求 + cancelAllRequests() + clearCache() + }) + + describe('API实例', () => { + it('应该正确创建API实例', () => { + expect(api).toBeDefined() + expect(typeof api.get).toBe('function') + expect(typeof api.post).toBe('function') + expect(typeof api.put).toBe('function') + expect(typeof api.delete).toBe('function') + expect(typeof api.request).toBe('function') + }) + + it('应该设置正确的baseURL', () => { + // 由于我们模拟了axios.create,这里我们检查调用参数 + expect(mockedAxios.create).toHaveBeenCalledWith( + expect.objectContaining({ + baseURL: 'https://localhost:7001/api', + timeout: 15000 + }) + ) + }) + }) + + describe('请求拦截器', () => { + it('应该在请求前添加时间戳', async () => { + // 模拟请求 + const mockRequest = { + url: '/test', + method: 'get', + headers: {} + } + + // 模拟请求拦截器 + const requestInterceptor = mockedAxios.create().interceptors.request.use.mock.calls[0][0] + const processedRequest = requestInterceptor(mockRequest) + + // 检查是否添加了时间戳 + expect(processedRequest.metadata).toBeDefined() + expect(processedRequest.metadata.startTime).toBeDefined() + }) + + it('应该在请求前添加CSRF令牌', async () => { + // 模拟localStorage中的CSRF令牌 + localStorageMock.getItem.mockReturnValue('test-csrf-token') + + // 模拟请求 + const mockRequest = { + url: '/test', + method: 'post', + headers: {} + } + + // 模拟请求拦截器 + const requestInterceptor = mockedAxios.create().interceptors.request.use.mock.calls[0][0] + const processedRequest = requestInterceptor(mockRequest) + + // 检查是否添加了CSRF令牌 + expect(processedRequest.headers['X-CSRF-Token']).toBe('test-csrf-token') + }) + + it('应该在请求前添加认证令牌', async () => { + // 模拟localStorage中的认证令牌 + localStorageMock.getItem.mockImplementation((key) => { + if (key === 'auth_token') return 'test-auth-token' + return null + }) + + // 模拟请求 + const mockRequest = { + url: '/test', + method: 'get', + headers: {} + } + + // 模拟请求拦截器 + const requestInterceptor = mockedAxios.create().interceptors.request.use.mock.calls[0][0] + const processedRequest = requestInterceptor(mockRequest) + + // 检查是否添加了认证令牌 + expect(processedRequest.headers.Authorization).toBe('Bearer test-auth-token') + }) + }) + + describe('响应拦截器', () => { + it('应该正确处理成功响应', async () => { + // 模拟响应 + const mockResponse = { + data: { success: true, data: { id: 1, name: 'Test' } }, + status: 200, + statusText: 'OK', + headers: {}, + config: { + url: '/test', + method: 'get', + metadata: { startTime: Date.now() - 100 } + } + } + + // 模拟响应拦截器 + const responseInterceptor = mockedAxios.create().interceptors.response.use.mock.calls[0][0] + const processedResponse = responseInterceptor(mockResponse) + + // 检查响应处理 + expect(processedResponse.data).toEqual({ success: true, data: { id: 1, name: 'Test' } }) + }) + + it('应该记录请求耗时', async () => { + // 模拟响应 + const mockResponse = { + data: { success: true, data: { id: 1, name: 'Test' } }, + status: 200, + statusText: 'OK', + headers: {}, + config: { + url: '/test', + method: 'get', + metadata: { startTime: Date.now() - 100 } + } + } + + // 模拟响应拦截器 + const responseInterceptor = mockedAxios.create().interceptors.response.use.mock.calls[0][0] + responseInterceptor(mockResponse) + + // 检查是否记录了请求耗时 + expect(consoleSpy.log).toHaveBeenCalledWith( + expect.stringContaining('请求完成'), + expect.anything() + ) + }) + + it('应该缓存GET请求响应', async () => { + // 模拟响应 + const mockResponse = { + data: { success: true, data: { id: 1, name: 'Test' } }, + status: 200, + statusText: 'OK', + headers: {}, + config: { + url: '/test', + method: 'get', + metadata: { startTime: Date.now() - 100 } + } + } + + // 模拟响应拦截器 + const responseInterceptor = mockedAxios.create().interceptors.response.use.mock.calls[0][0] + responseInterceptor(mockResponse) + + // 检查是否缓存了响应 + expect(localStorageMock.setItem).toHaveBeenCalledWith( + expect.stringContaining('api_cache_'), + expect.any(String) + ) + }) + }) + + describe('错误处理', () => { + it('应该正确处理网络错误', async () => { + // 模拟网络错误 + const networkError = new Error('Network Error') + networkError.code = 'NETWORK_ERROR' + + // 模拟错误拦截器 + const errorInterceptor = mockedAxios.create().interceptors.response.use.mock.calls[0][1] + + // 处理错误 + const result = errorInterceptor(networkError) + + // 检查错误处理 + expect(result).rejects.toThrow() + expect(consoleSpy.error).toHaveBeenCalledWith( + '网络错误', + expect.any(Error) + ) + }) + + it('应该正确处理超时错误', async () => { + // 模拟超时错误 + const timeoutError = new Error('Timeout') + timeoutError.code = 'ECONNABORTED' + + // 模拟错误拦截器 + const errorInterceptor = mockedAxios.create().interceptors.response.use.mock.calls[0][1] + + // 处理错误 + const result = errorInterceptor(timeoutError) + + // 检查错误处理 + expect(result).rejects.toThrow() + expect(consoleSpy.error).toHaveBeenCalledWith( + '请求超时', + expect.any(Error) + ) + }) + + it('应该正确处理服务器错误', async () => { + // 模拟服务器错误响应 + const serverError = { + response: { + status: 500, + statusText: 'Internal Server Error', + data: { message: '服务器内部错误' } + } + } + + // 模拟错误拦截器 + const errorInterceptor = mockedAxios.create().interceptors.response.use.mock.calls[0][1] + + // 处理错误 + const result = errorInterceptor(serverError) + + // 检查错误处理 + expect(result).rejects.toThrow() + expect(consoleSpy.error).toHaveBeenCalledWith( + '服务器错误', + expect.any(Object) + ) + }) + + it('应该正确处理401未授权错误', async () => { + // 模拟401错误响应 + const unauthorizedError = { + response: { + status: 401, + statusText: 'Unauthorized', + data: { message: '未授权访问' } + } + } + + // 模拟错误拦截器 + const errorInterceptor = mockedAxios.create().interceptors.response.use.mock.calls[0][1] + + // 处理错误 + const result = errorInterceptor(unauthorizedError) + + // 检查错误处理 + expect(result).rejects.toThrow() + expect(consoleSpy.error).toHaveBeenCalledWith( + '未授权访问', + expect.any(Object) + ) + }) + }) + + describe('缓存管理', () => { + it('应该正确缓存GET请求', () => { + // 模拟缓存数据 + const cacheKey = 'api_cache_/test' + const cacheData = { + data: { id: 1, name: 'Test' }, + timestamp: Date.now(), + expiry: Date.now() + 300000 // 5分钟后过期 + } + + // 设置缓存 + localStorageMock.setItem.mockReturnValue() + localStorageMock.getItem.mockReturnValue(JSON.stringify(cacheData)) + + // 检查缓存设置 + localStorageMock.setItem(cacheKey, JSON.stringify(cacheData)) + expect(localStorageMock.setItem).toHaveBeenCalledWith(cacheKey, JSON.stringify(cacheData)) + }) + + it('应该正确清除缓存', () => { + // 调用清除缓存函数 + clearCache() + + // 检查是否清除了所有缓存 + expect(localStorageMock.removeItem).toHaveBeenCalledWith('api_cache_/test') + }) + }) + + describe('请求取消', () => { + it('应该正确取消重复请求', () => { + // 模拟请求配置 + const requestConfig = { + url: '/test', + method: 'get' + } + + // 模拟CancelToken + const cancelToken = { + token: 'test-token', + cancel: vi.fn() + } + + // 检查是否创建了CancelToken + expect(cancelToken.token).toBe('test-token') + }) + + it('应该正确取消所有请求', () => { + // 调用取消所有请求函数 + cancelAllRequests() + + // 检查是否取消了所有请求 + // 这里需要根据实际实现进行检查 + }) + }) +}) \ No newline at end of file diff --git a/frontend/tests/unit/stores/categoryStore.spec.js b/frontend/tests/unit/stores/categoryStore.spec.js new file mode 100644 index 00000000..fec12f04 --- /dev/null +++ b/frontend/tests/unit/stores/categoryStore.spec.js @@ -0,0 +1,338 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' +import { createPinia, setActivePinia } from 'pinia' +import { useCategoryStore } from '@/stores/categoryStore' +import categoryService from '@/services/categoryService' + +// 模拟categoryService +vi.mock('@/services/categoryService', () => ({ + default: { + getCategories: vi.fn(), + getCategoryById: vi.fn() + } +})) + +// 模拟console方法 +const consoleSpy = { + error: vi.spyOn(console, 'error').mockImplementation(() => {}), + log: vi.spyOn(console, 'log').mockImplementation(() => {}) +} + +describe('Category Store', () => { + let categoryStore + + beforeEach(() => { + // 创建Pinia实例 + const pinia = createPinia() + setActivePinia(pinia) + + // 获取store实例 + categoryStore = useCategoryStore() + + // 重置所有模拟 + vi.clearAllMocks() + }) + + afterEach(() => { + // 重置store状态 + categoryStore.$reset() + }) + + describe('初始状态', () => { + it('应该有正确的初始状态', () => { + expect(categoryStore.categories).toEqual([]) + expect(categoryStore.currentCategory).toBeNull() + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBeNull() + }) + }) + + describe('getters', () => { + beforeEach(() => { + // 设置测试数据 + categoryStore.categories = [ + { id: 1, name: '手机CPU', productCount: 50 }, + { id: 2, name: '手机GPU', productCount: 40 }, + { id: 3, name: '电脑CPU', productCount: 60 }, + { id: 4, name: '电脑GPU', productCount: 45 } + ] + }) + + it('应该正确获取所有类别', () => { + const categories = categoryStore.getAllCategories + expect(categories).toEqual([ + { id: 1, name: '手机CPU', productCount: 50 }, + { id: 2, name: '手机GPU', productCount: 40 }, + { id: 3, name: '电脑CPU', productCount: 60 }, + { id: 4, name: '电脑GPU', productCount: 45 } + ]) + }) + + it('应该正确获取类别总数', () => { + const count = categoryStore.getCategoryCount + expect(count).toBe(4) + }) + + it('应该正确获取有产品的类别', () => { + const categoriesWithProducts = categoryStore.getCategoriesWithProducts + expect(categoriesWithProducts).toEqual([ + { id: 1, name: '手机CPU', productCount: 50 }, + { id: 2, name: '手机GPU', productCount: 40 }, + { id: 3, name: '电脑CPU', productCount: 60 }, + { id: 4, name: '电脑GPU', productCount: 45 } + ]) + }) + + it('应该正确获取类别名称列表', () => { + const categoryNames = categoryStore.getCategoryNames + expect(categoryNames).toEqual(['手机CPU', '手机GPU', '电脑CPU', '电脑GPU']) + }) + + it('应该根据ID正确获取类别', () => { + const category = categoryStore.getCategoryById(1) + expect(category).toEqual({ id: 1, name: '手机CPU', productCount: 50 }) + }) + + it('应该根据名称正确获取类别', () => { + const category = categoryStore.getCategoryByName('手机CPU') + expect(category).toEqual({ id: 1, name: '手机CPU', productCount: 50 }) + }) + + it('应该正确获取当前类别名称', () => { + categoryStore.currentCategory = { id: 1, name: '手机CPU' } + const categoryName = categoryStore.getCurrentCategoryName + expect(categoryName).toBe('手机CPU') + }) + + it('应该正确检查是否有加载错误', () => { + expect(categoryStore.hasError).toBe(false) + + categoryStore.error = '加载失败' + expect(categoryStore.hasError).toBe(true) + }) + + it('应该正确获取错误信息', () => { + expect(categoryStore.errorMessage).toBe('') + + categoryStore.error = '加载失败' + expect(categoryStore.errorMessage).toBe('加载失败') + }) + }) + + describe('actions', () => { + describe('fetchCategories', () => { + it('应该成功获取所有类别', async () => { + // 模拟API响应 + const mockCategories = [ + { id: 1, name: '手机CPU', productCount: 50 }, + { id: 2, name: '手机GPU', productCount: 40 } + ] + + categoryService.getCategories.mockResolvedValue({ + data: { + success: true, + data: mockCategories + } + }) + + // 调用action + await categoryStore.fetchCategories() + + // 检查结果 + expect(categoryService.getCategories).toHaveBeenCalled() + expect(categoryStore.categories).toEqual(mockCategories) + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBeNull() + }) + + it('应该处理获取类别失败的情况', async () => { + // 模拟API错误 + const errorMessage = '获取类别失败' + categoryService.getCategories.mockRejectedValue(new Error(errorMessage)) + + // 调用action + await categoryStore.fetchCategories() + + // 检查结果 + expect(categoryService.getCategories).toHaveBeenCalled() + expect(categoryStore.categories).toEqual([]) + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBe(errorMessage) + expect(consoleSpy.error).toHaveBeenCalledWith( + '获取类别失败:', + expect.any(Error) + ) + }) + + it('应该处理API返回失败状态的情况', async () => { + // 模拟API返回失败状态 + categoryService.getCategories.mockResolvedValue({ + data: { + success: false, + message: '服务器错误' + } + }) + + // 调用action + await categoryStore.fetchCategories() + + // 检查结果 + expect(categoryService.getCategories).toHaveBeenCalled() + expect(categoryStore.categories).toEqual([]) + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBe('服务器错误') + }) + }) + + describe('fetchCategoryById', () => { + it('应该成功获取指定类别', async () => { + // 模拟API响应 + const mockCategory = { id: 1, name: '手机CPU', productCount: 50 } + + categoryService.getCategoryById.mockResolvedValue({ + data: { + success: true, + data: mockCategory + } + }) + + // 调用action + await categoryStore.fetchCategoryById(1) + + // 检查结果 + expect(categoryService.getCategoryById).toHaveBeenCalledWith(1) + expect(categoryStore.currentCategory).toEqual(mockCategory) + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBeNull() + }) + + it('应该处理获取指定类别失败的情况', async () => { + // 模拟API错误 + const errorMessage = '获取类别详情失败' + categoryService.getCategoryById.mockRejectedValue(new Error(errorMessage)) + + // 调用action + await categoryStore.fetchCategoryById(1) + + // 检查结果 + expect(categoryService.getCategoryById).toHaveBeenCalledWith(1) + expect(categoryStore.currentCategory).toBeNull() + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBe(errorMessage) + expect(consoleSpy.error).toHaveBeenCalledWith( + '获取类别详情失败:', + expect.any(Error) + ) + }) + }) + + describe('setCurrentCategory', () => { + it('应该正确设置当前类别', () => { + const mockCategory = { id: 1, name: '手机CPU', productCount: 50 } + + // 调用action + categoryStore.setCurrentCategory(mockCategory) + + // 检查结果 + expect(categoryStore.currentCategory).toEqual(mockCategory) + }) + + it('应该正确清除当前类别', () => { + // 设置初始状态 + categoryStore.currentCategory = { id: 1, name: '手机CPU', productCount: 50 } + + // 调用action + categoryStore.setCurrentCategory(null) + + // 检查结果 + expect(categoryStore.currentCategory).toBeNull() + }) + }) + + describe('clearError', () => { + it('应该正确清除错误信息', () => { + // 设置初始状态 + categoryStore.error = '测试错误' + + // 调用action + categoryStore.clearError() + + // 检查结果 + expect(categoryStore.error).toBeNull() + }) + }) + + describe('reset', () => { + it('应该正确重置store状态', () => { + // 设置初始状态 + categoryStore.categories = [{ id: 1, name: '手机CPU', productCount: 50 }] + categoryStore.currentCategory = { id: 1, name: '手机CPU', productCount: 50 } + categoryStore.loading = true + categoryStore.error = '测试错误' + + // 调用action + categoryStore.reset() + + // 检查结果 + expect(categoryStore.categories).toEqual([]) + expect(categoryStore.currentCategory).toBeNull() + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBeNull() + }) + }) + }) + + describe('复杂场景测试', () => { + it('应该正确处理并发请求', async () => { + // 模拟API响应 + const mockCategories = [ + { id: 1, name: '手机CPU', productCount: 50 }, + { id: 2, name: '手机GPU', productCount: 40 } + ] + + categoryService.getCategories.mockResolvedValue({ + data: { + success: true, + data: mockCategories + } + }) + + // 并发调用action + const [result1, result2] = await Promise.all([ + categoryStore.fetchCategories(), + categoryStore.fetchCategories() + ]) + + // 检查结果 + expect(categoryService.getCategories).toHaveBeenCalledTimes(2) + expect(categoryStore.categories).toEqual(mockCategories) + expect(categoryStore.loading).toBe(false) + expect(categoryStore.error).toBeNull() + }) + + it('应该正确处理数据更新', async () => { + // 设置初始数据 + categoryStore.categories = [ + { id: 1, name: '手机CPU', productCount: 50 } + ] + + // 模拟API响应(更新后的数据) + const updatedCategories = [ + { id: 1, name: '手机CPU', productCount: 55 }, + { id: 2, name: '手机GPU', productCount: 40 } + ] + + categoryService.getCategories.mockResolvedValue({ + data: { + success: true, + data: updatedCategories + } + }) + + // 调用action + await categoryStore.fetchCategories() + + // 检查结果 + expect(categoryStore.categories).toEqual(updatedCategories) + }) + }) +}) \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 00000000..a10e3b5a --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,57 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + /* Path mapping */ + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + }, + + /* Additional options */ + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "removeComments": false, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts" + ] +} \ No newline at end of file diff --git a/frontend/vite.config.js b/frontend/vite.config.js index b925036a..1dd2f87e 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,9 +1,19 @@ import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' +import { visualizer } from 'rollup-plugin-visualizer' export default defineConfig({ - plugins: [vue()], + plugins: [ + vue(), + // 打包体积分析插件 + visualizer({ + open: false, + gzipSize: true, + brotliSize: true, + filename: 'dist/stats.html' + }) + ], resolve: { alias: { '@': path.resolve(__dirname, './src') @@ -14,15 +24,51 @@ export default defineConfig({ rollupOptions: { output: { // 手动分割代码 - manualChunks: { - // 将Element Plus相关代码分割到单独的chunk - 'element-plus': ['element-plus'], - // 将Vue相关代码分割到单独的chunk - 'vue-vendor': ['vue', 'vue-router', 'pinia'], - // 将图表库分割到单独的chunk - 'charts': ['echarts', 'vue-echarts'], - // 将工具库分割到单独的chunk - 'utils': ['axios', 'dayjs', 'lodash-es'] + manualChunks(id) { + // 将node_modules中的依赖分组 + if (id.includes('node_modules')) { + // Element Plus + if (id.includes('element-plus')) { + return 'element-plus' + } + // Vue生态系统 + if (id.includes('vue') || id.includes('pinia') || id.includes('vue-router')) { + return 'vue-vendor' + } + // 图表库 + if (id.includes('echarts')) { + return 'charts' + } + // 工具库 + if (id.includes('axios') || id.includes('dayjs') || id.includes('lodash-es')) { + return 'utils' + } + // 其他第三方库 + return 'vendor' + } + + // 将业务代码按模块分组 + if (id.includes('src/views')) { + return 'views' + } + if (id.includes('src/components')) { + return 'components' + } + if (id.includes('src/stores')) { + return 'stores' + } + if (id.includes('src/utils')) { + return 'utils' + } + if (id.includes('src/services')) { + return 'services' + } + }, + // 优化chunk命名 + chunkFileNames: (chunkInfo) => { + // 根据模块类型生成不同的文件名 + const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/').pop() : 'chunk' + return `js/[name]-[hash].js` } } }, @@ -39,7 +85,19 @@ export default defineConfig({ } }, // 启用CSS代码分割 - cssCodeSplit: true + cssCodeSplit: true, + // 优化chunk大小警告限制 + chunkSizeWarningLimit: 1000, + // 设置输出目录 + outDir: 'dist', + // 设置静态资源目录 + assetsDir: 'assets', + // 优化资源内联阈值(小于此值的资源将内联为base64) + assetsInlineLimit: 4096, + // 启用CSS模块化 + cssTarget: 'chrome61', + // 设置最大并行请求数 + maxParallelFileOps: 5 }, server: { port: 3000, @@ -49,5 +107,27 @@ export default defineConfig({ changeOrigin: true } } - } + }, + // 优化依赖预构建 + optimizeDeps: { + include: [ + 'vue', + 'vue-router', + 'pinia', + 'axios', + 'element-plus', + 'element-plus/es/components/message/style/css', + 'element-plus/es/components/notification/style/css', + 'element-plus/es/components/message-box/style/css' + ] + }, + // PWA配置 + define: { + __VUE_OPTIONS_API__: false, + __VUE_PROD_DEVTOOLS__: false + }, + // 确保Service Worker文件被正确复制 + publicDir: 'public', + // 确保manifest.json被正确处理 + assetsInclude: ['**/*.svg', '**/*.png', '**/*.jpg', '**/*.jpeg', '**/*.gif', '**/*.webp'] }) \ No newline at end of file diff --git a/frontend/vitest.config.js b/frontend/vitest.config.js new file mode 100644 index 00000000..6fadbb91 --- /dev/null +++ b/frontend/vitest.config.js @@ -0,0 +1,97 @@ +import { defineConfig } from 'vitest/config' +import vue from '@vitejs/plugin-vue' +import { resolve } from 'path' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': resolve(__dirname, './src') + } + }, + test: { + // 启用类似Jest的API + globals: true, + // 测试环境 + environment: 'jsdom', + // 包含的测试文件 + include: [ + 'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}', + 'tests/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}' + ], + // 排除的测试文件 + exclude: [ + 'node_modules', + 'dist', + '.idea', + '.git', + '.cache' + ], + // 覆盖率配置 + coverage: { + // 启用覆盖率报告 + enabled: true, + // 覆盖率报告格式 + reporter: ['text', 'json', 'html'], + // 覆盖率输出目录 + reportsDirectory: 'coverage', + // 覆盖率阈值 + thresholds: { + global: { + branches: 80, + functions: 80, + lines: 80, + statements: 80 + } + }, + // 包含的文件 + include: [ + 'src/**/*.{js,jsx,ts,tsx,vue}' + ], + // 排除的文件 + exclude: [ + 'src/main.js', + 'src/**/*.d.ts', + 'src/**/index.js', + 'src/**/*.stories.{js,jsx,ts,tsx}', + 'src/**/__tests__/**/*', + 'src/**/test/**/*', + 'src/**/*.test.{js,jsx,ts,tsx}', + 'src/**/*.spec.{js,jsx,ts,tsx}' + ] + }, + // 测试超时时间(毫秒) + testTimeout: 10000, + // 钩子超时时间(毫秒) + hookTimeout: 10000, + // 并发测试 + threads: true, + // 监听模式下是否只运行相关测试 + watchExclude: [ + 'node_modules', + 'dist', + '.idea', + '.git', + '.cache' + ], + // 设置全局变量 + setupFiles: ['./tests/setup.js'], + // 模拟文件 + mockReset: true, + // 清除模拟 + clearMocks: true, + // 强制退出 + bail: 0, + // 详细输出 + verbose: true, + // 静默输出 + silent: false, + // 报告器 + reporter: ['verbose', 'html', 'json'], + // 输出文件 + outputFile: { + html: './tests/reports/index.html', + json: './tests/reports/report.json' + } + } +}) \ No newline at end of file