public void ItCanGenerateTheRuntimeFallbackGraph() { string mainProjectName = "simple.dependencies"; LockFile lockFile = TestLockFiles.GetLockFile(mainProjectName); SingleProjectInfo mainProject = SingleProjectInfo.Create( "/usr/Path", mainProjectName, ".dll", "1.0.0", new ITaskItem[] { }); ProjectContext projectContext = lockFile.CreateProjectContext( FrameworkConstants.CommonFrameworks.NetCoreApp10.GetShortFolderName(), runtime: null, platformLibraryName: Constants.DefaultPlatformLibrary, runtimeFrameworks: null, isSelfContained: true); var runtimeGraph = new RuntimeGraph( new RuntimeDescription [] { new RuntimeDescription("os-arch", new string [] { "os", "base" }), new RuntimeDescription("new_os-arch", new string [] { "os-arch", "os", "base" }), new RuntimeDescription("os-new_arch", new string [] { "os-arch", "os", "base" }), new RuntimeDescription("new_os-new_arch", new string [] { "new_os-arch", "os-new_arch", "os-arch", "os", "base" }), new RuntimeDescription("os-another_arch", new string [] { "os", "base" }) }); void CheckRuntimeFallbacks(string runtimeIdentifier, int fallbackCount) { projectContext.LockFileTarget.RuntimeIdentifier = runtimeIdentifier; var dependencyContextBuilder = new DependencyContextBuilder(mainProject, includeRuntimeFileVersions: false, runtimeGraph, projectContext); var runtimeFallbacks = dependencyContextBuilder.Build().RuntimeGraph; runtimeFallbacks .Count() .Should() .Be(fallbackCount); runtimeFallbacks .Any(runtimeFallback => !runtimeFallback.Runtime.Equals(runtimeIdentifier) && !runtimeFallback.Fallbacks.Contains(runtimeIdentifier)) .Should() .BeFalse(); } CheckRuntimeFallbacks("os-arch", 4); CheckRuntimeFallbacks("new_os-arch", 2); CheckRuntimeFallbacks("os-new_arch", 2); CheckRuntimeFallbacks("new_os-new_arch", 1); CheckRuntimeFallbacks("unrelated_os-unknown_arch", 0); }
public void ItBuildsDependencyContextsFromProjectLockFiles( string mainProjectName, string mainProjectVersion, CompilationOptions compilationOptions, string baselineFileName, string runtime, ITaskItem[] satelliteAssemblies) { LockFile lockFile = TestLockFiles.GetLockFile(mainProjectName); SingleProjectInfo mainProject = SingleProjectInfo.Create( "/usr/Path", mainProjectName, ".dll", mainProjectVersion, satelliteAssemblies ?? new ITaskItem[] { }); ProjectContext projectContext = lockFile.CreateProjectContext( FrameworkConstants.CommonFrameworks.NetCoreApp10, runtime, Constants.DefaultPlatformLibrary); DependencyContext dependencyContext = new DependencyContextBuilder(mainProject, projectContext) .WithCompilationOptions(compilationOptions) .Build(); JObject result = Save(dependencyContext); JObject baseline = ReadJson($"{baselineFileName}.deps.json"); try { baseline .Should() .BeEquivalentTo(result); } catch { // write the result file out on failure for easy comparison using (JsonTextWriter writer = new JsonTextWriter(File.CreateText($"result-{baselineFileName}.deps.json"))) { JsonSerializer serializer = new JsonSerializer(); serializer.Formatting = Formatting.Indented; serializer.Serialize(writer, result); } throw; } }
public void ItBuildsDependencyContextsFromProjectLockFiles( string mainProjectName, string mainProjectVersion, CompilationOptions compilationOptions, string baselineFileName, string runtime, ITaskItem[] assemblySatelliteAssemblies, ITaskItem[] referencePaths, ITaskItem[] referenceSatellitePaths, object[] resolvedNuGetFiles) { LockFile lockFile = TestLockFiles.GetLockFile(mainProjectName); SingleProjectInfo mainProject = SingleProjectInfo.Create( "/usr/Path", mainProjectName, ".dll", mainProjectVersion, assemblySatelliteAssemblies ?? new ITaskItem[] { }); IEnumerable <ReferenceInfo> directReferences = ReferenceInfo.CreateDirectReferenceInfos( referencePaths ?? new ITaskItem[] { }, referenceSatellitePaths ?? new ITaskItem[] { }, projectContextHasProjectReferences: false, i => true); ProjectContext projectContext = lockFile.CreateProjectContext( FrameworkConstants.CommonFrameworks.NetCoreApp10.GetShortFolderName(), runtime, Constants.DefaultPlatformLibrary, runtimeFrameworks: null, isSelfContained: !string.IsNullOrEmpty(runtime)); if (resolvedNuGetFiles == null) { resolvedNuGetFiles = Array.Empty <ResolvedFile>(); } DependencyContext dependencyContext = new DependencyContextBuilder(mainProject, includeRuntimeFileVersions: false, runtimeGraph: null, projectContext: projectContext) .WithDirectReferences(directReferences) .WithCompilationOptions(compilationOptions) .WithResolvedNuGetFiles((ResolvedFile[])resolvedNuGetFiles) .Build(); JObject result = Save(dependencyContext); JObject baseline = ReadJson($"{baselineFileName}.deps.json"); try { baseline .Should() .BeEquivalentTo(result); } catch { // write the result file out on failure for easy comparison using (JsonTextWriter writer = new JsonTextWriter(File.CreateText($"result-{baselineFileName}.deps.json"))) { JsonSerializer serializer = new JsonSerializer(); serializer.Formatting = Formatting.Indented; serializer.Serialize(writer, result); } throw; } }
private DependencyContext BuildDependencyContextWithReferenceAssemblies(bool useCompilationOptions) { string mainProjectName = "simple.dependencies"; LockFile lockFile = TestLockFiles.GetLockFile(mainProjectName); SingleProjectInfo mainProject = SingleProjectInfo.Create( "/usr/Path", mainProjectName, ".dll", "1.0.0", new ITaskItem[] { }); ITaskItem[] referencePaths = new ITaskItem[] { new MockTaskItem( "/usr/Path/System.NotConflicting.dll", new Dictionary <string, string> { { "CopyLocal", "false" }, { "FusionName", "System.NotConflicting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" }, { "Version", "" }, }), new MockTaskItem( "/usr/Path/System.Collections.NonGeneric.dll", new Dictionary <string, string> { { "CopyLocal", "false" }, { "FusionName", "System.Collections.NonGeneric, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" }, { "Version", "" }, }), new MockTaskItem( "/usr/Path/System.Collections.NonGeneric.Reference.dll", new Dictionary <string, string> { { "CopyLocal", "false" }, { "FusionName", "System.Collections.NonGeneric.Reference, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" }, { "Version", "" }, }), }; ProjectContext projectContext = lockFile.CreateProjectContext( FrameworkConstants.CommonFrameworks.NetCoreApp10.GetShortFolderName(), runtime: null, platformLibraryName: Constants.DefaultPlatformLibrary, runtimeFrameworks: null, isSelfContained: false); CompilationOptions compilationOptions = useCompilationOptions ? CreateCompilationOptions() : null; DependencyContext dependencyContext = new DependencyContextBuilder(mainProject, includeRuntimeFileVersions: false, runtimeGraph: null, projectContext: projectContext) .WithReferenceAssemblies(ReferenceInfo.CreateReferenceInfos(referencePaths)) .WithCompilationOptions(compilationOptions) .Build(); // ensure the DependencyContext can be written out successfully - it has no duplicate dependency names Save(dependencyContext); return(dependencyContext); }