private ProjectTargetElement CreateTarget(ProjectRootElement csproj, string scriptSetName)
        {
            var targetName = $"{scriptSetName[0].ToString().ToUpper()}{string.Concat(scriptSetName.Skip(1))}Script";

            TargetHookInfo targetHookInfo;

            if (!ScriptSetToMSBuildHookTargetMap.TryGetValue(scriptSetName, out targetHookInfo))
            {
                MigrationErrorCodes.MIGRATE1019(
                    $"{scriptSetName} is an unsupported script event hook for project migration")
                .Throw();
            }

            var target = csproj.CreateTargetElement(targetName);

            csproj.InsertBeforeChild(target, csproj.LastChild);
            if (targetHookInfo.IsRunBefore)
            {
                target.BeforeTargets = targetHookInfo.TargetName;
            }
            else
            {
                target.AfterTargets = targetHookInfo.TargetName;
            }

            // Run Scripts After each inner build
            target.Condition = " '$(IsCrossTargetingBuild)' != 'true' ";

            return(target);
        }
Exemplo n.º 2
0
        private ProjectTargetElement CreateTarget(ProjectRootElement csproj, string scriptSetName, bool isMultiTFM)
        {
            var targetName = $"{scriptSetName[0].ToString().ToUpper()}{string.Concat(scriptSetName.Skip(1))}Script";

            TargetHookInfo targetHookInfo;

            if (!ScriptSetToMSBuildHookTargetMap.TryGetValue(scriptSetName, out targetHookInfo))
            {
                MigrationErrorCodes.MIGRATE1019(
                    String.Format(LocalizableStrings.MIGRATE1019Arg, scriptSetName))
                .Throw();
            }

            var target = csproj.CreateTargetElement(targetName);

            csproj.InsertBeforeChild(target, csproj.LastChild);
            if (targetHookInfo.IsRunBefore)
            {
                target.BeforeTargets = targetHookInfo.TargetName;
            }
            else
            {
                target.AfterTargets = targetHookInfo.TargetName;
            }

            if (isMultiTFM)
            {
                ConditionTargetToRunScriptsAfterEachInnerBuild(target);
            }

            return(target);
        }
Exemplo n.º 3
0
 public void AddTargetInvalidName()
 {
     Assert.Throws <ArgumentException>(() =>
     {
         ProjectRootElement project = ProjectRootElement.Create();
         project.CreateTargetElement("@#$invalid@#$");
     }
                                       );
 }
        public void ShouldHaveFilePathLocationEvenIfNotLoadedNorSavedYet()
        {
            ProjectRootElement project = ProjectRootElement.Create();

            project.FullPath = "c:\\x";
            ProjectTargetElement target = project.CreateTargetElement("t");

            target.Outputs = "o";
            project.AppendChild(target);

            Assert.Equal(project.FullPath, target.Location.File);
            Assert.Equal(project.FullPath, target.OutputsLocation.File);
        }
        public void XmlLocationsAreCached()
        {
            ProjectRootElement project = ProjectRootElement.Create();

            project.FullPath = "c:\\x";
            ProjectTargetElement target = project.CreateTargetElement("t");

            target.Outputs = "o";
            project.AppendChild(target);

            ElementLocation e1 = target.Location;
            ElementLocation e2 = target.OutputsLocation;

            Assert.Equal(true, Object.ReferenceEquals(e1, target.Location));
            Assert.Equal(true, Object.ReferenceEquals(e2, target.OutputsLocation));
        }
        public void XmlLocationReflectsRename()
        {
            ProjectRootElement project = ProjectRootElement.Create();

            project.FullPath = "c:\\x";
            ProjectTargetElement target = project.CreateTargetElement("t");

            target.Outputs = "o";
            project.AppendChild(target);

            Assert.Equal(project.FullPath, target.Location.File);
            Assert.Equal(project.FullPath, target.OutputsLocation.File);

            project.FullPath = "c:\\y";

            Assert.Equal(project.FullPath, target.Location.File);
            Assert.Equal(project.FullPath, target.OutputsLocation.File);
        }
Exemplo n.º 7
0
        private ProjectTargetElement CreateTarget(ProjectRootElement csproj, string scriptSetName)
        {
            var targetName     = $"{scriptSetName[0].ToString().ToUpper()}{string.Concat(scriptSetName.Skip(1))}Script";
            var targetHookInfo = ScriptSetToMSBuildHookTargetMap[scriptSetName];

            var target = csproj.CreateTargetElement(targetName);

            csproj.InsertBeforeChild(target, csproj.LastChild);
            if (targetHookInfo.IsRunBefore)
            {
                target.BeforeTargets = targetHookInfo.TargetName;
            }
            else
            {
                target.AfterTargets = targetHookInfo.TargetName;
            }

            return(target);
        }
        /// <summary>
        /// Creates a ProjectTargetElement representing this instance.  Attaches it to the specified root element.
        /// </summary>
        /// <param name="rootElement">The root element to which the new element will belong.</param>
        /// <returns>The new element.</returns>
        internal ProjectTargetElement ToProjectTargetElement(ProjectRootElement rootElement)
        {
            ProjectTargetElement target = rootElement.CreateTargetElement(Name);

            rootElement.AppendChild(target);

            target.Condition        = Condition;
            target.DependsOnTargets = DependsOnTargets;
            target.Inputs           = Inputs;
            target.Outputs          = Outputs;
            target.Returns          = Returns;

            foreach (ProjectTaskInstance taskInstance in Tasks)
            {
                ProjectTaskElement taskElement = target.AddTask(taskInstance.Name);
                taskElement.Condition           = taskInstance.Condition;
                taskElement.ContinueOnError     = taskInstance.ContinueOnError;
                taskElement.MSBuildArchitecture = taskInstance.MSBuildArchitecture;
                taskElement.MSBuildRuntime      = taskInstance.MSBuildRuntime;

                foreach (KeyValuePair <string, string> taskParameterEntry in taskInstance.Parameters)
                {
                    taskElement.SetParameter(taskParameterEntry.Key, taskParameterEntry.Value);
                }

                foreach (ProjectTaskInstanceChild outputInstance in taskInstance.Outputs)
                {
                    if (outputInstance is ProjectTaskOutputItemInstance)
                    {
                        ProjectTaskOutputItemInstance outputItemInstance = outputInstance as ProjectTaskOutputItemInstance;
                        taskElement.AddOutputItem(outputItemInstance.TaskParameter, outputItemInstance.ItemType, outputItemInstance.Condition);
                    }
                    else if (outputInstance is ProjectTaskOutputPropertyInstance)
                    {
                        ProjectTaskOutputPropertyInstance outputPropertyInstance = outputInstance as ProjectTaskOutputPropertyInstance;
                        taskElement.AddOutputItem(outputPropertyInstance.TaskParameter, outputPropertyInstance.PropertyName, outputPropertyInstance.Condition);
                    }
                }
            }

            return(target);
        }
Exemplo n.º 9
0
 /// <inheritdoc />
 protected override ProjectElement CreateNewInstance(ProjectRootElement owner)
 {
     return(owner.CreateTargetElement(Name));
 }
Exemplo n.º 10
0
        public void AddTargetInvalidName()
        {
            ProjectRootElement project = ProjectRootElement.Create();

            project.CreateTargetElement("@#$invalid@#$");
        }