public void TestCustomSerialization() { string projectFileName = "ProjectFileName"; string[] targetNames = new string[] { "Build" }; BuildPropertyGroup globalProperties = null; string toolsVersion = "Tool35"; int requestId = 1; int handleId = 4; globalProperties = new BuildPropertyGroup(); BuildProperty propertyToAdd = new BuildProperty("PropertyName", "Value"); globalProperties.SetProperty(propertyToAdd); BuildRequest request1 = new BuildRequest(handleId, projectFileName, targetNames, globalProperties, toolsVersion, requestId, true, true); request1.ParentBuildEventContext = new BuildEventContext(1, 2, 3, 4); BuildRequest request2 = new BuildRequest(handleId, projectFileName, null, globalProperties, toolsVersion, requestId, true, true); request2.GlobalProperties = null; request2.ProjectFileName = null; request2.DefaultTargets = null; request2.InitialTargets = null; request2.UseResultsCache = false; request2.ParentBuildEventContext = null; MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); BinaryReader reader = new BinaryReader(stream); try { stream.Position = 0; request1.WriteToStream(writer); long streamWriteEndPosition = stream.Position; request2.WriteToStream(writer); long streamWriteEndPosition2 = stream.Position; stream.Position = 0; BuildRequest request3 = BuildRequest.CreateFromStream(reader); long streamReadEndPosition = stream.Position; Assert.IsTrue(streamWriteEndPosition == streamReadEndPosition, "Stream end positions should be equal"); Assert.IsTrue(request1.HandleId == request3.HandleId, "Expected HandleId to Match"); Assert.IsTrue(request1.RequestId == request3.RequestId, "Expected Request to Match"); Assert.IsTrue(string.Compare(request1.ProjectFileName, request3.ProjectFileName, StringComparison.OrdinalIgnoreCase) == 0, "Expected ProjectFileName to Match"); Assert.IsTrue(string.Compare(targetNames[0], request3.TargetNames[0], StringComparison.OrdinalIgnoreCase) == 0, "Expected TargetNames to Match"); Assert.IsTrue(string.Compare(toolsVersion, request3.ToolsetVersion, StringComparison.OrdinalIgnoreCase) == 0, "Expected ToolsetVersion to Match"); Assert.IsTrue(request3.TargetNames.Length == 1, "Expected there to be one TargetName"); Assert.IsTrue(request3.UnloadProjectsOnCompletion, "Expected UnloadProjectsOnCompletion to be true"); Assert.IsTrue(request3.UseResultsCache, "Expected UseResultsCache to be true"); Assert.IsTrue(string.Compare(request3.GlobalProperties["PropertyName"].Value, "Value", StringComparison.OrdinalIgnoreCase) == 0); Assert.AreEqual(request1.ParentBuildEventContext, request3.ParentBuildEventContext, "Expected BuildEventContext to Match"); BuildRequest request4 = BuildRequest.CreateFromStream(reader); streamReadEndPosition = stream.Position; Assert.IsTrue(streamWriteEndPosition2 == streamReadEndPosition, "Stream end positions should be equal"); Assert.IsTrue(request2.HandleId == request4.HandleId, "Expected HandleId to Match"); Assert.IsTrue(request2.RequestId == request4.RequestId, "Expected Request to Match"); Assert.IsNull(request4.ProjectFileName); Assert.IsNull(request4.TargetNames); Assert.IsNull(request4.GlobalProperties); Assert.IsNull(request4.ParentBuildEventContext); } finally { reader.Close(); writer = null; stream = null; } }