diff options
author | Jo Shields <directhex@apebox.org> | 2014-02-19 22:12:43 +0000 |
---|---|---|
committer | Jo Shields <directhex@apebox.org> | 2014-02-19 22:12:43 +0000 |
commit | 9972bf87b4f27d9c8f358ef8414ac1ab957a2f0f (patch) | |
tree | 5bb230c1d698659115f918e243c1d4b0aa4c7f51 /mcs/class/Microsoft.Build.Utilities | |
parent | d0a215f5626219ff7927f576588a777e5331c7be (diff) | |
download | mono-upstream/3.2.8+dfsg.tar.gz |
Imported Upstream version 3.2.8+dfsgupstream/3.2.8+dfsg
Diffstat (limited to 'mcs/class/Microsoft.Build.Utilities')
12 files changed, 308 insertions, 35 deletions
diff --git a/mcs/class/Microsoft.Build.Utilities/Assembly/AssemblyInfo.cs b/mcs/class/Microsoft.Build.Utilities/Assembly/AssemblyInfo.cs index 90933c5a29..2f80ed7552 100644 --- a/mcs/class/Microsoft.Build.Utilities/Assembly/AssemblyInfo.cs +++ b/mcs/class/Microsoft.Build.Utilities/Assembly/AssemblyInfo.cs @@ -46,9 +46,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyCompany (Consts.MonoCompany)] [assembly: AssemblyProduct (Consts.MonoProduct)] [assembly: AssemblyCopyright (Consts.MonoCopyright)] -[assembly: AssemblyVersion (Consts.FxVersion)] -[assembly: SatelliteContractVersion (Consts.FxVersion)] -[assembly: AssemblyInformationalVersion (Consts.FxFileVersion)] +[assembly: AssemblyVersion (XBuildConsts.AssemblyVersion)] +[assembly: SatelliteContractVersion (XBuildConsts.AssemblyVersion)] +[assembly: AssemblyInformationalVersion (XBuildConsts.FileVersion)] [assembly: NeutralResourcesLanguage ("en-US")] @@ -57,6 +57,6 @@ using System.Runtime.InteropServices; [assembly: AssemblyDelaySign (true)] [assembly: AssemblyKeyFile("../msfinal.pub")] -[assembly: AssemblyFileVersion (Consts.FxFileVersion)] +[assembly: AssemblyFileVersion (XBuildConsts.FileVersion)] #endif diff --git a/mcs/class/Microsoft.Build.Utilities/Makefile b/mcs/class/Microsoft.Build.Utilities/Makefile index 32f34e3f40..0951df6adb 100644 --- a/mcs/class/Microsoft.Build.Utilities/Makefile +++ b/mcs/class/Microsoft.Build.Utilities/Makefile @@ -2,27 +2,18 @@ thisdir = class/Microsoft.Build.Utilities SUBDIRS = include ../../build/rules.make -LIBRARY = Microsoft.Build.Utilities.dll -BUILD_FRAMEWORK = Microsoft.Build.Framework.dll +XBUILD_DIR=$(topdir)/tools/xbuild +include $(XBUILD_DIR)/xbuild.make -ifeq (3.5, $(FRAMEWORK_VERSION)) -LIBRARY_NAME = Microsoft.Build.Utilities.v3.5.dll -BUILD_FRAMEWORK := $(topdir)/class/lib/$(PROFILE)/$(BUILD_FRAMEWORK) -else -ifeq (4, $(FRAMEWORK_VERSION_MAJOR)) -LIBRARY_NAME = Microsoft.Build.Utilities.v4.0.dll -endif -endif +LIBRARY = Microsoft.Build.Utilities.dll +LIBRARY_NAME = Microsoft.Build.Utilities$(NAME_SUFFIX).dll LIB_MCS_FLAGS = \ /r:$(corlib) \ /r:System.dll \ - /r:$(BUILD_FRAMEWORK) - -TEST_MCS_FLAGS = /r:$(BUILD_FRAMEWORK) -r:System.dll + /r:$(XBUILD_FRAMEWORK) -export TESTING_MONO=a -XBUILD_DIR=../../tools/xbuild -include $(XBUILD_DIR)/xbuild_targets.make +TEST_MCS_FLAGS = /r:$(XBUILD_ENGINE) /r:$(XBUILD_FRAMEWORK) -r:System.dll -r:System.Core.dll +include $(XBUILD_DIR)/xbuild_test.make include ../../build/library.make diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities.dll.sources b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities.dll.sources index c377282586..deb3e77ec9 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities.dll.sources +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities.dll.sources @@ -1,5 +1,6 @@ ../../build/common/Consts.cs ../../build/common/MonoTODOAttribute.cs +../../tools/xbuild/XBuildConsts.cs Assembly/AssemblyInfo.cs Microsoft.Build.Utilities/AppDomainIsolatedTask.cs Microsoft.Build.Utilities/CommandLineBuilder.cs diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ProcessService.cs b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ProcessService.cs index 3de4979772..d022ea16c0 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ProcessService.cs +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ProcessService.cs @@ -117,6 +117,7 @@ namespace Microsoft.Build.Utilities startInfo.RedirectStandardError = true; startInfo.RedirectStandardInput = redirectStandardInput; startInfo.UseShellExecute = false; + startInfo.CreateNoWindow = true; return startInfo; } diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TargetDotNetFrameworkVersion.cs b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TargetDotNetFrameworkVersion.cs index 4401042a60..04940d5e8b 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TargetDotNetFrameworkVersion.cs +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TargetDotNetFrameworkVersion.cs @@ -31,7 +31,12 @@ namespace Microsoft.Build.Utilities { // If changing something here then update // ToolLocationHelper.GetPathToDotNetFramework also - public enum TargetDotNetFrameworkVersion + #if MICROSOFT_BUILD_DLL + internal + #else + public + #endif + enum TargetDotNetFrameworkVersion { Version11, Version20, @@ -43,8 +48,13 @@ namespace Microsoft.Build.Utilities #if NET_4_5 Version45, #endif +#if XBUILD_12 + Version451, +#endif -#if NET_4_5 +#if XBUILD_12 + VersionLatest = Version451 +#elif NET_4_5 VersionLatest = Version45 #elif NET_4_0 VersionLatest = Version40 diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs index d917d3e6a3..03c018a54d 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/TaskItem.cs @@ -36,7 +36,10 @@ using Mono.XBuild.Utilities; namespace Microsoft.Build.Utilities { - public sealed class TaskItem : MarshalByRefObject, ITaskItem +#if !MICROSOFT_BUILD_DLL + public +#endif + sealed class TaskItem : MarshalByRefObject, ITaskItem { IDictionary metadata; string itemSpec; @@ -61,7 +64,6 @@ namespace Microsoft.Build.Utilities if (itemSpec == null) throw new ArgumentNullException ("itemSpec"); - this.itemSpec = itemSpec; this.metadata = CollectionsUtil.CreateCaseInsensitiveHashtable (); // FIXME: hack @@ -105,9 +107,9 @@ namespace Microsoft.Build.Utilities public string GetMetadata (string metadataName) { if (ReservedNameUtils.IsReservedMetadataName (metadataName)) - return ReservedNameUtils.GetReservedMetadata (ItemSpec, metadataName, metadata); + return MSBuildUtils.Unescape (ReservedNameUtils.GetReservedMetadata (ItemSpec, metadataName, metadata)); else if (metadata.Contains (metadataName)) - return (string) metadata [metadataName]; + return MSBuildUtils.Unescape ((string)metadata [metadataName]); else return String.Empty; } @@ -150,7 +152,7 @@ namespace Microsoft.Build.Utilities } public string ItemSpec { - get { return itemSpec; } + get { return MSBuildUtils.Unescape (itemSpec); } set { itemSpec = value; } } diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs index cc5b84cb90..91441df066 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolLocationHelper.cs @@ -30,10 +30,16 @@ using System.IO; namespace Microsoft.Build.Utilities { - public static class ToolLocationHelper + #if MICROSOFT_BUILD_DLL + internal + #else + public + #endif + static class ToolLocationHelper { static string lib_mono_dir; static string [] mono_dir; + static bool runningOnDotNet; static ToolLocationHelper () { @@ -48,23 +54,45 @@ namespace Microsoft.Build.Utilities t2 = t1.Parent; lib_mono_dir = t2.FullName; + +#if NET_4_0 + var windowsPath = Environment.GetFolderPath (Environment.SpecialFolder.Windows); + runningOnDotNet = !string.IsNullOrEmpty (windowsPath) && lib_mono_dir.StartsWith (windowsPath); +#endif + if (Environment.GetEnvironmentVariable ("TESTING_MONO") != null) { mono_dir = new string [] { Path.Combine (lib_mono_dir, "net_1_0"), Path.Combine (lib_mono_dir, "net_2_0"), Path.Combine (lib_mono_dir, "net_2_0"), Path.Combine (lib_mono_dir, "net_3_5"), - Path.Combine (lib_mono_dir, "net_4_0"), + // mono's 4.0 is not an actual framework directory with all tools etc + // it's simply reference assemblies. So like .NET we consider 4.5 to + // be a complete replacement for 4.0. + Path.Combine (lib_mono_dir, "net_4_5"), + Path.Combine (lib_mono_dir, "net_4_5"), Path.Combine (lib_mono_dir, "net_4_5") }; + } else if (runningOnDotNet) { + mono_dir = new string [] { + Path.Combine (lib_mono_dir, "v1.0.3705"), + Path.Combine (lib_mono_dir, "v2.0.50727"), + Path.Combine (lib_mono_dir, "v2.0.50727"), + Path.Combine (lib_mono_dir, "v3.5"), + Path.Combine (lib_mono_dir, "v4.0.30319"), + Path.Combine (lib_mono_dir, "v4.0.30319"), + Path.Combine (lib_mono_dir, "v4.0.30319") + }; } else { mono_dir = new string [] { Path.Combine (lib_mono_dir, "1.0"), Path.Combine (lib_mono_dir, "2.0"), Path.Combine (lib_mono_dir, "2.0"), Path.Combine (lib_mono_dir, "3.5"), - Path.Combine (lib_mono_dir, "4.0"), - Path.Combine (lib_mono_dir, "4.5") + // see comment above regarding 4.0/4.5 + Path.Combine (lib_mono_dir, "4.5"), + Path.Combine (lib_mono_dir, "4.5"), + Path.Combine (lib_mono_dir, "4.5"), }; } @@ -124,5 +152,30 @@ namespace Microsoft.Build.Utilities throw new NotImplementedException (); } } + +#if XBUILD_12 + public static string CurrentToolsVersion { + get { + return XBuildConsts.Version; + } + } + + public static string GetPathToBuildTools (string toolsVersion) + { + if (toolsVersion != "12.0") + return null; + + if (Environment.GetEnvironmentVariable ("TESTING_MONO") != null) + return Path.Combine (lib_mono_dir, "xbuild_12"); + + if (runningOnDotNet) { + //see http://msdn.microsoft.com/en-us/library/vstudio/bb397428(v=vs.120).aspx + var programFiles = Environment.GetFolderPath (Environment.SpecialFolder.ProgramFilesX86); + return Path.Combine (programFiles, "MSBuild", toolsVersion, "bin"); + } + + return Path.Combine (lib_mono_dir, "xbuild", toolsVersion, "bin"); + } +#endif } } diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs index 4094c122e3..01a7c453ae 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/ToolTask.cs @@ -298,6 +298,7 @@ namespace Microsoft.Build.Utilities pinfo.WorkingDirectory = GetWorkingDirectory () ?? Environment.CurrentDirectory; pinfo.UseShellExecute = false; + pinfo.CreateNoWindow = true; pinfo.RedirectStandardOutput = true; pinfo.RedirectStandardError = true; @@ -464,13 +465,25 @@ namespace Microsoft.Build.Utilities } } - // Snatched from our codedom code, with some changes to make it compatible with csc - // (the line+column group is optional is csc) + // Keep in sync with mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs + const string ErrorRegexPattern = @" + ^ + (\s*(?<file>[^\(]+) # filename (optional) + (\((?<line>\d*)(,(?<column>\d*[\+]*))?\))? # line+column (optional) + :\s+)? + (?<level>\w+) # error|warning + \s+ + (?<number>[^:]*\d) # CS1234 + : + \s* + (?<message>.*)$"; + static Regex errorRegex; static Regex CscErrorRegex { get { if (errorRegex == null) - errorRegex = new Regex (@"^(\s*(?<file>[^\(]+)(\((?<line>\d*)(,(?<column>\d*[\+]*))?\))?:\s+)*(?<level>\w+)\s+(?<number>.*\d):\s*(?<message>.*)", RegexOptions.Compiled | RegexOptions.ExplicitCapture); + errorRegex = new Regex (ErrorRegexPattern, + RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnorePatternWhitespace); return errorRegex; } } diff --git a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities_test.dll.sources b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities_test.dll.sources index 8f797a06ec..b1a3758e98 100644 --- a/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities_test.dll.sources +++ b/mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities_test.dll.sources @@ -2,3 +2,4 @@ Microsoft.Build.Utilities/CommandLineBuilderTest.cs Microsoft.Build.Utilities/LoggerTest.cs Microsoft.Build.Utilities/TaskItemTest.cs Microsoft.Build.Utilities/TaskLoggingHelperTest.cs +Microsoft.Build.Utilities/ToolTaskTest.cs diff --git a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs index f2712566d5..6789cfbd92 100644 --- a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs +++ b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs @@ -77,7 +77,8 @@ namespace Mono.XBuild.Utilities { switch (metadataName.ToLowerInvariant ()) { case "fullpath": - return Path.GetFullPath (itemSpec); + var unescapedItemSpec = MSBuildUtils.Unescape (itemSpec); + return MSBuildUtils.Escape (Path.GetFullPath (unescapedItemSpec)); case "rootdir": if (Path.IsPathRooted (itemSpec)) return Path.GetPathRoot (itemSpec); diff --git a/mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/TaskItemTest.cs b/mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/TaskItemTest.cs index 2032f7c357..79e2eff5f6 100644 --- a/mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/TaskItemTest.cs +++ b/mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/TaskItemTest.cs @@ -28,6 +28,7 @@ using System; using System.Collections; using System.Collections.Specialized; +using System.IO; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using NUnit.Framework; @@ -116,6 +117,50 @@ namespace MonoTests.Microsoft.Build.Utilities { } [Test] + public void TestCtor_EscapedSpecialChar () + { + // If we instantiate with the *escaped* metadata, it's unescaped automatically + var metadata = "foo@2x.png"; + var escapedMetadata = global::Microsoft.Build.BuildEngine.Utilities.Escape ("foo@2x.png"); + var item = new TaskItem (escapedMetadata); + item.SetMetadata ("mine", escapedMetadata); + + Assert.AreEqual (metadata, item.ItemSpec, "#1"); + Assert.AreEqual (metadata, item.GetMetadata ("Identity"), "#2"); + Assert.AreEqual (Path.GetFileNameWithoutExtension (metadata), item.GetMetadata ("FileName"), "#3"); + Assert.IsTrue (item.GetMetadata ("FullPath").EndsWith (metadata), "#4"); + Assert.AreEqual (metadata, item.GetMetadata ("mine"), "#5"); + } + + [Test] + public void TestCtor_EscapedSpecialChar_BrokenEscaping () + { + // This is badly escaped, but MSBuild does not care. + var metadata = "foo%4@2x.png"; + var item = new TaskItem (metadata); + + Assert.AreEqual (metadata, item.ItemSpec, "#1"); + Assert.AreEqual (metadata, item.GetMetadata ("Identity"), "#2"); + Assert.AreEqual (Path.GetFileNameWithoutExtension (metadata), item.GetMetadata ("FileName"), "#3"); + Assert.IsTrue (item.GetMetadata ("FullPath").EndsWith (metadata), "#4"); + } + + [Test] + public void TestCtor_UnescapedSpecialChar () + { + // If we instantiate with unescaped metadata, we get the same value back + var metadata = "foo@2x.png"; + var item = new TaskItem (metadata); + item.SetMetadata ("mine", metadata); + + Assert.AreEqual (metadata, item.ItemSpec, "#1"); + Assert.AreEqual (metadata, item.GetMetadata ("Identity"), "#2"); + Assert.AreEqual (Path.GetFileNameWithoutExtension (metadata), item.GetMetadata ("FileName"), "#3"); + Assert.IsTrue (item.GetMetadata ("FullPath").EndsWith (metadata), "#4"); + Assert.AreEqual (metadata, item.GetMetadata ("mine"), "#5"); + } + + [Test] public void TestCopyConstructor () { item1 = new TaskItem ("itemSpec"); @@ -240,5 +285,19 @@ namespace MonoTests.Microsoft.Build.Utilities { item = new TaskItem ("lalala"); item.SetMetadata ("Identity", "some value"); } + + [Test] + public void TestSetItemSpec () + { + var itemSpec = "foo@2x.png"; + var escapedItemSpec = global::Microsoft.Build.BuildEngine.Utilities.Escape (itemSpec); + + var item = new TaskItem ("foo"); + item.ItemSpec = itemSpec; + Assert.AreEqual (itemSpec, item.ItemSpec, "#1"); + + item.ItemSpec = escapedItemSpec; + Assert.AreEqual (itemSpec, item.ItemSpec, "#2"); + } } } diff --git a/mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/ToolTaskTest.cs b/mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/ToolTaskTest.cs new file mode 100644 index 0000000000..8b3ae6e69c --- /dev/null +++ b/mcs/class/Microsoft.Build.Utilities/Test/Microsoft.Build.Utilities/ToolTaskTest.cs @@ -0,0 +1,141 @@ +// +// ToolTaskTest.cs: +// +// Author: +// Jonathan Pryor (jonp@xamarin.com) +// +// (C) 2013 Xamarin Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; + +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +using NUnit.Framework; + +namespace MonoTests.Microsoft.Build.Utilities { + + [TestFixture] + public class ToolTaskTest { + + [Test] + public void LogEventsFromTextOutput () + { + var messages = new[] { + new {Code = "CS0152", Line = "class1.cs(16,4): error CS0152: The label `case 1:' already occurs in this switch statement" }, + }; + + var task = new LogEventsFromTextOutputToolTask (); + foreach (var m in messages) { + task.LogEventsFromTextOutput (m.Line); + Assert.IsTrue (task.Codes.Count > 0, "No error logged for line: {0}", m.Line); + Assert.AreEqual (m.Code, task.Codes [0]); + task.Codes.Clear (); + } + } + } + + class LogEventsFromTextOutputToolTask : ToolTask { + + public List<string> Codes { + get {return engine.Codes;} + } + + CodeLoggingBuildEngine engine = new CodeLoggingBuildEngine (); + + public LogEventsFromTextOutputToolTask () + { + BuildEngine = engine; + } + + protected override string GenerateFullPathToTool () + { + throw new NotImplementedException (); + } + + protected override string ToolName { + get {throw new NotImplementedException ();} + } + + public void LogEventsFromTextOutput (string line) + { + base.LogEventsFromTextOutput (line, MessageImportance.Normal); + } + } + + class CodeLoggingBuildEngine : IBuildEngine { + + public List<string> Codes = new List<string> (); + + public int ColumnNumberOfTaskNode { + get { + throw new NotImplementedException (); + } + } + + public bool ContinueOnError { + get { + throw new NotImplementedException (); + } + } + + public int LineNumberOfTaskNode { + get { + throw new NotImplementedException (); + } + } + + public string ProjectFileOfTaskNode { + get { + throw new NotImplementedException (); + } + } + + public bool BuildProjectFile (string projectFileName, string[] targetNames, System.Collections.IDictionary globalProperties, System.Collections.IDictionary targetOutputs) + { + throw new NotImplementedException (); + } + + public void LogCustomEvent (CustomBuildEventArgs e) + { + } + + public void LogErrorEvent (BuildErrorEventArgs e) + { + Codes.Add (e.Code); + } + + public void LogMessageEvent (BuildMessageEventArgs e) + { + } + + public void LogWarningEvent (BuildWarningEventArgs e) + { + Codes.Add (e.Code); + } + } +} + |