public void CreateBatch()
        {
            TagEnvironment env = CreateEnvironment();

            Assert.That(env, Is.Not.Null);

            TagBatchDefinition <string> tbd = new TagBatchDefinition <string>();

            tbd.Add("src", "@(ProjectOutput);static1", typeof(ITagItem[]));
            tbd.Add("src2", "@(ProjectOutput)", typeof(string[]));
            tbd.Add("to", "@(ProjectOutput->'%(FullPath)')", typeof(string));
            tbd.Add("info", "%(FileOrigin)", typeof(string));
            tbd.AddCondition("if", "'%(FileOrigin)' == 'c:\\work\\app\\bin\\debug'");

            int n = 0;

            foreach (TagBatchInstance <string> r in env.RunBatch(tbd, false))
            {
                Assert.That(r, Is.Not.Null);
                Assert.That(r["src"], Is.TypeOf(typeof(ITagItem[])));
                Assert.That(r["to"], Is.TypeOf(typeof(string)));
                Assert.That(r["info"], Is.TypeOf(typeof(string)));
                Assert.That(r["if"], Is.TypeOf(typeof(bool)));

                switch (n++)
                {
                case 0:
                    Assert.That(r["src2"], Has.Some.EqualTo("assembly.dll"));
                    Assert.That(r["src2"], Has.Some.EqualTo("assembly.pdb"));
                    Assert.That(r["src2"], Has.Some.EqualTo("en\\assembly.resources.dll"));
                    Assert.That(r["info"], Is.EqualTo("c:\\work\\app\\bin\\debug"));
                    Assert.That(r.ConditionResult("if"), "'if' condition true");
                    Assert.That(r.ConditionResult(), "All conditions true");
                    foreach (ITagItem ii in (IEnumerable)r["src"])
                    {
                        if (ii.ItemSpec == "static1")
                        {
                            Assert.That(ii.MetadataCount, Is.EqualTo(0));
                        }
                        else
                        {
                            Assert.That(ii.MetadataCount, Is.GreaterThan(0));
                            Assert.That(ii.KeyNames, Has.Some.EqualTo("FileOrigin"));
                        }
                    }
                    break;

                case 1:
                    Assert.That(r["info"], Is.EqualTo("c:\\work\\app"));
                    Assert.That(r["src2"], Has.All.EqualTo("res.txt"));
                    Assert.That(r.ConditionResult("if"), Is.False, "If condition false");
                    Assert.That(r.ConditionResult(), Is.False, "'if' conditions false");
                    break;
                }
            }

            Assert.That(n, Is.EqualTo(2));
        }
        TagEnvironment CreateEnvironment()
        {
            TagEnvironment env = new TagEnvironment();

            env.Properties.LoadEnvironmentVariables();

            env.Items.AddFile("ProjectOutput", "assembly.dll", "c:\\work\\app\\bin\\debug");
            env.Items.AddFile("ProjectOutput", "assembly.pdb", "c:\\work\\app\\bin\\debug");
            env.Items.AddFile("ProjectOutput", "en\\assembly.resources.dll", "c:\\work\\app\\bin\\debug");
            env.Items.AddFile("ProjectOutput", "res.txt", "c:\\work\\app");
            env.Items.AddFile("Scripts", "setup.info", "c:\\work\\app");

            return(env);
        }