Exemplo n.º 1
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Executes the task.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        protected override void ExecuteTask()
        {
            Log(Level.Info, "Processing {0}", Path.GetFileName(Executable));

            string manifestFile = Executable + ".manifest";

            try
            {
                var doc = new XmlDocument {
                    PreserveWhitespace = true
                };

                using (XmlReader reader = new XmlTextReader(manifestFile))
                {
                    if (reader.MoveToElement())
                    {
                        doc.ReadNode(reader);
                    }
                }

                // Register all DLLs temporarily
                using (var creator = new RegFreeCreator(doc))
                {
                    foreach (string fileName in Dlls.FileNames)
                    {
                        Log(Level.Verbose, "\tRegistering library {0}", Path.GetFileName(fileName));
                        creator.Register(fileName);
                    }

                    XmlElement root = creator.CreateExeInfo(Executable);
                    foreach (string fileName in Dlls.FileNames)
                    {
                        Log(Level.Verbose, "\tProcessing library {0}", Path.GetFileName(fileName));
                        creator.ProcessTypeLibrary(root, fileName);
                    }
                    foreach (string fragmentName in Fragments.FileNames)
                    {
                        Log(Level.Verbose, "\tAdding fragment {0}", Path.GetFileName(fragmentName));
                        creator.AddFragment(root, fragmentName);
                    }

                    foreach (string fragmentName in AsIs.FileNames)
                    {
                        Log(Level.Verbose, "\tAdding as-is fragment {0}", Path.GetFileName(fragmentName));
                        creator.AddAsIs(root, fragmentName);
                    }

                    var settings = new XmlWriterSettings
                    {
                        OmitXmlDeclaration  = false,
                        NewLineOnAttributes = false,
                        NewLineChars        = Environment.NewLine,
                        Indent      = true,
                        IndentChars = "\t"
                    };
                    using (XmlWriter writer = XmlWriter.Create(manifestFile, settings))
                    {
                        doc.WriteContentTo(writer);
                    }

                    // Unregister DLLs
                    foreach (string fileName in Dlls.FileNames)
                    {
                        Log(Level.Verbose, "\tUnregistering library {0}", Path.GetFileName(fileName));
                        creator.Unregister(fileName);
                    }
                }
            }
            catch (Exception e)
            {
                throw new BuildException("Regfree failed.", Location, e);
            }
        }
Exemplo n.º 2
0
		/// ------------------------------------------------------------------------------------
		/// <summary>
		/// Executes the task.
		/// </summary>
		/// ------------------------------------------------------------------------------------
		protected override void ExecuteTask()
		{
			Log(Level.Info, "Processing {0}", Path.GetFileName(Executable));

			string manifestFile = Executable + ".manifest";
			try
			{
				var doc = new XmlDocument { PreserveWhitespace = true };

				using (XmlReader reader = new XmlTextReader(manifestFile))
				{
					if (reader.MoveToElement())
						doc.ReadNode(reader);
				}

				// Register all DLLs temporarily
				using (var creator = new RegFreeCreator(doc))
				{
					foreach (string fileName in Dlls.FileNames)
					{
						Log(Level.Verbose, "\tRegistering library {0}", Path.GetFileName(fileName));
						creator.Register(fileName);
					}

					XmlElement root = creator.CreateExeInfo(Executable);
					foreach (string fileName in Dlls.FileNames)
					{
						Log(Level.Verbose, "\tProcessing library {0}", Path.GetFileName(fileName));
						creator.ProcessTypeLibrary(root, fileName);
					}
					foreach (string fragmentName in Fragments.FileNames)
					{
						Log(Level.Verbose, "\tAdding fragment {0}", Path.GetFileName(fragmentName));
						creator.AddFragment(root, fragmentName);
					}

					foreach (string fragmentName in AsIs.FileNames)
					{
						Log(Level.Verbose, "\tAdding as-is fragment {0}", Path.GetFileName(fragmentName));
						creator.AddAsIs(root, fragmentName);
					}

					var settings = new XmlWriterSettings
									{
										OmitXmlDeclaration = false,
										NewLineOnAttributes = false,
										NewLineChars = Environment.NewLine,
										Indent = true,
										IndentChars = "\t"
									};
					using (XmlWriter writer = XmlWriter.Create(manifestFile, settings))
					{
						doc.WriteContentTo(writer);
					}

					// Unregister DLLs
					foreach (string fileName in Dlls.FileNames)
					{
						Log(Level.Verbose, "\tUnregistering library {0}", Path.GetFileName(fileName));
						creator.Unregister(fileName);
					}
				}
			}
			catch (Exception e)
			{
				throw new BuildException("Regfree failed.", Location, e);
			}
		}