/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/MSBuild/Test/WorkspaceTestBase.cs
277 строк
15 KB
Jared Parsons
Port more tests to run on Linux (#83052)
10 апр 2026, 00:39
Не верифицирован
10 апр 2026, 00:39
82a89d0
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.CodeAnalysis.Test.Utilities; using Microsoft.CodeAnalysis.UnitTests.TestFiles; using Roslyn.Test.Utilities; namespace Microsoft.CodeAnalysis.UnitTests; [UseExportProvider] public class WorkspaceTestBase : TestBase { protected readonly TempDirectory SolutionDirectory; protected static readonly TimeSpan AsyncEventTimeout = TimeSpan.FromMinutes(5); public WorkspaceTestBase() { ProjectGuardFiles.EnsureWrittenToTemp(); this.SolutionDirectory = Temp.CreateDirectory(); } private static string NormalizePath(string path) => Path.DirectorySeparatorChar == '/' ? path.Replace('\\', '/') : path; /// <summary> /// Gets an absolute file name for a file relative to the tests solution directory. /// </summary> public string GetSolutionFileName(string relativeFileName) { return Path.Combine(this.SolutionDirectory.Path, NormalizePath(relativeFileName)); } protected void CreateFiles(IEnumerable<(string filePath, object fileContent)> fileNamesAndContent) { foreach (var (filePath, fileContent) in fileNamesAndContent) { Debug.Assert(fileContent is string or byte[]); var normalizedPath = NormalizePath(filePath); var subdirectory = Path.GetDirectoryName(normalizedPath); var fileName = Path.GetFileName(normalizedPath); var dir = SolutionDirectory; if (!string.IsNullOrEmpty(subdirectory)) { dir = dir.CreateDirectory(subdirectory); } // workspace uses File APIs that don't work with "delete on close" files: var file = dir.CreateFile(fileName); if (fileContent is string s) { file.WriteAllText(s); } else { file.WriteAllBytes((byte[])fileContent); } } } protected void CreateCSharpFilesWith(string propertyName, string value) { CreateFiles(GetSimpleCSharpSolutionFiles() .WithFile(@"CSharpProject\CSharpProject.csproj", Resources.ProjectFiles.CSharp.AllOptions) .ReplaceFileElement(@"CSharpProject\CSharpProject.csproj", propertyName, value)); } protected void CreateVBFilesWith(string propertyName, string value) { CreateFiles(GetMultiProjectSolutionFiles() .ReplaceFileElement(@"VisualBasicProject\VisualBasicProject.vbproj", propertyName, value)); } protected void CreateCSharpFiles() { CreateFiles(GetSimpleCSharpSolutionFiles()); } protected static FileSet GetSimpleCSharpSolutionFiles() { return GetSimpleCSharpProjectFiles().WithFile(@"TestSolution.sln", Resources.SolutionFiles.CSharp); } protected static FileSet GetSimpleCSharpProjectFiles() { return new FileSet( (@"CSharpProject\CSharpProject.csproj", Resources.ProjectFiles.CSharp.CSharpProject), (@"CSharpProject\CSharpClass.cs", Resources.SourceFiles.CSharp.CSharpClass), (@"CSharpProject\Properties\AssemblyInfo.cs", Resources.SourceFiles.CSharp.AssemblyInfo)); } protected static FileSet GetSimpleVisualBasicSolutionFiles() { return GetSimpleVisualBasicProjectFiles().WithFile(@"TestSolution.sln", Resources.SolutionFiles.VisualBasic); } protected static FileSet GetSimpleVisualBasicProjectFiles() { return new FileSet( (@"VisualBasicProject\VisualBasicProject.vbproj", Resources.ProjectFiles.VisualBasic.VisualBasicProject), (@"VisualBasicProject\VisualBasicClass.vb", Resources.SourceFiles.VisualBasic.VisualBasicClass), (@"VisualBasicProject\My Project\Application.Designer.vb", Resources.SourceFiles.VisualBasic.Application_Designer), (@"VisualBasicProject\My Project\Application.myapp", Resources.SourceFiles.VisualBasic.Application), (@"VisualBasicProject\My Project\AssemblyInfo.vb", Resources.SourceFiles.VisualBasic.AssemblyInfo), (@"VisualBasicProject\My Project\Resources.Designer.vb", Resources.SourceFiles.VisualBasic.Resources_Designer), (@"VisualBasicProject\My Project\Resources.resx", Resources.SourceFiles.VisualBasic.Resources), (@"VisualBasicProject\My Project\Settings.Designer.vb", Resources.SourceFiles.VisualBasic.Settings_Designer), (@"VisualBasicProject\My Project\Settings.settings", Resources.SourceFiles.VisualBasic.Settings)); } protected static FileSet GetSimpleCSharpSolutionWithAdditionaFile() { return new FileSet( (@"TestSolution.sln", Resources.SolutionFiles.CSharp), (@"CSharpProject\CSharpProject.csproj", Resources.ProjectFiles.CSharp.AdditionalFile), (@"CSharpProject\CSharpClass.cs", Resources.SourceFiles.CSharp.CSharpClass), (@"CSharpProject\Properties\AssemblyInfo.cs", Resources.SourceFiles.CSharp.AssemblyInfo), (@"CSharpProject\ValidAdditionalFile.txt", Resources.SourceFiles.Text.ValidAdditionalFile)); } protected static FileSet GetNetCoreAppFiles() { return new FileSet( (@"Project.csproj", Resources.ProjectFiles.CSharp.NetCoreApp_Project), (@"Program.cs", Resources.SourceFiles.CSharp.NetCoreApp_Program)); } protected static FileSet GetNetCoreAppAndLibraryFiles() { return new FileSet( (@"Project\Project.csproj", Resources.ProjectFiles.CSharp.NetCoreAppAndLibrary_Project), (@"Project\Program.cs", Resources.SourceFiles.CSharp.NetCoreAppAndLibrary_Program), (@"Library\Library.csproj", Resources.ProjectFiles.CSharp.NetCoreAppAndLibrary_Library), (@"Library\Class1.cs", Resources.SourceFiles.CSharp.NetCoreAppAndLibrary_Class1)); } protected static FileSet GetNetCoreAppAndTwoLibrariesFiles() { return new FileSet( (@"Project\Project.csproj", Resources.ProjectFiles.CSharp.NetCoreAppAndTwoLibraries_Project), (@"Project\Program.cs", Resources.SourceFiles.CSharp.NetCoreAppAndTwoLibraries_Program), (@"Library1\Library1.csproj", Resources.ProjectFiles.CSharp.NetCoreAppAndTwoLibraries_Library1), (@"Library1\Class1.cs", Resources.SourceFiles.CSharp.NetCoreAppAndTwoLibraries_Class1), (@"Library2\Library2.csproj", Resources.ProjectFiles.CSharp.NetCoreAppAndTwoLibraries_Library2), (@"Library2\Class2.cs", Resources.SourceFiles.CSharp.NetCoreAppAndTwoLibraries_Class2)); } protected static FileSet GetNetCoreMultiTFMFiles() { return new FileSet( (@"Project.csproj", Resources.ProjectFiles.CSharp.NetCoreMultiTFM_Project), (@"Program.cs", Resources.SourceFiles.CSharp.NetCoreApp_Program)); } protected static FileSet GetNetCoreMultiTFMFiles_ExtensionWithConditionOnTFM() { return new FileSet( (@"Project.csproj", Resources.ProjectFiles.CSharp.NetCoreMultiTFM_ExtensionWithConditionOnTFM_Project), (@"obj\Project.csproj.test.props", Resources.ProjectFiles.CSharp.NetCoreMultiTFM_ExtensionWithConditionOnTFM_ProjectTestProps)); } protected static FileSet GetNetCoreMultiTFMFiles_ProjectReference() { return new FileSet( (@"Project\Project.csproj", Resources.ProjectFiles.CSharp.NetCoreMultiTFM_ProjectReference_Project), (@"Project\Program.cs", Resources.SourceFiles.CSharp.NetCoreMultiTFM_ProjectReference_Program), (@"Library\Library.csproj", Resources.ProjectFiles.CSharp.NetCoreMultiTFM_ProjectReference_Library), (@"Library\Class1.cs", Resources.SourceFiles.CSharp.NetCoreMultiTFM_ProjectReference_Class1)); } protected static FileSet GetNetCoreMultiTFMFiles_ProjectReferenceToFSharp() { return new FileSet( (@"Solution.sln", Resources.SolutionFiles.NetCoreMultiTFM_ProjectReferenceToFSharp), (@"csharplib\csharplib.csproj", Resources.ProjectFiles.CSharp.NetCoreMultiTFM_ProjectReferenceToFSharp_CSharpLib), (@"csharplib\Class1.cs", Resources.SourceFiles.CSharp.NetCoreMultiTFM_ProjectReferenceToFSharp_CSharpLib_Class1), (@"fsharplib\fsharplib.fsproj", Resources.ProjectFiles.FSharp.NetCoreMultiTFM_ProjectReferenceToFSharp_FSharpLib), (@"fsharplib\Library.fs", Resources.SourceFiles.FSharp.NetCoreMultiTFM_ProjectReferenceToFSharp_FSharpLib_Library)); } protected static FileSet GetMultiProjectSolutionFiles() { return new FileSet( (@"TestSolution.sln", Resources.SolutionFiles.VB_and_CSharp), (@"CSharpProject\CSharpProject.csproj", Resources.ProjectFiles.CSharp.CSharpProject), (@"CSharpProject\CSharpClass.cs", Resources.SourceFiles.CSharp.CSharpClass), (@"CSharpProject\Properties\AssemblyInfo.cs", Resources.SourceFiles.CSharp.AssemblyInfo), (@"VisualBasicProject\VisualBasicProject.vbproj", Resources.ProjectFiles.VisualBasic.VisualBasicProject), (@"VisualBasicProject\VisualBasicClass.vb", Resources.SourceFiles.VisualBasic.VisualBasicClass), (@"VisualBasicProject\My Project\Application.Designer.vb", Resources.SourceFiles.VisualBasic.Application_Designer), (@"VisualBasicProject\My Project\Application.myapp", Resources.SourceFiles.VisualBasic.Application), (@"VisualBasicProject\My Project\AssemblyInfo.vb", Resources.SourceFiles.VisualBasic.AssemblyInfo), (@"VisualBasicProject\My Project\Resources.Designer.vb", Resources.SourceFiles.VisualBasic.Resources_Designer), (@"VisualBasicProject\My Project\Resources.resx", Resources.SourceFiles.VisualBasic.Resources), (@"VisualBasicProject\My Project\Settings.Designer.vb", Resources.SourceFiles.VisualBasic.Settings_Designer), (@"VisualBasicProject\My Project\Settings.settings", Resources.SourceFiles.VisualBasic.Settings)); } protected static FileSet GetProjectReferenceSolutionFiles() { return new FileSet( (@"CSharpProjectReference.sln", Resources.SolutionFiles.CSharp_ProjectReference), (@"CSharpProject\CSharpProject.csproj", Resources.ProjectFiles.CSharp.CSharpProject), (@"CSharpProject\CSharpClass.cs", Resources.SourceFiles.CSharp.CSharpClass), (@"CSharpProject\Properties\AssemblyInfo.cs", Resources.SourceFiles.CSharp.AssemblyInfo), (@"CSharpProject\CSharpProject_ProjectReference.csproj", Resources.ProjectFiles.CSharp.ProjectReference), (@"CSharpProject\CSharpConsole.cs", Resources.SourceFiles.CSharp.CSharpConsole)); } protected static FileSet GetDuplicateProjectReferenceSolutionFiles() { return new FileSet( (@"CSharpProjectReference.sln", Resources.SolutionFiles.CSharp_ProjectReference), (@"CSharpProject\CSharpProject.csproj", Resources.ProjectFiles.CSharp.CSharpProject), (@"CSharpProject\CSharpClass.cs", Resources.SourceFiles.CSharp.CSharpClass), (@"CSharpProject\Properties\AssemblyInfo.cs", Resources.SourceFiles.CSharp.AssemblyInfo), (@"CSharpProject\CSharpProject_ProjectReference.csproj", Resources.ProjectFiles.CSharp.DuplicateReferences), (@"CSharpProject\CSharpConsole.cs", Resources.SourceFiles.CSharp.CSharpConsole), (@"CSharpProject\EmptyLibrary.dll", Resources.Dlls.EmptyLibrary)); } protected static FileSet GetAnalyzerReferenceSolutionFiles() { return new FileSet( (@"AnalyzerReference.sln", Resources.SolutionFiles.AnalyzerReference), (@"AnalyzerSolution\CSharpProject.dll", Resources.Dlls.CSharpProject), (@"AnalyzerSolution\CSharpProject_AnalyzerReference.csproj", Resources.ProjectFiles.CSharp.AnalyzerReference), (@"AnalyzerSolution\CSharpClass.cs", Resources.SourceFiles.CSharp.CSharpClass), (@"AnalyzerSolution\XamlFile.xaml", Resources.SourceFiles.Xaml.MainWindow), (@"AnalyzerSolution\VisualBasicProject_AnalyzerReference.vbproj", Resources.ProjectFiles.VisualBasic.AnalyzerReference), (@"AnalyzerSolution\VisualBasicClass.vb", Resources.SourceFiles.VisualBasic.VisualBasicClass), (@"AnalyzerSolution\My Project\Application.Designer.vb", Resources.SourceFiles.VisualBasic.Application_Designer), (@"AnalyzerSolution\My Project\Application.myapp", Resources.SourceFiles.VisualBasic.Application), (@"AnalyzerSolution\My Project\AssemblyInfo.vb", Resources.SourceFiles.VisualBasic.AssemblyInfo), (@"AnalyzerSolution\My Project\Resources.Designer.vb", Resources.SourceFiles.VisualBasic.Resources_Designer), (@"AnalyzerSolution\My Project\Resources.resx", Resources.SourceFiles.VisualBasic.Resources), (@"AnalyzerSolution\My Project\Settings.Designer.vb", Resources.SourceFiles.VisualBasic.Settings_Designer), (@"AnalyzerSolution\My Project\Settings.settings", Resources.SourceFiles.VisualBasic.Settings)); } protected static FileSet GetSolutionWithDuplicatedGuidFiles() { return new FileSet( (@"DuplicatedGuids.sln", Resources.SolutionFiles.DuplicatedGuids), (@"ReferenceTest\ReferenceTest.csproj", Resources.ProjectFiles.CSharp.DuplicatedGuidReferenceTest), (@"Library1\Library1.csproj", Resources.ProjectFiles.CSharp.DuplicatedGuidLibrary1), (@"Library2\Library2.csproj", Resources.ProjectFiles.CSharp.DuplicatedGuidLibrary2)); } protected static FileSet GetSolutionWithCircularProjectReferences() { return new FileSet( (@"CircularSolution.sln", Resources.SolutionFiles.CircularSolution), (@"CircularCSharpProject1.csproj", Resources.ProjectFiles.CSharp.CircularProjectReferences_CircularCSharpProject1), (@"CircularCSharpProject2.csproj", Resources.ProjectFiles.CSharp.CircularProjectReferences_CircularCSharpProject2)); } protected static FileSet GetVBNetCoreAppWithGlobalImportAndLibraryFiles() { return new FileSet( (@"VBProject\VBProject.vbproj", Resources.ProjectFiles.VisualBasic.VBNetCoreAppWithGlobalImportAndLibrary_VBProject), (@"VBProject\Program.vb", Resources.SourceFiles.VisualBasic.VBNetCoreAppWithGlobalImportAndLibrary_Program), (@"Library\Library.csproj", Resources.ProjectFiles.CSharp.VBNetCoreAppWithGlobalImportAndLibrary_Library), (@"Library\MyHelperClass.cs", Resources.SourceFiles.CSharp.VBNetCoreAppWithGlobalImportAndLibrary_MyHelperClass)); } }