NotifyPropertyWeaverMsBuildTask.WeavingTask.Execute C# (CSharp) Method

Execute() public method

public Execute ( ) : bool
return bool
        public override bool Execute()
        {
            BuildEngine.LogMessageEvent(new BuildMessageEventArgs(string.Format("NotifyPropertyWeaver (version {0}) Executing (Change MessageImportance to get more or less info)", GetType().Assembly.GetName().Version), "", "NotifyPropertyWeaver", Microsoft.Build.Framework.MessageImportance.High));

            var stopwatch = Stopwatch.StartNew();

            try
            {
                logger = new Logger
                             {
                                 SenderName = "NotifyPropertyWeaver",
                                 BuildEngine = BuildEngine,
                             };
                logger.Initialise(MessageImportance);
                Inner();
            }
            catch (Exception exception)
            {
                HandleException(exception);
            }
            finally
            {
                stopwatch.Stop();
                logger.Flush();
                BuildEngine.LogMessageEvent(new BuildMessageEventArgs(string.Format("\tFinished ({0}ms)", stopwatch.ElapsedMilliseconds), "", "NotifyPropertyWeaver", Microsoft.Build.Framework.MessageImportance.High));
            }
            return !logger.ErrorHasBeenRaised;
        }

Usage Example

    public WeaverHelper(string projectPath, bool tryToWeaveAllTypes)
    {
        this.projectPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\TestAssemblies", projectPath));

        GetAssemblyPath();

        var newAssembly = assemblyPath.Replace(".dll", "2.dll");
        var pdbFileName = Path.ChangeExtension(assemblyPath, "pdb");
        var newPdbFileName = Path.ChangeExtension(newAssembly, "pdb");
        File.Copy(assemblyPath, newAssembly, true);
        File.Copy(pdbFileName, newPdbFileName, true);

        var buildEngine = Substitute.For<IBuildEngine>();
        buildEngine.ProjectFileOfTaskNode.Returns(projectPath);
        var buildEngineExtensions = Substitute.For<BuildEnginePropertyExtractor>();
        buildEngineExtensions.GetEnvironmentVariable("_DebugSymbolsIntermediatePath", false).Returns(new[] { newPdbFileName });
        buildEngineExtensions.GetProjectPath().Returns(this.projectPath);

        var weavingTask = new WeavingTask
                              {
                                  TargetPath = newAssembly,
                                  BuildEngine = buildEngine,
                                  TryToWeaveAllTypes = tryToWeaveAllTypes,
                                  References = GetReferences(),
                                  CheckForIsChanged = true,
                                  ProcessFields = true,
                                  BuildEnginePropertyExtractor = buildEngineExtensions,
                                  EventInvokerName = "CustomEventInvoker"
                              };

        var execute = weavingTask.Execute();
        if (!execute)
        {
            throw weavingTask.Exception;
        }

        var combine = Path.Combine(new FileInfo(assemblyPath).DirectoryName, "NotifyPropertyWeaver.dll");
        if (File.Exists(combine))
        {
            Assembly.LoadFile(Path.GetFullPath(combine));
        }
        Assembly = Assembly.LoadFile(newAssembly);
    }