/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Framework/test/PackageTests.cs
144 строки
6 KB
Matt Mitchell
Batch small Helix work items to reduce per-item overhead (-53% compute) (#66808)
19 июн 2026, 01:03
Не верифицирован
19 июн 2026, 01:03
a097744
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.Diagnostics; using System.IO.Compression; using System.Linq; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.InternalTesting; using Xunit.Abstractions; namespace Microsoft.AspNetCore; public class PackageTests { private readonly string _packageLayoutRoot; private readonly ITestOutputHelper _output; public PackageTests(ITestOutputHelper output) { // In official builds, only run this test on Helix. The test will work locally so long as you're building w/ // shipping versions (i.e., include `/p:DotNetUseShippingVersions=true` on a full build command), and you do not // have binaries built locally from another major version. if (!TestData.VerifyPackageAssemblyVersions() && !SkipOnCIAttribute.OnCI()) { return; } _output = output; _packageLayoutRoot = SkipOnHelixAttribute.OnHelix() ? Path.Combine( AppContext.BaseDirectory, "Packages.Layout") : TestData.GetPackageLayoutRoot(); var packageRoot = SkipOnHelixAttribute.OnHelix() ? AppContext.BaseDirectory : TestData.GetPackagesFolder(); var packages = Directory .GetFiles(packageRoot, "*.nupkg", SearchOption.AllDirectories) .Where(file => !file.EndsWith(".symbols.nupkg", StringComparison.OrdinalIgnoreCase)); if (Directory.Exists(_packageLayoutRoot)) { Directory.Delete(_packageLayoutRoot, true); } foreach (var package in packages) { var outputPath = Path.Combine(_packageLayoutRoot, Path.GetFileNameWithoutExtension(package)); ZipFile.ExtractToDirectory(package, outputPath); } } [Fact] public void PackageAssembliesHaveExpectedAssemblyVersions() { // In official builds, only run this test on Helix. The test will work locally so long as we're building w/ shipping versions. if (!TestData.VerifyPackageAssemblyVersions() && !SkipOnCIAttribute.OnCI()) { return; } var versionStringWithoutPrereleaseTag = TestData.GetSharedFxVersion().Split('-', 2)[0]; var expectedVersion = Version.Parse(versionStringWithoutPrereleaseTag); string[] helixTestRunnerToolPackages = { "dotnet-serve", "dotnet-ef", "dotnet-dump" }; string[] toolAssembliesToSkip = { "System.", "Microsoft.", "Azure.", "Newtonsoft.", "aspnetcorev2" }; foreach (var packageDir in Directory.GetDirectories(_packageLayoutRoot)) { // Don't test the Shared Framework or Ref pack; assembly versions in those packages are checked elsewhere. if (packageDir.Contains("Microsoft.AspNetCore.App", StringComparison.OrdinalIgnoreCase)) { continue; } // Don't test helix test runner tool packages if (helixTestRunnerToolPackages.Any(s => packageDir.Contains(s, StringComparison.OrdinalIgnoreCase))) { continue; } // Test lib assemblies var packageAssembliesDir = Path.Combine(packageDir, "lib"); if (Directory.Exists(packageAssembliesDir)) { foreach (var tfmDir in Directory.GetDirectories(packageAssembliesDir)) { var isNetFx = IsNetFx(new DirectoryInfo(tfmDir).Name); foreach (var assembly in Directory.GetFiles(tfmDir, "*.dll")) { using var fileStream = File.OpenRead(assembly); using var peReader = new PEReader(fileStream, PEStreamOptions.Default); var reader = peReader.GetMetadataReader(MetadataReaderOptions.Default); var assemblyVersion = reader.GetAssemblyDefinition().Version; // net & netstandard assembly versions should all match Major.Minor.0.0 // netfx assembly versions should match Major.Minor.Patch.0 Assert.Equal(expectedVersion.Major, assemblyVersion.Major); Assert.Equal(expectedVersion.Minor, assemblyVersion.Minor); if (isNetFx) { Assert.Equal(expectedVersion.Build, assemblyVersion.Build); } else { Assert.Equal(0, assemblyVersion.Build); } Assert.Equal(0, assemblyVersion.Revision); } } } // Test tool assemblies var packageToolsDir = Path.Combine(packageDir, "tools"); if (Directory.Exists(packageToolsDir)) { var assemblies = Directory.GetFiles(packageToolsDir, "*.dll", SearchOption.AllDirectories) .Where(f => !toolAssembliesToSkip.Any(s => Path.GetFileNameWithoutExtension(f).Contains(s, StringComparison.OrdinalIgnoreCase))); foreach (var assembly in assemblies) { using var fileStream = File.OpenRead(assembly); using var peReader = new PEReader(fileStream, PEStreamOptions.Default); var reader = peReader.GetMetadataReader(MetadataReaderOptions.Default); var assemblyVersion = reader.GetAssemblyDefinition().Version; Assert.Equal(expectedVersion.Major, assemblyVersion.Major); Assert.Equal(expectedVersion.Minor, assemblyVersion.Minor); Assert.Equal(0, assemblyVersion.Build); Assert.Equal(0, assemblyVersion.Revision); } } } } private bool IsNetFx(string tfm) { return tfm.StartsWith("net4", StringComparison.OrdinalIgnoreCase); } }