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 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.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 LowVersionDoesntExist() { // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("DependsOnUnified, Version=0.5.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='0.0.0.0-2.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"), "0.5.0.0", appConfigFile, @"C:\MyApp\v0.5\DependsOnUnified.dll") ); // Cleanup. File.Delete(appConfigFile); }
/// <summary> /// Verify the correct references are still in the references table and that references which are in the black list are not in the references table /// Also verify any expected warning messages are seen in the log. /// </summary> private static void VerifyReferenceTable(ReferenceTable referenceTable, MockEngine mockEngine, AssemblyNameExtension engineAssemblyName, AssemblyNameExtension dataAssemblyName, AssemblyNameExtension sqlclientAssemblyName, AssemblyNameExtension xmlAssemblyName, string[] warningMessages) { Dictionary<AssemblyNameExtension, Reference> table = referenceTable.References; Assert.Equal(0, table.Count); // "Expected there to be zero elements in the hashtable" if (warningMessages != null) { foreach (string warningMessage in warningMessages) { Console.Out.WriteLine("WarningMessageToAssert:" + warningMessages); mockEngine.AssertLogContains(warningMessage); } } table.Clear(); }
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 HighVersionDoesntExist() { // 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='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.Equal(0, t.ResolvedDependencyFiles.Length); 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, @"C:\MyApp\v1.0\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 ValidateFrameworkNameError() { // Create the engine. MockEngine engine = new MockEngine(); ITaskItem[] assemblyNames = new TaskItem[] { new TaskItem("X, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null") }; // Now, pass feed resolved primary references into ResolveAssemblyReference. ResolveAssemblyReference t = new ResolveAssemblyReference(); t.BuildEngine = engine; t.Assemblies = assemblyNames; t.SearchPaths = new string[] { @"c:\MyComponents" }; t.TargetFrameworkMoniker = "I am a random frameworkName"; bool succeeded = Execute(t); Assert.False(succeeded); Assert.Equal(1, engine.Errors); Assert.Equal(0, engine.Warnings); string message = ResourceUtilities.FormatResourceString("ResolveAssemblyReference.InvalidParameter", "TargetFrameworkMoniker", t.TargetFrameworkMoniker, String.Empty); engine.AssertLogContains(message); }
internal static void VerifyLogContainsErrorFromResource(MockEngine e, TaskLoggingHelper log, string errorResource, params object[] args) { string errorMessage = log.FormatResourceString(errorResource, args); e.AssertLogContains(errorMessage); }
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 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 SDKFoundButBadlyFormattedSDKManifestErrors() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "SDKFoundButBadlyFormattedSDKManifestErrors"); string testDirectory = Path.Combine(testDirectoryRoot, "BadTestSDK\\2.0\\"); string sdkManifestContents = @"IAMNOTANXMLFILE"; 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("BadTestSDK, Version=2.0"); ITaskItem item2 = new TaskItem("GoodTestSDK, Version=2.0"); t.SDKReferences = new ITaskItem[] { item, item2 }; ITaskItem installLocation = new TaskItem(testDirectory); installLocation.SetMetadata("SDKName", "BadTestSDK, Version=2.0"); ITaskItem installLocation2 = new TaskItem("C:\\GoodSDKLocation"); installLocation2.SetMetadata("SDKName", "GoodTestSDK, Version=2.0"); t.InstalledSDKs = new ITaskItem[] { installLocation, installLocation2 }; t.BuildEngine = engine; bool succeeded = t.Execute(); Assert.False(succeeded); engine.AssertLogContains("MSB3775"); Assert.Equal(1, t.ResolvedSDKReferences.Length); } finally { if (Directory.Exists(testDirectoryRoot)) { FileUtilities.DeleteDirectoryNoThrow(testDirectoryRoot, true); } } }
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 GarbageAppConfigMissingNewVersion() { // 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='MissingNewVersion' PublicKeyToken='b77a5c561934e089' culture='neutral' />\n" + " <bindingRedirect oldVersion='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.False(succeeded); Assert.Equal(1, engine.Errors); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("AppConfig.BindingRedirectMissingNewVersion")) ); // Cleanup. File.Delete(appConfigFile); }
public void NoSDKsFound() { MockEngine engine = new MockEngine(); GetInstalledSDKLocations t = new GetInstalledSDKLocations(); t.TargetPlatformIdentifier = "Hello"; t.TargetPlatformVersion = "1.0"; t.BuildEngine = engine; bool success = t.Execute(); Assert.IsTrue(success); Assert.IsTrue(engine.Warnings == 1); engine.AssertLogContains("MSB3785"); }
public void ReferenceTablePrimaryItemInBlackList() { MockEngine mockEngine = new MockEngine(); ResolveAssemblyReference rar = new ResolveAssemblyReference(); rar.BuildEngine = mockEngine; ReferenceTable referenceTable = MakeEmptyReferenceTable(rar.Log); Dictionary<AssemblyNameExtension, Reference> table = referenceTable.References; AssemblyNameExtension engineAssemblyName = new AssemblyNameExtension("Microsoft.Build.Engine, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); AssemblyNameExtension xmlAssemblyName = new AssemblyNameExtension("System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); Reference reference = new Reference(isWinMDFile, fileExists, getRuntimeVersion); TaskItem taskItem = new TaskItem("Microsoft.Build.Engine"); reference.MakePrimaryAssemblyReference(taskItem, false, ".dll"); table.Add(engineAssemblyName, reference); table.Add(xmlAssemblyName, new Reference(isWinMDFile, fileExists, getRuntimeVersion)); Hashtable blackList = new Hashtable(StringComparer.OrdinalIgnoreCase); blackList[engineAssemblyName.FullName] = null; string[] targetFrameworks = new string[] { "Client", "Web" }; string subSetName = ResolveAssemblyReference.GenerateSubSetName(targetFrameworks, null); referenceTable.MarkReferencesForExclusion(blackList); referenceTable.RemoveReferencesMarkedForExclusion(false, subSetName); Dictionary<AssemblyNameExtension, Reference> table2 = referenceTable.References; string warningMessage = rar.Log.FormatResourceString("ResolveAssemblyReference.FailedToResolveReferenceBecausePrimaryAssemblyInExclusionList", taskItem.ItemSpec, subSetName); Assert.False(Object.ReferenceEquals(table, table2)); // "Expected hashtable to be a different instance" Assert.Equal(1, table2.Count); // "Expected there to be one elements in the hashtable" Assert.False(table2.ContainsKey(engineAssemblyName)); // "Expected to not find the engineAssemblyName in the referenceList" Assert.True(table2.ContainsKey(xmlAssemblyName)); // "Expected to find the xmlssemblyName in the referenceList" mockEngine.AssertLogContains(warningMessage); }
public void InvalidCharsInInstalledAssemblyTable() { ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine e = new MockEngine(); t.BuildEngine = e; t.Assemblies = new ITaskItem[] { new TaskItem("SomeAssembly") }; t.TargetFrameworkDirectories = new string[] { @"r:\WINDOWS\Microsoft.NET\Framework\v2.0.myfx" }; t.InstalledAssemblyTables = new TaskItem[] { new TaskItem("asdfasdfasjr390rjfiogatg~~!@@##$%$%%^&**()") }; Execute(t); e.AssertLogContains("MSB3250"); }
public void RawFileNameDoesntExist() { ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine engine = new MockEngine(); t.BuildEngine = engine; t.Assemblies = new ITaskItem[] { new TaskItem(@"c:\DoesntExist\System.Xml.dll") }; t.SearchPaths = new string[] { "{RawFileName}" }; bool succeeded = Execute(t); Assert.True(succeeded); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("General.MalformedAssemblyName"), "c:\\DoesntExist\\System.Xml.dll") ); }
public void Regress444793() { ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine engine = new MockEngine(); t.BuildEngine = engine; TaskItem item = new TaskItem(@"c:\DoesntExist\System.Xml.dll"); item.SetMetadata("HintPath", @"c:\WINNT\Microsoft.NET\Framework\v2.0.MyVersion\System.Data.dll"); item.SetMetadata("SpecificVersion", "true"); t.Assemblies = new ITaskItem[] { item }; t.SearchPaths = new string[] { @"{HintPathFromItem}" }; bool succeeded = Execute(t); Assert.True(succeeded); engine.AssertLogDoesntContain("MSB4018"); engine.AssertLogContains ( String.Format(AssemblyResources.GetString("General.MalformedAssemblyName"), "c:\\DoesntExist\\System.Xml.dll") ); }
public void Regress242970() { ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine engine = new MockEngine(); t.BuildEngine = engine; t.Assemblies = new ITaskItem[] { new TaskItem("System.XML") }; t.SearchPaths = new string[] { "{CandidateAssemblyFiles}" }; t.CandidateAssemblyFiles = new string[] { @"NonUI\testDirectoryRoot\.hiddenfile", @"NonUI\testDirectoryRoot\.dll", @"c:\WINNT\Microsoft.NET\Framework\v2.0.MyVersion\System.Xml.dll" }; bool succeeded = Execute(t); Assert.True(succeeded); Assert.Equal(1, t.ResolvedFiles.Length); Assert.Equal(@"c:\WINNT\Microsoft.NET\Framework\v2.0.MyVersion\System.Xml.dll", t.ResolvedFiles[0].ItemSpec); // For {CandidateAssemblyFiles} we don't even want to see a comment logged for files with non-standard extensions. // This is because {CandidateAssemblyFiles} is very likely to contain non-assemblies and its best not to clutter // up the log. engine.AssertLogDoesntContain ( String.Format(".hiddenfile") ); // ...but we do want to see a log entry for standard extensions, even if the base file name is empty. engine.AssertLogContains ( String.Format(@"NonUI\testDirectoryRoot\.dll") ); }
public void BadTargetPlatformVersion() { MockEngine engine = new MockEngine(); GetInstalledSDKLocations t = new GetInstalledSDKLocations(); t.TargetPlatformIdentifier = "Hello"; t.TargetPlatformVersion = "CAT"; t.BuildEngine = engine; bool success = t.Execute(); Assert.IsFalse(success); Assert.IsTrue(engine.Errors == 1); engine.AssertLogContains("MSB3786"); }
/// <summary> /// Verify the correct references are still in the references table and that references which are in the black list are not in the references table /// Also verify any expected warning messages are seen in the log. /// </summary> private static void VerifyReferenceTable(ReferenceTable referenceTable, MockEngine mockEngine, AssemblyNameExtension engineAssemblyName, AssemblyNameExtension dataAssemblyName, AssemblyNameExtension sqlclientAssemblyName, AssemblyNameExtension xmlAssemblyName, string warningMessage, string warningMessage2) { IDictionary<AssemblyNameExtension, Reference> table = referenceTable.References; Assert.Equal(3, table.Count); // "Expected there to be three elements in the hashtable" Assert.False(table.ContainsKey(sqlclientAssemblyName)); // "Expected to not find the sqlclientAssemblyName in the referenceList" Assert.True(table.ContainsKey(xmlAssemblyName)); // "Expected to find the xmlssemblyName in the referenceList" Assert.True(table.ContainsKey(dataAssemblyName)); // "Expected to find the dataAssemblyName in the referenceList" Assert.True(table.ContainsKey(engineAssemblyName)); // "Expected to find the engineAssemblyName in the referenceList" if (warningMessage != null) { mockEngine.AssertLogContains(warningMessage); } if (warningMessage2 != null) { mockEngine.AssertLogContains(warningMessage2); } table.Clear(); }
public void EmptyTargetPlatformIdentifier() { MockEngine engine = new MockEngine(); GetInstalledSDKLocations t = new GetInstalledSDKLocations(); t.TargetPlatformIdentifier = String.Empty; t.TargetPlatformVersion = "1.0"; t.BuildEngine = engine; bool success = t.Execute(); Assert.IsFalse(success); Assert.IsTrue(engine.Errors == 1); engine.AssertLogContains("MSB3784"); }
public void Regress315619_TwoWeaklyNamedPrimariesIsInsoluble() { ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine e = new MockEngine(); t.BuildEngine = e; t.AssemblyFiles = new ITaskItem[] { new TaskItem(@"c:\Regress315619\A\MyAssembly.dll"), new TaskItem(@"c:\Regress315619\B\MyAssembly.dll") }; t.SearchPaths = new string[] { @"c:\Regress315619\A", @"c:\Regress315619\B" }; Execute(t); e.AssertLogContains ( String.Format(AssemblyResources.GetString("ResolveAssemblyReference.ConflictUnsolvable"), @"MyAssembly, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=null", "MyAssembly, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=null") ); }
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 VerifyClientProfileRedistListAndProfileList2() { // Create a generic redist list with system.xml and microsoft.build.engine. string profileRedistList = String.Empty; string fullRedistList = String.Empty; string fullFrameworkDirectory = Path.Combine(Path.GetTempPath(), "VerifyClientProfileRedistListAndProfileList2"); string targetFrameworkDirectory = Path.Combine(fullFrameworkDirectory, "Profiles\\Client"); try { GenerateRedistAndProfileXmlLocations(_fullRedistListContents, _engineOnlySubset, out profileRedistList, out fullRedistList, fullFrameworkDirectory, targetFrameworkDirectory); ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine e = new MockEngine(); t.BuildEngine = e; t.Assemblies = new ITaskItem[] { new TaskItem("Microsoft.Build.Engine"), new TaskItem("System.Xml") }; t.SearchPaths = new string[] { @"{TargetFrameworkDirectory}", fullFrameworkDirectory }; t.TargetFrameworkDirectories = new string[] { targetFrameworkDirectory }; t.InstalledAssemblyTables = new ITaskItem[] { new TaskItem(profileRedistList) }; t.IgnoreDefaultInstalledAssemblyTables = true; ITaskItem item = new TaskItem(fullRedistList); item.SetMetadata("FrameworkDirectory", Path.GetDirectoryName(fullRedistList)); t.FullFrameworkAssemblyTables = new ITaskItem[] { item }; t.ProfileName = "Client"; string microsoftBuildEnginePath = Path.Combine(fullFrameworkDirectory, "Microsoft.Build.Engine.dll"); string systemXmlPath = Path.Combine(targetFrameworkDirectory, "System.Xml.dll"); bool success = GenerateHelperDelegatesAndExecuteTask(t, microsoftBuildEnginePath, systemXmlPath); Assert.True(success); // "Expected no errors." Assert.Equal(1, t.ResolvedFiles.Length); // "Expected one resolved assembly." Assert.True(t.ResolvedFiles[0].ItemSpec.Contains("Microsoft.Build.Engine")); // "Expected Engine to resolve." e.AssertLogContains("MSB3252"); } finally { if (Directory.Exists(fullFrameworkDirectory)) { Directory.Delete(fullFrameworkDirectory, true); } } }
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 VerifyAssemblyInGacButNotInProfileIsNotResolved() { // Create a generic redist list with system.xml and microsoft.build.engine. string profileRedistList = String.Empty; string fullRedistList = String.Empty; string fullFrameworkDirectory = Path.Combine(Path.GetTempPath(), "VerifyAssemblyInGacButNotInProfileIsNotResolved"); string targetFrameworkDirectory = Path.Combine(fullFrameworkDirectory, "Profiles\\Client"); useFrameworkFileExists = true; string fullRedistListContents = "<FileList Redist='Microsoft-Windows-CLRCoreComp' >" + "<File AssemblyName='System' Version='9.0.0.0' PublicKeyToken='b77a5c561934e089' Culture='Neutral'/>" + "</FileList >"; try { GenerateRedistAndProfileXmlLocations(fullRedistListContents, _engineOnlySubset, out profileRedistList, out fullRedistList, fullFrameworkDirectory, targetFrameworkDirectory); ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine e = new MockEngine(); t.BuildEngine = e; TaskItem item = new TaskItem(@"DependsOnOnlyv4Assemblies, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"); t.Assemblies = new ITaskItem[] { item }; t.SearchPaths = new string[] { @"c:\MyComponents\4.0Component\", "{GAC}" }; t.TargetFrameworkDirectories = new string[] { targetFrameworkDirectory }; t.InstalledAssemblyTables = new ITaskItem[] { new TaskItem(profileRedistList) }; t.IgnoreDefaultInstalledAssemblyTables = true; t.FullFrameworkFolders = new string[] { fullFrameworkDirectory }; t.LatestTargetFrameworkDirectories = new string[] { fullFrameworkDirectory }; t.ProfileName = "Client"; t.TargetFrameworkMoniker = ".NETFramework, Version=4.0"; bool success = Execute(t, false); Console.Out.WriteLine(e.Log); Assert.True(success); // "Expected no errors." Assert.Equal(0, t.ResolvedFiles.Length); // "Expected no files to resolved." string warningMessage = t.Log.FormatResourceString("ResolveAssemblyReference.FailBecauseDependentAssemblyInExclusionList", "DependsOnOnlyv4Assemblies, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089", "SysTem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", t.TargetFrameworkMoniker); e.AssertLogContains(warningMessage); } finally { useFrameworkFileExists = false; if (Directory.Exists(fullFrameworkDirectory)) { Directory.Delete(fullFrameworkDirectory, true); } } }
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 VerifyProfileErrorsAreLogged() { // Create a generic redist list with system.xml and microsoft.build.engine. string profileRedistList = String.Empty; string fullRedistList = String.Empty; string fullFrameworkDirectory = Path.Combine(Path.GetTempPath(), "VerifyProfileErrorsAreLogged"); string targetFrameworkDirectory = Path.Combine(fullFrameworkDirectory, "Profiles\\Client"); try { string fullRedistListContentsErrors = "<FileList Redist='Microsoft-Windows-CLRCoreComp'>" + "File AssemblyName='System.Xml' Version='2.0.0.0' PublicKeyToken='b03f5f7f11d50a3a' Culture='Neutral' FileVersion='2.0.50727.208' InGAC='true' >" + "File AssemblyName='Microsoft.Build.Engine' Version='2.0.0.0' PublicKeyToken='b03f5f7f11d50a3a' Culture='Neutral' FileVersion='2.0.50727.208' InGAC='true' >" + ""; GenerateRedistAndProfileXmlLocations(fullRedistListContentsErrors, _engineOnlySubset, out profileRedistList, out fullRedistList, fullFrameworkDirectory, targetFrameworkDirectory); ResolveAssemblyReference t = new ResolveAssemblyReference(); MockEngine e = new MockEngine(); t.BuildEngine = e; t.Assemblies = new ITaskItem[] { new TaskItem("Microsoft.Build.Engine"), new TaskItem("System.Xml") }; t.SearchPaths = new string[] { @"{TargetFrameworkDirectory}", fullFrameworkDirectory }; t.TargetFrameworkDirectories = new string[] { targetFrameworkDirectory }; t.InstalledAssemblyTables = new ITaskItem[] { new TaskItem(profileRedistList) }; t.IgnoreDefaultInstalledAssemblyTables = true; ITaskItem item = new TaskItem(fullRedistList); item.SetMetadata("FrameworkDirectory", Path.GetDirectoryName(fullRedistList)); t.FullFrameworkAssemblyTables = new ITaskItem[] { item }; t.ProfileName = "Client"; string microsoftBuildEnginePath = Path.Combine(fullFrameworkDirectory, "Microsoft.Build.Engine.dll"); string systemXmlPath = Path.Combine(targetFrameworkDirectory, "System.Xml.dll"); bool success = GenerateHelperDelegatesAndExecuteTask(t, microsoftBuildEnginePath, systemXmlPath); Assert.True(success); // "Expected errors." Assert.Equal(2, t.ResolvedFiles.Length); // "Expected two resolved assembly." e.AssertLogContains("MSB3263"); } finally { if (Directory.Exists(fullFrameworkDirectory)) { Directory.Delete(fullFrameworkDirectory, true); } } }
public void Prefer32bit6() { string testDirectoryRoot = Path.Combine(Path.GetTempPath(), "Prefer32bit6"); string testDirectory = Path.Combine(testDirectoryRoot, "GoodTestSDK\\2.0\\"); string sdkManifestContents = @"<FileList Identity = 'GoodTestSDK, Version=2.0' DisplayName = 'GoodTestSDK 2.0' SupportPrefer32Bit='FOO'> </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.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); } } }
public void HigherVersionDirect() { 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.TargetFrameworkMoniker = "Foo, Version=4.0"; t.TargetFrameworkMonikerDisplayName = "Foo"; t.SearchPaths = new string[] { @"c:\Frameworks\" }; Execute(t, false); Assert.Equal(1, e.Warnings); // "One warning expected in this scenario." e.AssertLogContains("MSB3274"); Assert.Equal(0, e.Errors); // "No errors expected in this scenario." Assert.Equal(0, t.ResolvedFiles.Length); Assert.Equal(0, t.ResolvedDependencyFiles.Length); }