throw new InvalidProjectFileException ("This is not output property.");
o = propertyInfo.GetValue (task, null);
- // FIXME: maybe we should throw an exception here?
- if (o == null)
- continue;
-
if (itemName != String.Empty) {
PublishItemGroup (propertyInfo, o, itemName);
} else {
object o,
string propertyName)
{
+ if (o == null) {
+ parentProject.EvaluatedProperties.RemoveProperty (propertyName);
+ return;
+ }
+
BuildProperty bp;
try {
bp = ChangeType.ToBuildProperty (o, propertyInfo.PropertyType, propertyName);
object o,
string itemName)
{
+ if (o == null)
+ return;
+
BuildItemGroup newItems;
try {
newItems = ChangeType.ToBuildItemGroup (o, propertyInfo.PropertyType, itemName);
Assert.AreEqual ("@(IG)", project.EvaluatedProperties["C"].FinalValue, "A6");
}
+ [Test]
+ public void TestEmptyPropertyValue ()
+ {
+ Engine engine;
+ Project project;
+
+ string documentString = @"
+ <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <PropertyGroup>
+ <A>1</A>
+ </PropertyGroup>
+ <Target Name='1'>
+ <Message Text='Before: $(A)'/>
+ <CreateProperty Value=''>
+ <Output
+ TaskParameter='Value'
+ PropertyName='A'
+ />
+ </CreateProperty>
+ <Message Text='After: $(A)'/>
+ </Target>
+ </Project>
+ ";
+
+ engine = new Engine (Consts.BinPath);
+
+ TestMessageLogger testLogger = new TestMessageLogger ();
+ engine.RegisterLogger (testLogger);
+
+ project = engine.CreateNewProject ();
+ project.LoadXml (documentString);
+ if (!project.Build ("1")) {
+ testLogger.DumpMessages ();
+ Assert.Fail ("Build failed");
+ }
+
+ testLogger.CheckLoggedMessageHead ("Before: 1", "A1");
+ testLogger.CheckLoggedMessageHead ("After: ", "A2");
+ Assert.AreEqual (0, testLogger.NormalMessageCount, "Unexpected messages found");
+ }
}
}