private static void ResolveSDKFromRefereneAssemblyLocation(string referenceName, string expectedPath) { // Create the engine. MockEngine engine = new MockEngine(); TaskItem taskItem = new TaskItem(referenceName); taskItem.SetMetadata("SDKName", "FakeSDK, Version=1.0"); TaskItem resolvedSDK = new TaskItem(@"C:\FakeSDK"); resolvedSDK.SetMetadata("SDKName", "FakeSDK, Version=1.0"); resolvedSDK.SetMetadata("TargetedSDKConfiguration", "Debug"); resolvedSDK.SetMetadata("TargetedSDKArchitecture", "X86"); TaskItem[] assemblies = new TaskItem[] { taskItem }; // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblies; t.ResolvedSDKReferences = new ITaskItem[] { resolvedSDK }; t.SearchPaths = new String[] { @"C:\SomeOtherPlace" }; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(1, t.ResolvedFiles.Length); Assert.Equal(0, engine.Errors); Assert.Equal(0, engine.Warnings); Assert.True(t.ResolvedFiles[0].ItemSpec.Equals(expectedPath, StringComparison.OrdinalIgnoreCase)); }
public void IgnoreVersionBasic() { MockEngine e = new MockEngine(); TaskItem item = new TaskItem("DependsOn9, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"); ITaskItem[] items = new ITaskItem[] { item }; string redistString = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='DependsOn9' Version='9.0.0.0' PublicKeyToken='b17a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "</FileList >"; ResolveAssemblyReference t = new ResolveAssemblyReference(); t.IgnoreVersionForFrameworkReferences = true; ExecuteRAROnItemsAndRedist(t, e, items, redistString, true); Assert.Equal(0, e.Warnings); // "No warnings expected in this scenario." Assert.Equal(0, e.Errors); // "No errors expected in this scenario." Assert.Equal(1, t.ResolvedFiles.Length); Assert.True(ContainsItem(t.ResolvedFiles, @"c:\MyComponents\misc\DependsOn9.dll")); // "Expected to find assembly, but didn't." // Do the resolution without the metadata, expect it to not work since we should not be able to find Dependson9 version 10.0.0.0 e = new MockEngine(); item = new TaskItem("DependsOn9, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"); items = new ITaskItem[] { item }; redistString = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='DependsOn9' Version='9.0.0.0' PublicKeyToken='b17a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "</FileList >"; t = new ResolveAssemblyReference(); ExecuteRAROnItemsAndRedist(t, e, items, redistString, true); Assert.Equal(1, e.Warnings); // "Expected one warning in this scenario." e.AssertLogContains("MSB3257"); e.AssertLogContains("DependsOn9"); Assert.Equal(0, t.ResolvedFiles.Length); }
public void BadAppconfigOldVersion() { // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyFiles = new TaskItem[] { new TaskItem(@"C:\MyComponents\v1.0\UnifyMe.dll") }; // Construct the app.config. string appConfigFile = WriteAppConfig ( " <runtime>\n" + "<assemblyBinding xmlns='urn:schemas-microsoft-com:asm.v1'>\n" + "<dependentAssembly>\n" + "<assemblyIdentity name='Micron.Facilities.Data' publicKeyToken='2D8C82D3A1452EF1' culture='neutral'/>\n" + "<bindingRedirect oldVersion='1.*' newVersion='2.0.0.0'/>\n" + "</dependentAssembly>\n" + "</assemblyBinding>\n" + "</runtime>\n" ); try { // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.AssemblyFiles = assemblyFiles; t.SearchPaths = DefaultPaths; t.AppConfigFile = appConfigFile; bool succeeded = Execute(t); Assert.False(succeeded); engine.AssertLogContains("MSB3249"); } finally { if (File.Exists(appConfigFile)) { // Cleanup. File.Delete(appConfigFile); } } }
public void Exists() { // This WriteLine is a hack. On a slow machine, the Tasks unittest fails because remoting // times out the object used for remoting console writes. Adding a write in the middle of // keeps remoting from timing out the object. Console.WriteLine("Performing VersioningAndUnification.Prerequisite.StronglyNamedDependency.Exists() test"); // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnEverettSystem, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=feedbeadbadcadbe") }; // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(1, t.ResolvedDependencyFiles.Length); Assert.Equal(0, engine.Errors); Assert.Equal(0, engine.Warnings); AssertNoCase ( "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKey, t.ResolvedDependencyFiles[0].GetMetadata("FusionName") ); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByFrameworkRetarget"), "1.0.5000.0", @"C:\MyApp\v1.0\DependsOnEverettSystem.dll") ); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.NotCopyLocalBecausePrerequisite")) ); AssertNoCase("false", t.ResolvedDependencyFiles[0].GetMetadata("CopyLocal")); }
public void Exists() { // This WriteLine is a hack. On a slow machine, the Tasks unittest fails because remoting // times out the object used for remoting console writes. Adding a write in the middle of // keeps remoting from timing out the object. Console.WriteLine("Performing VersioningAndUnification.Prerequisite.SpecificVersionPrimary.Exists() test"); // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("UnifyMe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; assemblyNames[0].SetMetadata("SpecificVersion", "true"); // Construct the app.config. string appConfigFile = WriteAppConfig ( " <dependentAssembly>\n" + " <assemblyIdentity name='UnifyMe' PublicKeyToken='b77a5c561934e089' culture='neutral' />\n" + " <bindingRedirect oldVersion='1.0.0.0' newVersion='2.0.0.0' />\n" + " </dependentAssembly>\n" ); // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.AppConfigFile = appConfigFile; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(1, t.ResolvedFiles.Length); AssertNoCase("UnifyMe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, ProcessorArchitecture=MSIL", t.ResolvedFiles[0].GetMetadata("FusionName")); AssertNoCase(@"{Registry:Software\Microsoft\.NetFramework,v2.0,AssemblyFoldersEx}", t.ResolvedFiles[0].GetMetadata("ResolvedFrom")); // Cleanup. File.Delete(appConfigFile); }
public void PassReferenceWithNoReferenceDirectory() { MockEngine engine = new MockEngine(); GetSDKReferenceFiles t = new GetSDKReferenceFiles(); t.BuildEngine = engine; ITaskItem item = new TaskItem("C:\\SDKDoesNotExist"); item.SetMetadata("ExpandReferenceAssemblies", "true"); item.SetMetadata("TargetedSDKConfiguration", "Retail"); item.SetMetadata("TargetedSDKArchitecture", "x86"); item.SetMetadata("OriginalItemSpec", "SDKWithManifest, Version=2.0"); t.ResolvedSDKReferences = new ITaskItem[] { item }; t.CacheFileFolderPath = s_cacheDirectory; bool success = t.Execute(s_getAssemblyName, s_getAssemblyRuntimeVersion, FileUtilities.FileExistsNoThrow); Assert.IsTrue(success); Assert.IsTrue(t.CopyLocalFiles.Length == 0); Assert.IsTrue(t.References.Length == 0); Assert.IsTrue(t.RedistFiles.Length == 0); }
public void TargetCurrentTargetFramework() { MockEngine e = new MockEngine(); ITaskItem[] items = new ITaskItem[] { new TaskItem("DependsOnOnlyv4Assemblies") }; string redistString = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='System' Version='4.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "</FileList >"; ResolveAssemblyReference t = new ResolveAssemblyReference(); ExecuteRAROnItemsAndRedist(t, e, items, redistString, true); Assert.Equal(0, e.Warnings); // "No warnings expected in this scenario." Assert.Equal(0, e.Errors); // "No errors expected in this scenario." Assert.Equal(1, t.ResolvedFiles.Length); Assert.True(ContainsItem(t.ResolvedFiles, @"c:\MyComponents\misc\DependsOnOnlyv4Assemblies.dll")); // "Expected to find assembly, but didn't." }
public void Exists() { // This WriteLine is a hack. On a slow machine, the Tasks unittest fails because remoting // times out the object used for remoting console writes. Adding a write in the middle of // keeps remoting from timing out the object. Console.WriteLine("Performing VersioningAndUnification.AutoUnify.StronglyNamedDependency.Exists() test"); // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnUnified, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"), new TaskItem("DependsOnUnified, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.AutoUnify = true; bool succeeded = Execute(t); Assert.True(succeeded); AssertNoCase("UnifyMe, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", t.ResolvedDependencyFiles[0].GetMetadata("FusionName")); AssertNoCase(@"C:\MyComponents\v2.0\UnifyMe.dll", t.ResolvedDependencyFiles[0].ItemSpec); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnifiedDependency"), "UniFYme, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") ); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByAutoUnify"), "1.0.0.0", @"C:\MyApp\v1.0\DependsOnUnified.dll") ); }
public void Exists() { // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnUnified, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; // Construct the app.config. string appConfigFile = WriteAppConfig ( " <dependentAssembly>\n" + " <assemblyIdentity name='UnifyMe' PublicKeyToken='b77a5c561934e089' culture='neutral' />\n" + " <bindingRedirect oldVersion='1.0.0.0' newVersion='2.0.0.0' />\n" + " </dependentAssembly>\n" ); // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.AppConfigFile = appConfigFile; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(1, t.ResolvedDependencyFiles.Length); AssertNoCase("UnifyMe, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", t.ResolvedDependencyFiles[0].GetMetadata("FusionName")); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByAppConfig"), "1.0.0.0", appConfigFile, @"C:\MyApp\v1.0\DependsOnUnified.dll") ); // Cleanup. File.Delete(appConfigFile); }
public void RemapAssemblyBasic() { MockEngine e = new MockEngine(); ITaskItem[] items = new ITaskItem[] { new TaskItem("ReferenceVersion9"), new TaskItem("DependsOnOnlyv4Assemblies"), new TaskItem("AnotherOne") }; string redistString = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='mscorlib' Version='4.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "<Remap>" + "<From AssemblyName='mscorlib' Version='9.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true'>" + " <To AssemblyName='mscorlib' Version='4.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + " </From>" + "<From AssemblyName='DependsOnOnlyv4Assemblies'>" + " <To AssemblyName='ReferenceVersion9' Version='9.0.0.0' PublicKeyToken='b17a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' />" + " </From>" + "<From AssemblyName='AnotherOne'>" + " <To AssemblyName='ReferenceVersion9' Version='9.0.0.0' PublicKeyToken='b17a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' />" + " </From>" + "</Remap>" + "</FileList >"; ResolveAssemblyReference t = new ResolveAssemblyReference(); ExecuteRAROnItemsAndRedist(t, e, items, redistString, false); Assert.Equal(0, e.Warnings); // "Expected NO warning in this scenario." e.AssertLogContainsMessageFromResource(resourceDelegate, "ResolveAssemblyReference.RemappedReference", "DependsOnOnlyv4Assemblies", "ReferenceVersion9, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"); e.AssertLogContainsMessageFromResource(resourceDelegate, "ResolveAssemblyReference.RemappedReference", "AnotherOne", "ReferenceVersion9, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"); Assert.Equal(1, t.ResolvedFiles.Length); Assert.True(t.ResolvedFiles[0].GetMetadata("OriginalItemSpec").Equals("AnotherOne", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedFiles[0].ItemSpec.Equals(@"c:\MyComponents\misc\ReferenceVersion9.dll", StringComparison.OrdinalIgnoreCase)); }
public void SameVersionSameFrameworkDirect() { MockEngine e = new MockEngine(); ITaskItem[] items = new ITaskItem[] { new TaskItem("DependsOnFoo4Framework"), }; ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = e; t.Assemblies = items; t.TargetFrameworkMoniker = "Foo, Version=4.0"; t.TargetFrameworkMonikerDisplayName = "Foo"; t.SearchPaths = new string[] { @"c:\Frameworks\" }; Execute(t); Assert.Equal(0, e.Warnings); // "No warnings expected in this scenario." Assert.Equal(0, e.Errors); // "No errors expected in this scenario." Assert.Equal(1, t.ResolvedFiles.Length); Assert.True(ContainsItem(t.ResolvedFiles, @"c:\Frameworks\DependsOnFoo4Framework.dll")); // "Expected to find assembly, but didn't." }
public void Exists() { // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("UnifyMe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; assemblyNames[0].SetMetadata("SpecificVersion", "false"); // Construct the app.config. string appConfigFile = WriteAppConfig ( " <dependentAssembly>\n" + " <assemblyIdentity name='UnifyMe' PublicKeyToken='b77a5c561934e089' culture='neutral' />\n" + " <bindingRedirect oldVersion='1.0.0.0' newVersion='2.0.0.0' />\n" + " </dependentAssembly>\n" ); // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.AppConfigFile = appConfigFile; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(1, t.ResolvedFiles.Length); AssertNoCase("UnifyMe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, ProcessorArchitecture=MSIL", t.ResolvedFiles[0].GetMetadata("FusionName")); // Cleanup. File.Delete(appConfigFile); }
public void SDkNameNotInResolvedSDKListButOnSearchPath() { // Create the engine. MockEngine engine = new MockEngine(); TaskItem taskItem = new TaskItem(@"SDKWinMD"); taskItem.SetMetadata("SDKName", "NotInstalled, Version=1.0"); TaskItem[] assemblies = new TaskItem[] { taskItem }; // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblies; t.SearchPaths = new String[] { @"C:\FakeSDK\References" }; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(0, t.ResolvedFiles.Length); Assert.Equal(0, engine.Errors); Assert.Equal(1, engine.Warnings); }
/// <summary> /// Given a log and a resource string, acquires the text of that resource string and /// compares it to the log. Assert fails if the log contains the desired string. /// </summary> /// <param name="e">The MockEngine that contains the log we're checking</param> /// <param name="log">The TaskLoggingHelper that we use to load the string resource</param> /// <param name="errorResource">The name of the resource string to check the log for</param> /// <param name="args">Arguments needed to format the resource string properly</param> internal static void VerifyLogDoesNotContainErrorFromResource(MockEngine e, TaskLoggingHelper log, string errorResource, params object[] args) { string errorMessage = log.FormatResourceString(errorResource, args); e.AssertLogDoesntContain(errorMessage); }
private static void WriteLogFile(MockEngine engine, bool projectDtar, IEnumerable<string> assemblies) { string logFilePrefix = projectDtar ? "P" : "G"; string logFilePath = Path.Combine(Path.GetTempPath(), logFilePrefix + @"Dtar" + (Guid.NewGuid()).ToString("N", CultureInfo.InvariantCulture) + ".log"); StringBuilder inputs = new StringBuilder(); Array.ForEach<string>(assemblies.ToArray(), assembly => { inputs.Append(assembly); inputs.Append(";"); inputs.Append("\n"); }); string logAssemblies = "Inputs: \n" + inputs.ToString() + "\n\n"; string finalLog = logAssemblies + engine.Log; string[] finalLogLines = finalLog.Split(new char[] { '\n' }); File.WriteAllLines(logFilePath, finalLogLines); }
public void VerifyAssemblyPulledOutOfFrameworkDoesntGetFrameworkFileAttribute() { MockEngine e = new MockEngine(_output); string actualFrameworkDirectory = s_myVersion20Path; string alternativeFrameworkDirectory = s_myVersion40Path; ITaskItem[] items = new TaskItem[] { new TaskItem(Path.Combine(actualFrameworkDirectory, "System.dll")) }; // Version and directory match framework - it is a framework assembly string redistString1 = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='System' Version='2.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "</FileList >"; ResolveAssemblyReference t1 = new ResolveAssemblyReference(); t1.TargetFrameworkVersion = "v4.5"; t1.TargetFrameworkDirectories = new string[] { actualFrameworkDirectory }; ExecuteRAROnItemsAndRedist(t1, e, items, redistString1, true, new List <string>() { "{RawFileName}" }); Assert.False(String.IsNullOrEmpty(t1.ResolvedFiles[0].GetMetadata("FrameworkFile"))); // Higher version than framework, but directory matches - it is a framework assembly string redistString2 = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='System' Version='1.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "</FileList >"; ResolveAssemblyReference t2 = new ResolveAssemblyReference(); t2.TargetFrameworkVersion = "v4.5"; t2.TargetFrameworkDirectories = new string[] { actualFrameworkDirectory }; ExecuteRAROnItemsAndRedist(t2, e, items, redistString2, true, new List <string>() { "{RawFileName}" }); Assert.False(String.IsNullOrEmpty(t2.ResolvedFiles[0].GetMetadata("FrameworkFile"))); // Version is lower but directory does not match - it is a framework assembly string redistString3 = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='System' Version='3.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "</FileList >"; ResolveAssemblyReference t3 = new ResolveAssemblyReference(); t3.TargetFrameworkVersion = "v4.5"; t3.TargetFrameworkDirectories = new string[] { alternativeFrameworkDirectory }; ExecuteRAROnItemsAndRedist(t3, e, items, redistString3, true, new List <string>() { "{RawFileName}" }); Assert.False(String.IsNullOrEmpty(t3.ResolvedFiles[0].GetMetadata("FrameworkFile"))); // Version is higher and directory does not match - this assembly has been pulled out of .NET string redistString4 = "<FileList Redist='Microsoft-Windows-CLRCoreComp-Random' >" + "<File AssemblyName='System' Version='1.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='neutral' ProcessorArchitecture='MSIL' FileVersion='4.0.0.0' InGAC='true' />" + "</FileList >"; ResolveAssemblyReference t4 = new ResolveAssemblyReference(); t4.TargetFrameworkVersion = "v4.5"; t4.TargetFrameworkDirectories = new string[] { alternativeFrameworkDirectory }; ExecuteRAROnItemsAndRedist(t4, e, items, redistString4, true, new List <string>() { "{RawFileName}" }); Assert.True(String.IsNullOrEmpty(t4.ResolvedFiles[0].GetMetadata("FrameworkFile"))); }
public void MissingMarkdownReturnsFalse() { var mockEngine = new MockEngine(); var testMarkdown = new GenerateReleaseArtifacts(); testMarkdown.MarkdownFile = Path.GetRandomFileName(); testMarkdown.BuildEngine = mockEngine; Assert.That(testMarkdown.CreateHtmFromMarkdownFile(), Is.False); Assert.That(mockEngine.LoggedMessages[0], Is.StringMatching("The given markdown file .* does not exist\\.")); }
public void Prefer32bit2() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "Prefer32bit2"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' SupportPrefer32Bit='false'> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; t.TargetedSDKConfiguration = "Release"; t.TargetedSDKArchitecture = "Any CPU"; t.Prefer32Bit = true; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.False(succeeded); Assert.Equal(1, engine.Errors); Assert.Equal(0, engine.Warnings); // "Expected no warnings" string errorMessage = t.Log.FormatResourceString("ResolveSDKReference.Prefer32BitNotSupportedWithNeutralProject", item.ItemSpec); engine.AssertLogContains(errorMessage); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
private static void TestGoodSDKReferenceIncludes(ITaskItem referenceInclude, string simpleName, string version) { // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); t.BuildEngine = engine; SDKReference reference = t.ParseSDKReference(referenceInclude); Assert.NotNull(reference); Assert.True(reference.SimpleName.Equals(simpleName, StringComparison.OrdinalIgnoreCase)); Assert.True(reference.Version.Equals(version, StringComparison.OrdinalIgnoreCase)); }
public void VerifyDependencyWarningFromMetadata() { // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); item.SetMetadata("DependsOn", "NotHere, Version=1.0"); t.SDKReferences = new ITaskItem[] { item }; t.References = null; ITaskItem installedSDK = new TaskItem(@"c:\SDKDirectory\GoodTestSDK\2.0\"); installedSDK.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installedSDK }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.True(succeeded); Assert.Equal(1, t.ResolvedSDKReferences.Length); engine.AssertLogContainsMessageFromResource(_resourceDelegate, "ResolveSDKReference.NoFrameworkIdentitiesFound"); Assert.True(t.ResolvedSDKReferences[0].ItemSpec.Equals(@"c:\SDKDirectory\GoodTestSDK\2.0\", StringComparison.OrdinalIgnoreCase)); string warning = ResourceUtilities.FormatResourceString("ResolveSDKReference.SDKMissingDependency", "GoodTestSDK, Version=2.0", "\"NotHere, Version=1.0\""); engine.AssertLogContains(warning); }
private EnginePilotStage CreateStage(Job job, Func <IterationData, TimeInterval> measure) { var engine = new MockEngine(output, job, measure); return(new EnginePilotStage(engine)); }
public void HighVersionDoesntExist() { // Create the engine. MockEngine engine = new MockEngine(_output); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnUnified, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; // Construct the app.config. string appConfigFile = WriteAppConfig ( " <dependentAssembly>\n" + " <assemblyIdentity name='UnifyMe' PublicKeyToken='b77a5c561934e089' culture='neutral' />\n" + " <bindingRedirect oldVersion='1.0.0.0' newVersion='4.0.0.0' />\n" + " </dependentAssembly>\n" ); // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.AppConfigFile = appConfigFile; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Empty(t.ResolvedDependencyFiles); string shouldContain; string code = t.Log.ExtractMessageCode ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.FailedToResolveReference"), String.Format(AssemblyResources.GetString("General.CouldNotLocateAssembly"), "UNIFyMe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")), out shouldContain ); engine.AssertLogContains ( shouldContain ); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByAppConfig"), "1.0.0.0", appConfigFile, Path.Combine(s_myApp_V10Path, "DependsOnUnified.dll")) ); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnifiedDependency"), "UNIFyMe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") ); // Cleanup. File.Delete(appConfigFile); }
public void ExistsWithPrimaryReferenceOnBlackList() { string implicitRedistListContents = "<FileList Redist='Microsoft-Windows-CLRCoreComp' >" + "<File AssemblyName='DependsOnUnified' Version='2.0.0.0' Culture='neutral' PublicKeyToken='b77a5c561934e089' InGAC='false' />" + "</FileList >"; string engineOnlySubset = "<FileList Redist='Microsoft-Windows-CLRCoreComp' >" + "<File AssemblyName='Microsoft.Build.Engine' Version='2.0.0.0' PublicKeyToken='b03f5f7f11d50a3a' Culture='Neutral' FileVersion='2.0.50727.208' InGAC='true' />" + "</FileList >"; string redistListPath = FileUtilities.GetTemporaryFile(); string subsetListPath = FileUtilities.GetTemporaryFile(); try { File.WriteAllText(redistListPath, implicitRedistListContents); File.WriteAllText(subsetListPath, engineOnlySubset); // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnUnified, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"), new TaskItem("DependsOnUnified, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.InstalledAssemblyTables = new TaskItem[] { new TaskItem(redistListPath) }; t.InstalledAssemblySubsetTables = new TaskItem[] { new TaskItem(subsetListPath) }; t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.AutoUnify = true; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(1, t.ResolvedFiles.Length); // "Expected there to only be one resolved file" Assert.True(t.ResolvedFiles[0].ItemSpec.Contains(@"C:\MyApp\v1.0\DependsOnUnified.dll")); // "Expected the ItemSpec of the resolved file to be the item spec of the 1.0.0.0 assembly" Assert.Equal(1, t.ResolvedDependencyFiles.Length); // "Expected there to be two resolved dependencies" AssertNoCase("UnifyMe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", t.ResolvedDependencyFiles[0].GetMetadata("FusionName")); AssertNoCase(@"C:\MyComponents\v1.0\UnifyMe.dll", t.ResolvedDependencyFiles[0].ItemSpec); engine.AssertLogDoesntContain ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnifiedDependency"), "UnifyMe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, ProcessorArchitecture=MSIL") ); engine.AssertLogDoesntContain ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByAutoUnify"), "1.0.0.0", @"C:\MyApp\v2.0\DependsOnUnified.dll") ); } finally { File.Delete(redistListPath); File.Delete(subsetListPath); } }
public void ExistsPromotedDependencyInTheBlackList() { string implicitRedistListContents = "<FileList Redist='Microsoft-Windows-CLRCoreComp' >" + "<File AssemblyName='UniFYme' Version='2.0.0.0' Culture='neutral' PublicKeyToken='b77a5c561934e089' InGAC='false' />" + "</FileList >"; string engineOnlySubset = "<FileList Redist='Microsoft-Windows-CLRCoreComp' >" + "<File AssemblyName='Microsoft.Build.Engine' Version='2.0.0.0' PublicKeyToken='b03f5f7f11d50a3a' Culture='Neutral' FileVersion='2.0.50727.208' InGAC='true' />" + "</FileList >"; string redistListPath = FileUtilities.GetTemporaryFile(); string subsetListPath = FileUtilities.GetTemporaryFile(); string appConfigFile = null; try { File.WriteAllText(redistListPath, implicitRedistListContents); File.WriteAllText(subsetListPath, engineOnlySubset); // Create the engine. MockEngine engine = new MockEngine(_output); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnUnified, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; // Construct the app.config. appConfigFile = WriteAppConfig ( " <dependentAssembly>\n" + " <assemblyIdentity name='UnifyMe' PublicKeyToken='b77a5c561934e089' culture='neutral' />\n" + " <bindingRedirect oldVersion='1.0.0.0' newVersion='2.0.0.0' />\n" + " </dependentAssembly>\n" ); // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.InstalledAssemblyTables = new TaskItem[] { new TaskItem(redistListPath) }; t.InstalledAssemblySubsetTables = new TaskItem[] { new TaskItem(subsetListPath) }; t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.AppConfigFile = appConfigFile; bool succeeded = Execute(t, false); Assert.True(succeeded); Assert.Empty(t.ResolvedDependencyFiles); engine.AssertLogDoesntContain ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByAppConfig"), "1.0.0.0", appConfigFile, Path.Combine(s_myApp_V10Path, "DependsOnUnified.dll")) ); } finally { File.Delete(redistListPath); File.Delete(subsetListPath); // Cleanup. File.Delete(appConfigFile); } }
public void MultipleUnifiedFromNamesMiddlePrimaryOnBlackList() { string implicitRedistListContents = "<FileList Redist='Microsoft-Windows-CLRCoreComp' >" + "<File AssemblyName='DependsOnUnified' Version='3.0.0.0' Culture='neutral' PublicKeyToken='b77a5c561934e089' InGAC='false' />" + "</FileList >"; string engineOnlySubset = "<FileList Redist='Microsoft-Windows-CLRCoreComp' >" + "<File AssemblyName='Microsoft.Build.Engine' Version='2.0.0.0' PublicKeyToken='b03f5f7f11d50a3a' Culture='Neutral' FileVersion='2.0.50727.208' InGAC='true' />" + "</FileList >"; string redistListPath = FileUtilities.GetTemporaryFile(); string subsetListPath = FileUtilities.GetTemporaryFile(); File.WriteAllText(redistListPath, implicitRedistListContents); File.WriteAllText(subsetListPath, engineOnlySubset); // Create the engine. MockEngine engine = new MockEngine(_output); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnUnified, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"), new TaskItem("DependsOnUnified, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"), new TaskItem("DependsOnUnified, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") }; // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.InstalledAssemblyTables = new TaskItem[] { new TaskItem(redistListPath) }; t.InstalledAssemblySubsetTables = new TaskItem[] { new TaskItem(subsetListPath) }; t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = DefaultPaths; t.TargetFrameworkDirectories = new string[] { @"c:\myfx" }; t.AutoUnify = true; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(2, t.ResolvedFiles.Length); // "Expected to find two resolved assemblies" Assert.True(ContainsItem(t.ResolvedFiles, Path.Combine(s_myApp_V10Path, "DependsOnUnified.dll"))); // "Expected the ItemSpec of the resolved file to be the item spec of the 1.0.0.0 assembly"); Assert.True(ContainsItem(t.ResolvedFiles, Path.Combine(s_myApp_V20Path, "DependsOnUnified.dll"))); // "Expected the ItemSpec of the resolved file to be the item spec of the 2.0.0.0 assembly"); t.ResolvedDependencyFiles[0].GetMetadata("FusionName").ShouldBe("UnifyMe, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", StringCompareShould.IgnoreCase); t.ResolvedDependencyFiles[0].ItemSpec.ShouldBe(s_unifyMeDll_V20Path, StringCompareShould.IgnoreCase); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnifiedDependency"), "UniFYme, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") ); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByAutoUnify"), "1.0.0.0", Path.Combine(s_myApp_V10Path, "DependsOnUnified.dll")) ); engine.AssertLogDoesntContain ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.UnificationByAutoUnify"), "2.0.0.0", Path.Combine(s_myApp_V20Path, "DependsOnUnified.dll")) ); }
public virtual VsResolvedAssemblyPath[] Resolve(IEnumerable <string> assemblies) { if (assemblies == null) { throw new ArgumentNullException("assemblies"); } // Resolve references WITHOUT invoking MSBuild to avoid re-entrancy problems. const bool projectDtar = true; var rar = new Microsoft.Build.Tasks.ResolveAssemblyReference(); var engine = new MockEngine(EnableLogging); rar.BuildEngine = engine; // first set common properties/items then if projectDtar then set additional projectDtar properties ITaskItem[] assemblyItems = assemblies.Select(assembly => new TaskItem(assembly)).ToArray(); rar.Assemblies = assemblyItems; rar.SearchPaths = rarInputs.PdtarSearchPaths; rar.TargetFrameworkDirectories = rarInputs.TargetFrameworkDirectories; rar.AllowedAssemblyExtensions = rarInputs.AllowedAssemblyExtensions; rar.TargetProcessorArchitecture = rarInputs.TargetProcessorArchitecture; rar.TargetFrameworkVersion = rarInputs.TargetFrameworkVersion; rar.TargetFrameworkMoniker = rarInputs.TargetFrameworkMoniker; rar.TargetFrameworkMonikerDisplayName = rarInputs.TargetFrameworkMonikerDisplayName; rar.TargetedRuntimeVersion = rarInputs.TargetedRuntimeVersion; rar.FullFrameworkFolders = rarInputs.FullFrameworkFolders; rar.LatestTargetFrameworkDirectories = rarInputs.LatestTargetFrameworkDirectories; rar.FullTargetFrameworkSubsetNames = rarInputs.FullTargetFrameworkSubsetNames; rar.FullFrameworkAssemblyTables = rarInputs.FullFrameworkAssemblyTables; rar.IgnoreDefaultInstalledAssemblySubsetTables = rarInputs.IgnoreDefaultInstalledAssemblySubsetTables; rar.ProfileName = rarInputs.ProfileName; rar.Silent = !this.EnableLogging; rar.FindDependencies = true; rar.AutoUnify = false; rar.FindSatellites = false; rar.FindSerializationAssemblies = false; rar.FindRelatedFiles = false; // This set needs to be kept in sync with the set of project instance data that // is populated into RarInputs if (projectDtar) { // set project dtar specific properties rar.CandidateAssemblyFiles = rarInputs.CandidateAssemblyFiles; rar.StateFile = rarInputs.StateFile; rar.InstalledAssemblySubsetTables = rarInputs.InstalledAssemblySubsetTables; rar.TargetFrameworkSubsets = rarInputs.TargetFrameworkSubsets; } IEnumerable <VsResolvedAssemblyPath> results; try { rar.Execute(); results = FilterResults(rar.ResolvedFiles).Select(pair => new VsResolvedAssemblyPath { bstrOrigAssemblySpec = pair.Key, bstrResolvedAssemblyPath = pair.Value, }); } catch (Exception ex) { if (ErrorHandler.IsCriticalException(ex)) { throw; } engine.RecordRARExecutionException(ex); results = Enumerable.Empty <VsResolvedAssemblyPath>(); } finally { if (this.EnableLogging) { WriteLogFile(engine, projectDtar, assemblies); } } return(results.ToArray()); }
public void GetGoodSDKs2() { try { Environment.SetEnvironmentVariable("MSBUILDDISABLEREGISTRYFORSDKLOOKUP", "true"); MockEngine engine = new MockEngine(); GetInstalledSDKLocations t = new GetInstalledSDKLocations(); t.TargetPlatformIdentifier = "Windows"; t.TargetPlatformVersion = new Version(int.MaxValue, int.MaxValue, int.MaxValue, int.MaxValue).ToString(); t.BuildEngine = engine; t.SDKRegistryRoot = String.Empty; t.SDKDirectoryRoots = new string[] { _fakeSDKStructureRoot, _fakeSDKStructureRoot2 }; bool success = t.Execute(); Assert.True(success); ITaskItem[] installedSDKs = t.InstalledSDKs; Assert.Equal(6, installedSDKs.Length); Dictionary <string, string> extensionSDKs = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (ITaskItem item in installedSDKs) { extensionSDKs.Add(item.GetMetadata("SDKName"), item.ItemSpec); } Assert.True(extensionSDKs.ContainsKey("MyAssembly, Version=1.0")); Assert.True( extensionSDKs["MyAssembly, Version=1.0"].Equals( Path.Combine( new[] { _fakeSDKStructureRoot, "Windows", "v1.0", "ExtensionSDKs", "MyAssembly", "1.0" }) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)); Assert.True(extensionSDKs.ContainsKey("MyAssembly, Version=2.0")); Assert.True( extensionSDKs["MyAssembly, Version=2.0"].Equals( Path.Combine( new[] { _fakeSDKStructureRoot, "Windows", "1.0", "ExtensionSDKs", "MyAssembly", "2.0" }) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)); Assert.True(extensionSDKs.ContainsKey("MyAssembly, Version=3.0")); Assert.True( extensionSDKs["MyAssembly, Version=3.0"].Equals( Path.Combine( new[] { _fakeSDKStructureRoot, "Windows", "2.0", "ExtensionSDKs", "MyAssembly", "3.0" }) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)); Assert.True(extensionSDKs.ContainsKey("MyAssembly, Version=4.0")); Assert.True( extensionSDKs["MyAssembly, Version=4.0"].Equals( Path.Combine( new[] { _fakeSDKStructureRoot2, "Windows", "v1.0", "ExtensionSDKs", "MyAssembly", "4.0" }) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)); Assert.True(extensionSDKs.ContainsKey("MyAssembly, Version=5.0")); Assert.True( extensionSDKs["MyAssembly, Version=5.0"].Equals( Path.Combine( new[] { _fakeSDKStructureRoot2, "Windows", "1.0", "ExtensionSDKs", "MyAssembly", "5.0" }) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)); Assert.True(extensionSDKs.ContainsKey("MyAssembly, Version=6.0")); Assert.True( extensionSDKs["MyAssembly, Version=6.0"].Equals( Path.Combine( new[] { _fakeSDKStructureRoot2, "Windows", "2.0", "ExtensionSDKs", "MyAssembly", "6.0" }) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase)); } finally { Environment.SetEnvironmentVariable("MSBUILDDISABLEREGISTRYFORSDKLOOKUP", null); } }
public void VerifyUnResolvedSDKMessage() { MockEngine engine = new MockEngine(); TaskLoggingHelper log = new TaskLoggingHelper(engine, "ResolveSDKReference"); HashSet<SDKReference> references = new HashSet<SDKReference>(); // All of the dependencies resolve correctly no warnings are expected SDKReference reference1 = new SDKReference(new TaskItem(), "reference1", "1.0"); references.Add(reference1); SDKReference reference2 = new SDKReference(new TaskItem(), "reference2", "1.0"); reference2.DependsOnSDK = "reference1, Version=1.0"; references.Add(reference2); SDKReference reference3 = new SDKReference(new TaskItem(), "reference3", "1.0"); reference3.DependsOnSDK = "reference1, Version=1.0;reference2, Version=1.0"; references.Add(reference3); SDKReference reference4 = new SDKReference(new TaskItem(), "reference4", "1.0"); reference4.DependsOnSDK = "reference1, Version=1.0"; references.Add(reference4); SDKReference reference5 = new SDKReference(new TaskItem(), "reference5", "1.0"); reference5.DependsOnSDK = "reference1, Version=1.0"; references.Add(reference5); ResolveSDKReference.VerifySDKDependsOn(log, references); //, new Version(8, 1), "Windows", null); Assert.Equal(0, engine.Warnings); Assert.Equal(0, engine.Errors); Assert.Equal(0, engine.Log.Length); engine = new MockEngine(); log = new TaskLoggingHelper(engine, "ResolveSDKReference"); log.TaskResources = AssemblyResources.PrimaryResources; references = new HashSet<SDKReference>(); reference1 = new SDKReference(new TaskItem(), "reference1", "1.0"); reference1.DependsOnSDK = "NotThere, Version=1.0"; references.Add(reference1); reference2 = new SDKReference(new TaskItem(), "reference2", "1.0"); reference2.DependsOnSDK = "reference11, Version=1.0;reference2, Version=1.0;reference77, Version=1.0"; references.Add(reference2); reference3 = new SDKReference(new TaskItem(), "reference3", "1.0"); reference3.DependsOnSDK = "reference1, Version=1.0;NotThere, Version=1.0;WhereAmI, Version=1.0"; references.Add(reference3); reference4 = new SDKReference(new TaskItem(), "reference4", "1.0"); reference4.DependsOnSDK = "NotThere, Version=1.0"; references.Add(reference4); ResolveSDKReference.VerifySDKDependsOn(log, references);//, new Version(8, 1), "Windows", null); Assert.Equal(4, engine.Warnings); Assert.Equal(0, engine.Errors); string warning = ResourceUtilities.FormatResourceString("ResolveSDKReference.SDKMissingDependency", reference1.SDKName, "\"NotThere, Version=1.0\""); engine.AssertLogContains(warning); warning = ResourceUtilities.FormatResourceString("ResolveSDKReference.SDKMissingDependency", reference2.SDKName, "\"reference11, Version=1.0\", \"reference77, Version=1.0\""); engine.AssertLogContains(warning); warning = ResourceUtilities.FormatResourceString("ResolveSDKReference.SDKMissingDependency", reference3.SDKName, "\"NotThere, Version=1.0\", \"WhereAmI, Version=1.0\""); engine.AssertLogContains(warning); warning = ResourceUtilities.FormatResourceString("ResolveSDKReference.SDKMissingDependency", reference4.SDKName, "\"NotThere, Version=1.0\""); engine.AssertLogContains(warning); }
public void MultipleSupportedArchitectureDoesNotMatchProject() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "MultipleSupportedArchitectureMatchesProject"); string testDirectory = Path.Combine(testDirectoryRoot, "MyPlatform\\8.0\\ExtensionSDKs\\SDkWithManifest\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' FrameworkIdentity-retail-Neutral = 'GoodTestSDKIdentity' APPX = 'ShouldNotPickup' APPX-Retail-Neutral = 'RetailNeutralLocation' SDKType='External' SupportedArchitectures = 'X86;Neutral;X64' CopyRedistToSubDirectory='GoodTestSDK\Redist'> <File WinMD = 'GoodTestSDK.Sprint, Version=8.0' /> <File AssemblyName = 'Assembly1, Version=8.0' /> <DependsOn Identity='Windows SDK, Version 8.0'/> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; t.TargetedSDKArchitecture = "ARM"; t.TargetedSDKConfiguration = "Release"; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.False(succeeded); Assert.Equal(0, t.ResolvedSDKReferences.Length); engine.AssertLogContains("MSB3779"); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
public void GeneratesFile() { var engine = new MockEngine(_output); var task = new GeneratePackageVersionPropsFile { BuildEngine = engine, Packages = new[] { // Order is important. These are intentionally reverse sorted to ensure the generated file sorts properties by prop name new TaskItem("Newtonsoft.Json", new Hashtable { ["Version"] = "10.0.3", ["VariableName"] = "JsonNetVersion" }), new TaskItem("Microsoft.Azure", new Hashtable { ["Version"] = "1.2.0" }), new TaskItem("Another.Package", new Hashtable { ["Version"] = "0.0.1", ["TargetFramework"] = "netstandard1.0" }), }, OutputPath = _tempFile, }; Assert.True(task.Execute(), "Task is expected to pass"); var project = ProjectRootElement.Open(_tempFile); _output.WriteLine(File.ReadAllText(_tempFile)); Assert.Empty(project.Imports); Assert.Empty(project.ImportGroups); var defaultPropGroup = Assert.Single(project.PropertyGroups, pg => string.IsNullOrEmpty(pg.Label)); var allProjectsProp = Assert.Single(defaultPropGroup.Properties); Assert.Equal("MSBuildAllProjects", allProjectsProp.Name); Assert.Empty(allProjectsProp.Condition); Assert.Equal("$(MSBuildAllProjects);$(MSBuildThisFileFullPath)", allProjectsProp.Value); var versions = Assert.Single(project.PropertyGroups, pg => pg.Label == "Package Versions"); // Order is important. These should be sorted. Assert.Collection(versions.Properties, p => { Assert.Equal("AnotherPackagePackageVersion", p.Name); Assert.Equal("Another.Package", p.Label); Assert.Equal("0.0.1", p.Value); Assert.Empty(p.Condition); }, p => { Assert.Equal("JsonNetVersion", p.Name); Assert.Equal("Newtonsoft.Json", p.Label); Assert.Equal("10.0.3", p.Value); Assert.Empty(p.Condition); }, p => { Assert.Equal("MicrosoftAzurePackageVersion", p.Name); Assert.Equal("Microsoft.Azure", p.Label); Assert.Equal("1.2.0", p.Value); Assert.Empty(p.Condition); }); }
public void VerifyDependsOnWarningFromManifest() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "VerifyDependsOnWarningFromManifest"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' FrameworkIdentity = 'ShouldNotPickup' FrameworkIdentity-retail = 'ShouldNotPickup' FrameworkIdentity-retail-Neutral = 'GoodTestSDKIdentity' APPX = 'ShouldNotPickup' APPX-Retail = 'ShouldNotPickup' APPX-Retail-Neutral = 'RetailX86Location' SDKType='Debug' DependsOn='Foo, Version=1.0;bar, Version=2.0;foooooggg;;;;' CopyRedistToSubDirectory='GoodTestSDK\Redist'> <File WinMD = 'GoodTestSDK.Sprint, Version=8.0' /> <File AssemblyName = 'Assembly1, Version=8.0' /> <DependsOn Identity='Windows SDK, Version 8.0'/> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.True(succeeded); string warning = ResourceUtilities.FormatResourceString("ResolveSDKReference.SDKMissingDependency", "GoodTestSDK, Version=2.0", "\"Foo, Version=1.0\", \"bar, Version=2.0\""); engine.AssertLogContains(warning); engine.AssertLogDoesntContainMessageFromResource(_resourceDelegate, "ResolveSDKReference.NoFrameworkIdentitiesFound"); Assert.True(t.ResolvedSDKReferences[0].ItemSpec.Equals(testDirectory, StringComparison.OrdinalIgnoreCase)); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
public void ManifestArmLocationWithOthers() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "ManifestArmLocationWithOthers"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' PlatformIdentity = 'Good Platform' FrameworkIdentity = 'GoodTestSDKIdentity' APPX-ARM = 'ARMAppx' APPX-X86 = 'x86Appx' APPX-X64 = 'x64Appx' SDKType='External'> <File WinMD = 'GoodTestSDK.Sprint, Version=8.0' /> <File AssemblyName = 'Assembly1, Version=8.0' /> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.TargetedSDKArchitecture = "arm"; t.TargetedSDKConfiguration = "Debug"; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.True(succeeded); Assert.Equal(1, t.ResolvedSDKReferences.Length); Assert.True(t.ResolvedSDKReferences[0].ItemSpec.Equals(testDirectory, StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("FrameworkIdentity").Equals("GoodTestSDKIdentity", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("PlatformIdentity").Equals("Good Platform", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("AppXLocation").Equals("arm|ARMAppx|x64|x64Appx|x86|x86Appx", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("SDKType").Equals("External", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("ExpandReferenceAssemblies").Equals("True", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("CopyLocalExpandedReferenceAssemblies").Equals("False", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("TargetedSDKConfiguration").Equals("Debug", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("TargetedSDKArchitecture").Equals("arm", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("OriginalItemSpec").Equals(item.ItemSpec, StringComparison.OrdinalIgnoreCase)); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
private static void TestBadSDKReferenceIncludes(ITaskItem referenceInclude) { // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); t.BuildEngine = engine; Assert.Null(t.ParseSDKReference(referenceInclude)); string errorMessage = t.Log.FormatResourceString("ResolveSDKReference.SDKReferenceIncorrectFormat", referenceInclude.ItemSpec); engine.AssertLogContains(errorMessage); }
public void MatchNoNamesButNamesExistError() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "MatchNoNamesButNamesExistError"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' FrameworkIdentity-Debug = 'ShouldNotPickup' FrameworkIdentity-Debug-x64 = 'ShouldNotPickup' APPX-Debug = 'ShouldNotPickup' APPX-Debug-X64 = 'ShouldNotPickup' SDKType='External'> <File WinMD = 'GoodTestSDK.Sprint, Version=8.0' /> <File AssemblyName = 'Assembly1, Version=8.0' /> <DependsOn Identity='Windows SDK, Version 8.0'/> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.TargetedSDKArchitecture = "x86"; t.TargetedSDKConfiguration = "Release"; t.LogResolutionErrorsAsWarnings = false; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.False(succeeded); Assert.Equal(0, t.ResolvedSDKReferences.Length); string errorMessage = ResourceUtilities.FormatResourceString("ResolveSDKReference.NoMatchingFrameworkIdentity", sdkManifestFile, "Retail", "x86"); engine.AssertLogContains(errorMessage); errorMessage = ResourceUtilities.FormatResourceString("ResolveSDKReference.NoMatchingAppxLocation", sdkManifestFile, "Retail", "x86"); engine.AssertLogContains(errorMessage); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
public void Prefer32bit8() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "Prefer32bit8"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0'> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; t.TargetedSDKConfiguration = "Release"; t.TargetedSDKArchitecture = "msil"; t.Prefer32Bit = true; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.True(succeeded); Assert.Equal(0, engine.Warnings); // "Expected no warnings" Assert.Equal(0, engine.Errors); // "Expected no errors" } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
public void ConflictsBetweenSameSDKName() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "ConflictsBetweenSameSDKName"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\1.0\\"); string testDirectory2 = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string testDirectory3 = Path.Combine(testDirectoryRoot, "GoodTestSDK\\3.0\\"); string sdkManifestContents1 = @"<FileList Identity = 'GoodTestSDK, Version=1.0' DisplayName = 'GoodTestSDK 1.0' ProductFamilyName = 'MyFamily' SupportsMultipleVersions='Warning'> </FileList>"; string sdkManifestContents2 = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' ProductFamilyName = 'MyFamily2' SupportsMultipleVersions='Error'> </FileList>"; string sdkManifestContents3 = @"<FileList Identity = 'GoodTestSDK, Version=3.0' DisplayName = 'GoodTestSDK 3.0' ProductFamilyName = 'MyFamily3' SupportsMultipleVersions='Allow'> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); string sdkManifestFile2 = Path.Combine(testDirectory2, "SdkManifest.xml"); string sdkManifestFile3 = Path.Combine(testDirectory3, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); Directory.CreateDirectory(testDirectory2); Directory.CreateDirectory(testDirectory3); File.WriteAllText(sdkManifestFile, sdkManifestContents1); File.WriteAllText(sdkManifestFile2, sdkManifestContents2); File.WriteAllText(sdkManifestFile3, sdkManifestContents3); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=1.0"); ITaskItem item2 = new TaskItem("GoodTestSDK, Version=2.0"); ITaskItem item3 = new TaskItem("GoodTestSDK, Version=3.0"); t.SDKReferences = new ITaskItem[] { item, item2, item3 }; t.TargetedSDKArchitecture = "x86"; t.TargetedSDKConfiguration = "Release"; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=1.0"); ITaskItem installLocation2 = new TaskItem(testDirectory2); installLocation2.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); ITaskItem installLocation3 = new TaskItem(testDirectory3); installLocation3.SetMetadata("SDKName", "GoodTestSDK, Version=3.0"); t.InstalledSDKs = new ITaskItem[] { installLocation, installLocation2, installLocation3 }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.False(succeeded); engine.AssertLogContainsMessageFromResource(_resourceDelegate, "ResolveSDKReference.CannotReferenceTwoSDKsSameName", "GoodTestSDK, Version=1.0", "\"GoodTestSDK, Version=2.0\", \"GoodTestSDK, Version=3.0\""); engine.AssertLogContainsMessageFromResource(_resourceDelegate, "ResolveSDKReference.CannotReferenceTwoSDKsSameName", "GoodTestSDK, Version=2.0", "\"GoodTestSDK, Version=1.0\", \"GoodTestSDK, Version=3.0\""); Assert.Equal(1, engine.Warnings); Assert.Equal(1, engine.Errors); Assert.True(t.ResolvedSDKReferences[0].ItemSpec.Equals(testDirectory, StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[1].ItemSpec.Equals(testDirectory2, StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[2].ItemSpec.Equals(testDirectory3, StringComparison.OrdinalIgnoreCase)); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
public void VerifyAddMetadataToReferences() { MockEngine engine = new MockEngine(); TaskLoggingHelper log = new TaskLoggingHelper(engine, "ResolveSDKReference"); log.TaskResources = AssemblyResources.PrimaryResources; HashSet<SDKReference> references = new HashSet<SDKReference>(); SDKReference reference1 = new SDKReference(new TaskItem(), "Microsoft.VCLibs", "12.0"); reference1.ResolvedItem = new TaskItem(); references.Add(reference1); SDKReference reference2 = new SDKReference(new TaskItem(), "Microsoft.VCLibs", "11.0"); reference2.ResolvedItem = new TaskItem(); references.Add(reference2); SDKReference reference3 = new SDKReference(new TaskItem(), "Foo", "11.0"); reference3.ResolvedItem = new TaskItem(); references.Add(reference3); // Dictionary with runtime-only dependencies Dictionary<string, string> dict = new Dictionary<string, string>(); dict.Add("Microsoft.VCLibs", "11.0"); ResolveSDKReference.AddMetadataToReferences(log, references, dict, "RuntimeReferenceOnly", "true"); foreach (SDKReference reference in references) { if (reference.SimpleName.Equals("Microsoft.VCLibs") && reference.Version.Equals("11.0")) { Assert.True(reference.ResolvedItem.GetMetadata("RuntimeReferenceOnly").Equals("true")); } else { Assert.False(reference.ResolvedItem.MetadataNames.ToString().Contains("RuntimeReferenceOnly")); } } }
private void SupportsMultipleVersionsVerifyManifestReading(string manifestEntry) { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "SupportsMultipleVersionsVerifyManifestReading"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' FrameworkIdentity-retail-x86 = 'GoodTestSDKIdentity' APPX-Retail-x86 = 'RetailX86Location' APPX-Retail-x64 = 'RetailX64Location' SDKType='External' SupportedArchitectures = 'X86' ProductFamilyName = 'MyFamily' SupportsMultipleVersions='" + manifestEntry + @"' CopyRedistToSubDirectory='GoodTestSDK\Redist'> <File WinMD = 'GoodTestSDK.Sprint, Version=8.0' /> <File AssemblyName = 'Assembly1, Version=8.0' /> <DependsOn Identity='Windows SDK, Version 8.0'/> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; t.TargetedSDKArchitecture = "x86"; t.TargetedSDKConfiguration = "Release"; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.True(succeeded); engine.AssertLogDoesntContainMessageFromResource(_resourceDelegate, "ResolveSDKReference.NoFrameworkIdentitiesFound"); Assert.True(t.ResolvedSDKReferences[0].ItemSpec.Equals(testDirectory, StringComparison.OrdinalIgnoreCase)); if (String.Equals(manifestEntry, "WoofWoof", StringComparison.OrdinalIgnoreCase)) { Assert.True(t.ResolvedSDKReferences[0].GetMetadata("SupportsMultipleVersions").Equals("Allow", StringComparison.OrdinalIgnoreCase)); } else { Assert.True(t.ResolvedSDKReferences[0].GetMetadata("SupportsMultipleVersions").Equals(manifestEntry, StringComparison.OrdinalIgnoreCase)); } } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
public virtual VsResolvedAssemblyPath[] Resolve(IEnumerable<string> assemblies) { if (assemblies == null) { throw new ArgumentNullException("assemblies"); } // Resolve references WITHOUT invoking MSBuild to avoid re-entrancy problems. const bool projectDtar = true; var rar = new Microsoft.Build.Tasks.ResolveAssemblyReference(); var engine = new MockEngine(EnableLogging); rar.BuildEngine = engine; // first set common properties/items then if projectDtar then set additional projectDtar properties ITaskItem[] assemblyItems = assemblies.Select(assembly => new TaskItem(assembly)).ToArray(); rar.Assemblies = assemblyItems; rar.SearchPaths = rarInputs.PdtarSearchPaths; rar.TargetFrameworkDirectories = rarInputs.TargetFrameworkDirectories; rar.AllowedAssemblyExtensions = rarInputs.AllowedAssemblyExtensions; rar.TargetProcessorArchitecture = rarInputs.TargetProcessorArchitecture; rar.TargetFrameworkVersion = rarInputs.TargetFrameworkVersion; rar.TargetFrameworkMoniker = rarInputs.TargetFrameworkMoniker; rar.TargetFrameworkMonikerDisplayName = rarInputs.TargetFrameworkMonikerDisplayName; rar.TargetedRuntimeVersion = rarInputs.TargetedRuntimeVersion; rar.FullFrameworkFolders = rarInputs.FullFrameworkFolders; rar.LatestTargetFrameworkDirectories = rarInputs.LatestTargetFrameworkDirectories; rar.FullTargetFrameworkSubsetNames = rarInputs.FullTargetFrameworkSubsetNames; rar.FullFrameworkAssemblyTables = rarInputs.FullFrameworkAssemblyTables; rar.IgnoreDefaultInstalledAssemblySubsetTables = rarInputs.IgnoreDefaultInstalledAssemblySubsetTables; rar.ProfileName = rarInputs.ProfileName; rar.Silent = !this.EnableLogging; rar.FindDependencies = true; rar.AutoUnify = false; rar.FindSatellites = false; rar.FindSerializationAssemblies = false; rar.FindRelatedFiles = false; // This set needs to be kept in sync with the set of project instance data that // is populated into RarInputs if (projectDtar) { // set project dtar specific properties rar.CandidateAssemblyFiles = rarInputs.CandidateAssemblyFiles; rar.StateFile = rarInputs.StateFile; rar.InstalledAssemblySubsetTables = rarInputs.InstalledAssemblySubsetTables; rar.TargetFrameworkSubsets = rarInputs.TargetFrameworkSubsets; } IEnumerable<VsResolvedAssemblyPath> results; try { rar.Execute(); results = FilterResults(rar.ResolvedFiles).Select(pair => new VsResolvedAssemblyPath { bstrOrigAssemblySpec = pair.Key, bstrResolvedAssemblyPath = pair.Value, }); } catch (Exception ex) { if (ErrorHandler.IsCriticalException(ex)) { throw; } engine.RecordRARExecutionException(ex); results = Enumerable.Empty<VsResolvedAssemblyPath>(); } finally { if (this.EnableLogging) { WriteLogFile(engine, projectDtar, assemblies); } } return results.ToArray(); }
public void MultipleSupportedArchitectureMatchesProject() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "MultipleSupportedArchitectureMatchesProject"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' FrameworkIdentity-retail-Neutral = 'GoodTestSDKIdentity' APPX = 'ShouldNotPickup' APPX-Retail-Neutral = 'RetailNeutralLocation' SDKType='External' SupportedArchitectures = 'X86;Neutral;X64' CopyRedistToSubDirectory='GoodTestSDK\Redist'> <File WinMD = 'GoodTestSDK.Sprint, Version=8.0' /> <File AssemblyName = 'Assembly1, Version=8.0' /> <DependsOn Identity='Windows SDK, Version 8.0'/> </FileList>"; try { string sdkManifestFile = Path.Combine(testDirectory, "SdkManifest.xml"); if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } Directory.CreateDirectory(testDirectory); File.WriteAllText(sdkManifestFile, sdkManifestContents); // Create the engine. MockEngine engine = new MockEngine(); ResolveSDKReference t = new ResolveSDKReference(); ITaskItem item = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item }; t.TargetedSDKArchitecture = "AnyCPU"; t.TargetedSDKConfiguration = "Release"; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.True(succeeded); engine.AssertLogDoesntContainMessageFromResource(_resourceDelegate, "ResolveSDKReference.NoFrameworkIdentitiesFound"); Assert.True(t.ResolvedSDKReferences[0].ItemSpec.Equals(testDirectory, StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("FrameworkIdentity").Equals("GoodTestSDKIdentity", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("AppXLocation").Equals("Neutral|RetailNeutralLocation", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("SDKType").Equals("External", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("CopyRedist").Equals("False", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("ExpandReferenceAssemblies").Equals("True", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("CopyLocalExpandedReferenceAssemblies").Equals("False", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("TargetedSDKConfiguration").Equals("Retail", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("TargetedSDKArchitecture").Equals("Neutral", StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("OriginalItemSpec").Equals(item.ItemSpec, StringComparison.OrdinalIgnoreCase)); Assert.True(t.ResolvedSDKReferences[0].GetMetadata("CopyRedistToSubDirectory").Equals("GoodTestSDK\\Redist", StringComparison.OrdinalIgnoreCase)); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
private void VerifyImplementationArchitecture(string winmdName, string targetProcessorArchitecture, string implementationFileArch, string warnOrErrorOnTargetArchitectureMismatch) { // Create the engine. MockEngine engine = new MockEngine(_output); TaskItem item = new TaskItem(winmdName); ITaskItem[] assemblyFiles = new TaskItem[] { item }; ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyFiles; t.SearchPaths = new String[] { @"C:\WinMDArchVerification" }; t.TargetProcessorArchitecture = targetProcessorArchitecture; t.WarnOrErrorOnTargetArchitectureMismatch = warnOrErrorOnTargetArchitectureMismatch; bool succeeded = Execute(t); Assert.Single(t.ResolvedFiles); Assert.Equal(@"C:\WinMDArchVerification\" + winmdName + ".winmd", t.ResolvedFiles[0].ItemSpec); Assert.Equal(@"WindowsRuntime 1.0", t.ResolvedFiles[0].GetMetadata(ItemMetadataNames.imageRuntime)); Assert.True(bool.Parse(t.ResolvedFiles[0].GetMetadata(ItemMetadataNames.winMDFile))); string fullMessage = null; if (implementationFileArch.Equals("Unknown")) { fullMessage = ResourceUtilities.FormatResourceStringStripCodeAndKeyword("ResolveAssemblyReference.UnknownProcessorArchitecture", @"C:\WinMDArchVerification\" + winmdName + ".dll", @"C:\WinMDArchVerification\" + winmdName + ".winmd", NativeMethods.IMAGE_FILE_MACHINE_R4000.ToString("X", CultureInfo.InvariantCulture)); } else { fullMessage = ResourceUtilities.FormatResourceStringStripCodeAndKeyword("ResolveAssemblyReference.MismatchBetweenTargetedAndReferencedArchOfImplementation", targetProcessorArchitecture, implementationFileArch, @"C:\WinMDArchVerification\" + winmdName + ".dll", @"C:\WinMDArchVerification\" + winmdName + ".winmd"); } if (warnOrErrorOnTargetArchitectureMismatch.Equals("None", StringComparison.OrdinalIgnoreCase)) { engine.AssertLogDoesntContain(fullMessage); } else { engine.AssertLogContains(fullMessage); } if (warnOrErrorOnTargetArchitectureMismatch.Equals("Warning", StringComparison.OrdinalIgnoreCase)) { // Should fail since PE Header is not valid and this is always an error. Assert.True(succeeded); Assert.Equal(winmdName + ".dll", t.ResolvedFiles[0].GetMetadata(ItemMetadataNames.winmdImplmentationFile)); Assert.Equal(0, engine.Errors); Assert.Equal(1, engine.Warnings); } else if (warnOrErrorOnTargetArchitectureMismatch.Equals("Error", StringComparison.OrdinalIgnoreCase)) { // Should fail since PE Header is not valid and this is always an error. Assert.False(succeeded); Assert.Empty(t.ResolvedFiles[0].GetMetadata(ItemMetadataNames.winmdImplmentationFile)); Assert.Equal(1, engine.Errors); Assert.Equal(0, engine.Warnings); } else if (warnOrErrorOnTargetArchitectureMismatch.Equals("None", StringComparison.OrdinalIgnoreCase)) { Assert.True(succeeded); Assert.Equal(winmdName + ".dll", t.ResolvedFiles[0].GetMetadata(ItemMetadataNames.winmdImplmentationFile)); Assert.Equal(0, engine.Errors); Assert.Equal(0, engine.Warnings); } }
private void TryLoadTaskBodyAndExpectSuccess( string taskBody, ICollection <TaskPropertyInfo> parameters = null, ISet <string> expectedReferences = null, ISet <string> expectedNamespaces = null, string expectedCodeLanguage = null, RoslynCodeTaskFactoryCodeType?expectedCodeType = null, string expectedSourceCode = null, IReadOnlyList <string> expectedWarningMessages = null) { MockEngine buildEngine = new MockEngine(); TaskLoggingHelper log = new TaskLoggingHelper(buildEngine, TaskName) { TaskResources = Shared.AssemblyResources.PrimaryResources }; bool success = RoslynCodeTaskFactory.TryLoadTaskBody(log, TaskName, taskBody, parameters ?? new List <TaskPropertyInfo>(), out RoslynCodeTaskFactoryTaskInfo taskInfo); buildEngine.Errors.ShouldBe(0, buildEngine.Log); if (expectedWarningMessages == null) { buildEngine.Warnings.ShouldBe(0); } else { string output = buildEngine.Log; foreach (string expectedWarningMessage in expectedWarningMessages) { output.ShouldContain(expectedWarningMessage, () => output); } } success.ShouldBeTrue(); if (expectedReferences != null) { taskInfo.References.ShouldBe(expectedReferences); } if (expectedNamespaces != null) { taskInfo.Namespaces.ShouldBe(expectedNamespaces); } if (expectedCodeLanguage != null) { taskInfo.CodeLanguage.ShouldBe(expectedCodeLanguage); } if (expectedCodeType != null) { taskInfo.CodeType.ShouldBe(expectedCodeType.Value); } if (expectedSourceCode != null) { NormalizeRuntime(taskInfo.SourceCode) .ShouldBe(NormalizeRuntime(expectedSourceCode), StringCompareShould.IgnoreLineEndings); } }