public void SystemRuntimeDepends_Yes_Indirect() { ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = new MockEngine(); t.Assemblies = new ITaskItem[] { new TaskItem("Portable"), }; t.Assemblies[0].SetMetadata("HintPath", @"C:\SystemRuntime\Portable.dll"); t.SearchPaths = DefaultPaths; // build mode t.FindDependencies = true; Assert.True(t.Execute(fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, getLastWriteTime, getRuntimeVersion, openBaseKey, checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader)); Assert.True(string.Equals(t.DependsOnSystemRuntime, "true", StringComparison.OrdinalIgnoreCase)); // "Expected System.Runtime dependency found during build." // intelli build mode t.FindDependencies = false; Assert.True(t.Execute(fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, getLastWriteTime, getRuntimeVersion, openBaseKey, checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader)); Assert.True(string.Equals(t.DependsOnSystemRuntime, "true", StringComparison.OrdinalIgnoreCase)); // "Expected System.Runtime dependency found during intellibuild." }
public void NETStandardDepends_Yes_Indirect() { ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = new MockEngine(); t.Assemblies = new ITaskItem[] { new TaskItem("netstandardlibrary"), }; t.Assemblies[0].SetMetadata("HintPath", s_netstandardLibraryDllPath); t.SearchPaths = DefaultPaths; // build mode t.FindDependencies = true; Assert.True(t.Execute(fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, getLastWriteTime, getRuntimeVersion, openBaseKey, checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader)); Console.WriteLine(((MockEngine)t.BuildEngine).Log); Assert.True(string.Equals(t.DependsOnNETStandard, "true", StringComparison.OrdinalIgnoreCase)); // "Expected netstandard dependency found during build." // intelli build mode t.FindDependencies = false; Assert.True(t.Execute(fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, getLastWriteTime, getRuntimeVersion, openBaseKey, checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader)); Assert.True(string.Equals(t.DependsOnNETStandard, "true", StringComparison.OrdinalIgnoreCase)); // "Expected netstandard dependency found during intellibuild." }
public void HigherVersionDirectDependenciesFalse() { MockEngine e = new MockEngine(); TaskItem item = new TaskItem("DependsOnFoo45Framework"); ITaskItem[] items = new ITaskItem[] { item }; ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = e; t.Assemblies = items; t.FindDependencies = false; t.TargetFrameworkMoniker = "Foo, Version=4.0"; t.TargetFrameworkMonikerDisplayName = "Foo"; t.SearchPaths = new string[] { @"c:\Frameworks\" }; Assert.True(t.Execute(fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, getLastWriteTime, getRuntimeVersion, openBaseKey, checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader)); Assert.Equal(0, e.Warnings); // "No warning expected in this scenario." Assert.Equal(0, e.Errors); // "No errors expected in this scenario." Assert.Equal(1, t.ResolvedFiles.Length); Assert.Equal(0, t.ResolvedDependencyFiles.Length); Assert.True(ContainsItem(t.ResolvedFiles, Path.Combine(s_frameworksPath, "DependsOnFoo45Framework.dll"))); // "Expected to find assembly, but didn't." }
private static AssemblyResolutionResult ResolveAssembly(string assemblyName, IList <string> searchPaths, IList <string> targetFrameworkDirectories, bool checkDependencies) { ResolveAssemblyReference reference = new ResolveAssemblyReference(); MockEngine engine = new MockEngine(); reference.BuildEngine = engine; if (searchPaths != null) { reference.SearchPaths = searchPaths.ToArray <string>(); } if (targetFrameworkDirectories != null) { reference.TargetFrameworkDirectories = targetFrameworkDirectories.ToArray <string>(); } reference.Assemblies = new ITaskItem[] { new TaskItem(assemblyName) }; reference.Silent = true; reference.Execute(); AssemblyResolutionResult result = new AssemblyResolutionResult(); List <string> list = new List <string>(); foreach (ITaskItem item in reference.ResolvedFiles) { list.Add(item.ItemSpec); } if (checkDependencies) { CheckOutOfRangeDependencies(assemblyName); } result.ResolvedFiles = list.ToArray(); result.Warnings = engine.Warnings; result.Errors = engine.Errors; return(result); }
/// <summary> /// Resolves the given references /// </summary> /// <param name="proj">The Project to resolve external references for</param> /// <returns>The resolved references</returns> public override IEnumerable <ResolvedReference> ResolveReferences(Project proj) { IEnumerable <ProjectItem> references = proj.Items.Where(itm => itm.ItemType == "Reference"); if (references.Count() == 0) { return(new List <ResolvedReference>()); } // Create task items from references List <ITaskItem> taskItems = new List <ITaskItem>(); foreach (ProjectItem item in references) { taskItems.Add(new ReferenceTaskItem(item)); } taskItems.Add(new TaskItem("System.Core")); taskItems.Add(new TaskItem("System.Runtime")); // Use resolve assembly reference and add the task items ResolveAssemblyReference resolver = new ResolveAssemblyReference { Assemblies = taskItems.ToArray(), // These props come from the inputs TargetFrameworkDirectories = _paramProvider.TargetFrameworkDirectories, SearchPaths = _paramProvider.SearchPaths, AllowedAssemblyExtensions = _paramProvider.AllowedAssemblyExtensions, TargetProcessorArchitecture = _paramProvider.TargetProcessorArchitecture, TargetFrameworkMoniker = _paramProvider.TargetFrameworkMoniker, TargetedRuntimeVersion = _paramProvider.TargetedRuntimeVersion, TargetFrameworkVersion = _paramProvider.TargetFrameworkVersion, AllowedRelatedFileExtensions = _paramProvider.AllowedRelatedFileExtensions, FullTargetFrameworkSubsetNames = _paramProvider.FullTargetFrameworkSubsetNames, FullFrameworkFolders = _paramProvider.FullFrameworkFolders, // these are just defaulted (which i guess i could add as an input, but i don't really know what they do) AutoUnify = true, FindSatellites = true, BuildEngine = new DummyBuildEngine(references.First().Project) }; resolver.Execute(); return(resolver.ResolvedFiles .Select(taskItem => new ResolvedReference( taskItem.ItemSpec, taskItem.GetMetadata("EmbedInteropTypes").ToUpper() == "TRUE") ) .Union(resolver.ResolvedDependencyFiles.Select(taskItem => new ResolvedReference( taskItem.ItemSpec, taskItem.GetMetadata("EmbedInteropTypes").ToUpper() == "TRUE") ))); }
private string GetAssemblyFileFromAssemblyName(string assemblyName, ProjectItem reference = null, Project project = null) { string result; if (assemblyNameToAssemblyFileMap.TryGetValue(assemblyName, out result)) { return(result); } IDictionary metadata = null; if (reference != null) { metadata = reference.Metadata.ToDictionary(m => m.Name, m => m.EvaluatedValue); } ResolveAssemblyReference resolveTask = new ResolveAssemblyReference(); string referenceString = assemblyName; TaskItem taskItem = metadata != null ? new TaskItem(referenceString, metadata) : new TaskItem(referenceString); resolveTask.Assemblies = new ITaskItem[] { taskItem }; resolveTask.Silent = true; resolveTask.SearchPaths = assemblySearchPaths; if (project != null) { resolveTask.TargetFrameworkVersion = project.GetPropertyValue("TargetFrameworkVersion"); resolveTask.TargetFrameworkMoniker = project.GetPropertyValue("TargetFrameworkMoniker"); resolveTask.TargetFrameworkMonikerDisplayName = project.GetPropertyValue("TargetFrameworkMonikerDisplayName"); resolveTask.TargetedRuntimeVersion = project.GetPropertyValue("TargetRuntimeVersion"); resolveTask.TargetFrameworkDirectories = new[] { project.GetPropertyValue("FrameworkPathOverride") }; } try { if (!resolveTask.Execute() || resolveTask.ResolvedFiles.Length == 0) { Log("===> Failed to resolve assembly: " + assemblyName); return(null); } } catch { return(null); } result = resolveTask.ResolvedFiles[0].ItemSpec; result = Path.GetFullPath(result); assemblyNameToAssemblyFileMap.Add(assemblyName, result); return(result); }
// NOTE: https://github.com/Microsoft/msbuild/wiki/ResolveAssemblyReference private static ITaskItem[] ResolveAssemblyReferences(Project project) { var searchPaths = GetSearchPaths(project); var frameworkDirectories = GetFrameworkDirectories(project); var references = GetReferences(project); var explicitReferences = GetAssemblyFiles(project); var appConfigFile = GetAppConfigFile(project); /// TODO: each project will create the same logger -> use pool of objects in <see cref="LogManager"/> using (var logger = LogManager.GetLogger("ResolveReference")) { logger.Info("Executing ResolveAssemblyReference task..."); var resolveTask = new ResolveAssemblyReference { BuildEngine = new MsBuildEngine(logger), Assemblies = references, AssemblyFiles = explicitReferences, TargetFrameworkVersion = project.GetPropertyValue("TargetFrameworkVersion"), TargetFrameworkMoniker = project.GetPropertyValue("TargetFrameworkMoniker"), SearchPaths = searchPaths, TargetFrameworkDirectories = frameworkDirectories, TargetedRuntimeVersion = project.GetPropertyValue("TargetedRuntimeVersion"), TargetFrameworkMonikerDisplayName = project.GetPropertyValue("TargetFrameworkMonikerDisplayName"), AppConfigFile = appConfigFile, AllowedAssemblyExtensions = allowedAssemblyExtensions, AutoUnify = project.GetPropertyValue("AutoUnifyAssemblyReferences").IsTrue() }; var result = resolveTask.Execute(); if (result) { logger.Info("ResolveAssemblyReference task was successfully done"); } else { logger.Error("ResolveAssemblyReference task was failed"); } //ProjectCollection.GlobalProjectCollection.UnloadProject(project); return(resolveTask.ResolvedFiles); } }
public void DependsOn_NETStandard_and_SystemRuntime_ExternallyResolved() { ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = new MockEngine(_output); t.Assemblies = new ITaskItem[] { new TaskItem("netstandardlibrary"), new TaskItem("Portable"), }; t.Assemblies[0].SetMetadata("ExternallyResolved", "true"); t.Assemblies[0].SetMetadata("HintPath", s_netstandardLibraryDllPath); t.Assemblies[1].SetMetadata("ExternallyResolved", "true"); t.Assemblies[1].SetMetadata("HintPath", s_portableDllPath); t.SearchPaths = DefaultPaths; // build mode t.FindDependencies = true; Assert.True(t.Execute( fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, #if FEATURE_WIN32_REGISTRY getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, #endif getLastWriteTime, getRuntimeVersion, #if FEATURE_WIN32_REGISTRY openBaseKey, #endif checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader)); Assert.Equal("true", t.DependsOnSystemRuntime, true); // "Expected System.Runtime dependency found during build." Assert.Equal("true", t.DependsOnNETStandard, true); // "Expected netstandard dependency found during build." // intelli build mode t.FindDependencies = false; Assert.True(t.Execute( fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, #if FEATURE_WIN32_REGISTRY getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, #endif getLastWriteTime, getRuntimeVersion, #if FEATURE_WIN32_REGISTRY openBaseKey, #endif checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader)); Assert.Equal("true", t.DependsOnSystemRuntime, true); // "Expected System.Runtime dependency found during intellibuild." Assert.Equal("true", t.DependsOnNETStandard, true); // "Expected netstandard dependency found during intellibuild." }
public void SystemRuntimeDepends_Yes() { ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = new MockEngine(_output); t.Assemblies = new ITaskItem[] { new TaskItem("System.Runtime"), }; t.Assemblies[0].SetMetadata("HintPath", @"C:\SystemRuntime\System.Runtime.dll"); t.SearchPaths = DefaultPaths; // build mode t.FindDependencies = true; Assert.True( t.Execute ( fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, #if FEATURE_WIN32_REGISTRY getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, #endif getLastWriteTime, getRuntimeVersion, #if FEATURE_WIN32_REGISTRY openBaseKey, #endif checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader ) ); Assert.Equal("true", t.DependsOnSystemRuntime, true); // "Expected System.Runtime dependency found during build." // intelli build mode t.FindDependencies = false; Assert.True( t.Execute ( fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, #if FEATURE_WIN32_REGISTRY getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, #endif getLastWriteTime, getRuntimeVersion, #if FEATURE_WIN32_REGISTRY openBaseKey, #endif checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader ) ); Assert.Equal("true", t.DependsOnSystemRuntime, true); // "Expected System.Runtime dependency found during intellibuild." }
public void SystemRuntimeDepends_No_Build() { ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = new MockEngine(); t.Assemblies = new ITaskItem[] { new TaskItem("Regular"), }; t.Assemblies[0].SetMetadata("HintPath", @"C:\SystemRuntime\Regular.dll"); t.SearchPaths = DefaultPaths; // build mode t.FindDependencies = true; Assert.True( t.Execute ( fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, #if FEATURE_WIN32_REGISTRY getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, #endif getLastWriteTime, getRuntimeVersion, #if FEATURE_WIN32_REGISTRY openBaseKey, #endif checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader ) ); Assert.True(string.Equals(t.DependsOnSystemRuntime, "false", StringComparison.OrdinalIgnoreCase)); // "Expected no System.Runtime dependency found during build." Assert.True(string.Equals(t.DependsOnNETStandard, "false", StringComparison.OrdinalIgnoreCase)); // "Expected no netstandard dependency found during build." // intelli build mode t.FindDependencies = false; Assert.True( t.Execute ( fileExists, directoryExists, getDirectories, getAssemblyName, getAssemblyMetadata, #if FEATURE_WIN32_REGISTRY getRegistrySubKeyNames, getRegistrySubKeyDefaultValue, #endif getLastWriteTime, getRuntimeVersion, #if FEATURE_WIN32_REGISTRY openBaseKey, #endif checkIfAssemblyIsInGac, isWinMDFile, readMachineTypeFromPEHeader ) ); Assert.True(string.Equals(t.DependsOnSystemRuntime, "false", StringComparison.OrdinalIgnoreCase)); // "Expected no System.Runtime dependency found during intellibuild." Assert.True(string.Equals(t.DependsOnNETStandard, "false", StringComparison.OrdinalIgnoreCase)); // "Expected no netstandard dependency found during intellibuild." }