Fix for AMQNET-415. Throw an InvalidClientIDException if the login credentials are incorrect when using a failover protocol connection.  Added matching unit test.
Unit Test cleanup: Standardized the destination naming convention to prefix names with "TEST.".

diff --git a/nmsprovider-test.config b/nmsprovider-test.config
index 01f01f8..1d7bcb2 100644
--- a/nmsprovider-test.config
+++ b/nmsprovider-test.config
@@ -17,4 +17,19 @@
 -->
 <configuration>
     <defaultURI value="stomp:tcp://${activemqhost}:61613"/>
+  <InvalidCredentials-BogusUser value="stomp:failover:tcp://${activemqhost}:61613">
+    <factoryParams>
+      <param type="string" value="InvalidCredentialsTestClient"/>
+    </factoryParams>
+    <userName value="BogusUser"/>
+    <passWord value="BogusPassword"/>
+  </InvalidCredentials-BogusUser>
+
+  <InvalidCredentials-AuthenticUser value="stomp:failover:tcp://${activemqhost}:61613">
+    <factoryParams>
+      <param type="string" value="InvalidCredentialsTestClient"/>
+    </factoryParams>
+    <userName value="system"/>
+    <passWord value="manager"/>
+  </InvalidCredentials-AuthenticUser>
 </configuration>
diff --git a/src/main/csharp/Connection.cs b/src/main/csharp/Connection.cs
index 942b44b..5643d21 100755
--- a/src/main/csharp/Connection.cs
+++ b/src/main/csharp/Connection.cs
@@ -18,6 +18,7 @@
 using System;
 using System.Collections;
 using System.Collections.Specialized;
+using System.Reflection;
 using System.Threading;
 using Apache.NMS.Stomp.Commands;
 using Apache.NMS.Stomp.Threads;
@@ -74,11 +75,7 @@
             this.brokerUri = connectionUri;
             this.clientIdGenerator = clientIdGenerator;
 
-            this.transport = transport;
-            this.transport.Command = new CommandHandler(OnCommand);
-            this.transport.Exception = new ExceptionHandler(OnTransportException);
-            this.transport.Interrupted = new InterruptedHandler(OnTransportInterrupted);
-            this.transport.Resumed = new ResumedHandler(OnTransportResumed);
+			SetTransport(transport);
 
             ConnectionId id = new ConnectionId();
             id.Value = CONNECTION_ID_GENERATOR.GenerateId();
@@ -310,7 +307,16 @@
 
         #endregion
 
-        /// <summary>
+		private void SetTransport(ITransport newTransport)
+		{
+			this.transport = newTransport;
+			this.transport.Command = new CommandHandler(OnCommand);
+			this.transport.Exception = new ExceptionHandler(OnTransportException);
+			this.transport.Interrupted = new InterruptedHandler(OnTransportInterrupted);
+			this.transport.Resumed = new ResumedHandler(OnTransportResumed);
+		}
+
+		/// <summary>
         /// Starts asynchronous message delivery of incoming messages for this connection.
         /// Synchronous delivery is unaffected.
         /// </summary>
@@ -448,7 +454,7 @@
                 }
                 catch(Exception ex)
                 {
-                    Tracer.ErrorFormat("Error during connection close: {0}", ex);
+                    Tracer.ErrorFormat("Error during connection close: {0}", ex.Message);
                 }
                 finally
                 {
@@ -583,13 +589,34 @@
                                 {
                                     if(null != transport)
                                     {
-                                        // Send the connection and see if an ack/nak is returned.
+										// Make sure the transport is started.
+										if(!this.transport.IsStarted)
+										{
+											this.transport.Start();
+										}
+										
+										// Send the connection and see if an ack/nak is returned.
                                         Response response = transport.Request(this.info, this.RequestTimeout);
                                         if(!(response is ExceptionResponse))
                                         {
                                             connected.Value = true;
                                         }
-                                    }
+										else
+										{
+											ExceptionResponse error = response as ExceptionResponse;
+											NMSException exception = CreateExceptionFromBrokerError(error.Exception);
+											if(exception is InvalidClientIDException)
+											{
+												// This is non-recoverable.
+												// Shutdown the transport connection, and re-create it, but don't start it.
+												// It will be started if the connection is re-attempted.
+												this.transport.Stop();
+												ITransport newTransport = TransportFactory.CreateTransport(this.brokerUri);
+												SetTransport(newTransport);
+												throw exception;
+											}
+										}
+									}
                                 }
                                 catch
                                 {
@@ -664,7 +691,7 @@
             }
             else
             {
-                Tracer.Error("Unknown command: " + command);
+                Tracer.ErrorFormat("Unknown command: {0}", command);
             }
         }
 
@@ -717,7 +744,7 @@
                 }
                 else
                 {
-                    Tracer.Debug("Async exception with no exception listener: " + error);
+                    Tracer.DebugFormat("Async exception with no exception listener: {0}", error.Message);
                 }
             }
         }
@@ -753,7 +780,7 @@
             }
             catch(Exception ex)
             {
-                Tracer.Debug("Caught Exception While disposing of Transport: " + ex);
+                Tracer.DebugFormat("Caught Exception While disposing of Transport: {0}", ex.Message);
             }
 
             IList sessionsCopy = null;
@@ -772,7 +799,7 @@
                 }
                 catch(Exception ex)
                 {
-                    Tracer.Debug("Caught Exception While disposing of Sessions: " + ex);
+                    Tracer.DebugFormat("Caught Exception While disposing of Sessions: {0}", ex.Message);
                 }
             }
         }
@@ -784,7 +811,7 @@
             this.transportInterruptionProcessingComplete = new CountDownLatch(dispatchers.Count);
             if(Tracer.IsDebugEnabled)
             {
-                Tracer.Debug("transport interrupted, dispatchers: " + dispatchers.Count);
+                Tracer.DebugFormat("transport interrupted, dispatchers: {0}", dispatchers.Count);
             }
 
             foreach(Session session in this.sessions)
@@ -880,8 +907,8 @@
             {
                 if(!closed.Value && cdl.Remaining > 0)
                 {
-                    Tracer.Warn("dispatch paused, waiting for outstanding dispatch interruption " +
-                                "processing (" + cdl.Remaining + ") to complete..");
+                    Tracer.WarnFormat("dispatch paused, waiting for outstanding dispatch interruption " +
+								"processing ({0}) to complete..", cdl.Remaining);
                     cdl.await(TimeSpan.FromSeconds(10));
                 }
             }
@@ -895,5 +922,73 @@
                 cdl.countDown();
             }
         }
-    }
+
+		private NMSException CreateExceptionFromBrokerError(BrokerError brokerError)
+		{
+			String exceptionClassName = brokerError.ExceptionClass;
+
+			if(String.IsNullOrEmpty(exceptionClassName))
+			{
+				return new BrokerException(brokerError);
+			}
+
+			NMSException exception = null;
+			String message = brokerError.Message;
+
+			// We only create instances of exceptions from the NMS API
+			Assembly nmsAssembly = Assembly.GetAssembly(typeof(NMSException));
+
+			// First try and see if it's one we populated ourselves in which case
+			// it will have the correct namespace and exception name.
+			Type exceptionType = nmsAssembly.GetType(exceptionClassName, false, true);
+
+			// Exceptions from the broker don't have the same namespace, so we
+			// trim that and try using the NMS namespace to see if we can get an
+			// NMSException based version of the same type.  We have to convert
+			// the JMS prefixed exceptions to NMS also.
+			if(null == exceptionType)
+			{
+				if(exceptionClassName.StartsWith("java.lang.SecurityException"))
+				{
+					exceptionClassName = "Apache.NMS.InvalidClientIDException";
+				}
+				else if(!exceptionClassName.StartsWith("Apache.NMS"))
+				{
+					string transformClassName;
+
+					if(exceptionClassName.Contains("."))
+					{
+						int pos = exceptionClassName.LastIndexOf(".");
+						transformClassName = exceptionClassName.Substring(pos + 1).Replace("JMS", "NMS");
+					}
+					else
+					{
+						transformClassName = exceptionClassName;
+					}
+
+					exceptionClassName = "Apache.NMS." + transformClassName;
+				}
+
+				exceptionType = nmsAssembly.GetType(exceptionClassName, false, true);
+			}
+
+			if(exceptionType != null)
+			{
+				object[] args = null;
+				if(!String.IsNullOrEmpty(message))
+				{
+					args = new object[1];
+					args[0] = message;
+				}
+
+				exception = Activator.CreateInstance(exceptionType, args) as NMSException;
+			}
+			else
+			{
+				exception = new BrokerException(brokerError);
+			}
+
+			return exception;
+		}
+	}
 }
diff --git a/src/main/csharp/ConnectionFactory.cs b/src/main/csharp/ConnectionFactory.cs
index 608fa21..b2c3309 100755
--- a/src/main/csharp/ConnectionFactory.cs
+++ b/src/main/csharp/ConnectionFactory.cs
@@ -118,8 +118,6 @@
                     connection.DefaultClientId = this.clientId;
                 }
 
-                connection.ITransport.Start();
-
                 return connection;
             }
             catch(NMSException e)
diff --git a/src/main/csharp/State/ConnectionState.cs b/src/main/csharp/State/ConnectionState.cs
index c39d67f..8fdd42e 100644
--- a/src/main/csharp/State/ConnectionState.cs
+++ b/src/main/csharp/State/ConnectionState.cs
@@ -48,40 +48,52 @@
 		{
 			get
 			{
-				ConsumerState consumerState;
-				
-				if(consumers.TryGetValue(id, out consumerState))
-				{
-					return consumerState;
-				}
+				ConsumerState consumerState = null;
+
+				consumers.TryGetValue(id, out consumerState);
 				
 #if DEBUG
-				// Useful for dignosing missing consumer ids
-				string consumerList = string.Empty;
-				foreach(ConsumerId consumerId in consumers.Keys)
+				if(null == consumerState)
 				{
-					consumerList += consumerId.ToString() + "\n";
+					// Useful for dignosing missing consumer ids
+					string consumerList = string.Empty;
+					foreach(ConsumerId consumerId in consumers.Keys)
+					{
+						consumerList += consumerId.ToString() + "\n";
+					}
+
+					System.Diagnostics.Debug.Assert(false,
+						string.Format("Consumer '{0}' did not exist in the consumers collection.\n\nConsumers:-\n{1}", id, consumerList));
 				}
-				
-				System.Diagnostics.Debug.Assert(false,
-					string.Format("Consumer '{0}' did not exist in the consumers collection.\n\nConsumers:-\n{1}", id, consumerList));
 #endif
-				return null;
+				return consumerState;
 			}
 		}
 
 		public void addConsumer(ConsumerInfo info)
 		{
 			checkShutdown();
-			consumers.Add(info.ConsumerId, new ConsumerState(info));
+
+			ConsumerState consumerState = new ConsumerState(info);
+
+			if(consumers.ContainsKey(info.ConsumerId))
+			{
+				consumers[info.ConsumerId] = consumerState;
+			}
+			else
+			{
+				consumers.Add(info.ConsumerId, consumerState);
+			}
 		}
 
 		public ConsumerState removeConsumer(ConsumerId id)
 		{
 			ConsumerState ret = null;
-			
-			consumers.TryGetValue(id, out ret);
-			consumers.Remove(id);
+
+			if(consumers.TryGetValue(id, out ret))
+			{
+				consumers.Remove(id);
+			}
 			return ret;
 		}
 
diff --git a/src/main/csharp/State/SynchronizedObjects.cs b/src/main/csharp/State/SynchronizedObjects.cs
index 2795503..f082d5c 100644
--- a/src/main/csharp/State/SynchronizedObjects.cs
+++ b/src/main/csharp/State/SynchronizedObjects.cs
@@ -222,5 +222,21 @@
 				return _dictionary.Remove(v);
 			}
 		}
+
+		public bool ContainsKey(TKey k)
+		{
+			lock(((ICollection) _dictionary).SyncRoot)
+			{
+				return _dictionary.ContainsKey(k);
+			}
+		}
+
+		public bool ContainsValue(TValue v)
+		{
+			lock(((ICollection) _dictionary).SyncRoot)
+			{
+				return _dictionary.ContainsValue(v);
+			}
+		}
 	}
 }
diff --git a/src/main/csharp/Transport/InactivityMonitor.cs b/src/main/csharp/Transport/InactivityMonitor.cs
index 7a2071d..2bb7592 100644
--- a/src/main/csharp/Transport/InactivityMonitor.cs
+++ b/src/main/csharp/Transport/InactivityMonitor.cs
@@ -90,7 +90,7 @@
         {
             this.instanceId = ++id;
             this.localWireFormatInfo = wireFormat;
-            Tracer.Debug("Creating Inactivity Monitor: " + instanceId);
+            Tracer.DebugFormat("Creating Inactivity Monitor: {0}", instanceId);
         }
 
         ~InactivityMonitor()
@@ -280,7 +280,7 @@
         {
             if(failed.CompareAndSet(false, true) && !this.disposing)
             {
-                Tracer.Debug("Exception received in the Inactivity Monitor: " + command.ToString());
+                Tracer.DebugFormat("Exception received in the Inactivity Monitor: {0}", command.Message);
                 StopMonitorThreads();
                 base.OnException(sender, command);
             }
diff --git a/src/test/csharp/AMQNET383Test.cs b/src/test/csharp/AMQNET383Test.cs
index e93c801..93b5645 100644
--- a/src/test/csharp/AMQNET383Test.cs
+++ b/src/test/csharp/AMQNET383Test.cs
@@ -33,7 +33,7 @@
     public class NMSTestStability : NMSTestSupport
     {
         // TODO set proper configuration parameters
-        private const string destination = "test";
+        private const string destination = "TEST.Stability";
 
         private static int numberOfMessages = 0;
         private static IConnection producerConnection = null;
diff --git a/src/test/csharp/Commands/MessageTest.cs b/src/test/csharp/Commands/MessageTest.cs
index e6e6810..c142007 100755
--- a/src/test/csharp/Commands/MessageTest.cs
+++ b/src/test/csharp/Commands/MessageTest.cs
@@ -44,8 +44,8 @@
         {
             this.nmsMessageID = "testid";
             this.nmsCorrelationID = "testcorrelationid";
-            this.nmsDestination = new Topic("test.topic");
-            this.nmsReplyTo = new TempTopic("test.replyto.topic:001");
+            this.nmsDestination = new Topic("TEST.Message");
+			this.nmsReplyTo = new TempTopic("TEST.Message.replyto.topic:001");
             this.nmsDeliveryMode = MsgDeliveryMode.NonPersistent;
             this.nmsRedelivered = true;
             this.nmsType = "test type";
diff --git a/src/test/csharp/InvalidCredentialsTest.cs b/src/test/csharp/InvalidCredentialsTest.cs
new file mode 100644
index 0000000..9b2e3a9
--- /dev/null
+++ b/src/test/csharp/InvalidCredentialsTest.cs
@@ -0,0 +1,61 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one or more

+ * contributor license agreements.  See the NOTICE file distributed with

+ * this work for additional information regarding copyright ownership.

+ * The ASF licenses this file to You under the Apache License, Version 2.0

+ * (the "License"); you may not use this file except in compliance with

+ * the License.  You may obtain a copy of the License at

+ *

+ *     http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+using System;

+using Apache.NMS.Test;

+using NUnit.Framework;

+

+namespace Apache.NMS.Stomp.Test

+{

+	[TestFixture]

+	public class InvalidCredentialsTest : NMSTestSupport

+	{

+		[SetUp]

+		public override void SetUp()

+		{

+			base.SetUp();

+		}

+

+		[TearDown]

+		public override void TearDown()

+		{

+			base.TearDown();

+		}

+

+		// Maximum time to run is 20 seconds.

+		[Test] //, Timeout(20000)]

+		public void TestRestartInvalidCredentialsWithFailover()

+		{

+			// To run this test successfully, the broker must have secure login enabled.

+			// This test will attempt to login to the server using invalid credentials.

+			// It should not connect, and should not go into failover retry loop.

+			// It will then attempt to login with correct credentials, and it should be succcessful on second attempt.

+			Assert.IsTrue(CreateNMSFactory("InvalidCredentials-BogusUser"));

+			using(IConnection connection = CreateConnection())

+			{

+				Assert.Throws(typeof(InvalidClientIDException), () => { connection.Start(); }, "You may not have enabled credential login on the broker.  Credentials must be enabled for this test to pass.");

+			}

+

+			// Now connect with a valid user account.

+			Assert.IsTrue(CreateNMSFactory("InvalidCredentials-AuthenticUser"));

+			using(IConnection connection = CreateConnection())

+			{

+				Assert.DoesNotThrow(() => { connection.Start(); }, "You may not have set the InvalidCredentials-AuthenticUser node in the nmsprovider-test.config file.");

+			}

+		}

+	}

+}

diff --git a/src/test/csharp/NMSSessionRecoverTest.cs b/src/test/csharp/NMSSessionRecoverTest.cs
index 9d47826..b0beafc 100644
--- a/src/test/csharp/NMSSessionRecoverTest.cs
+++ b/src/test/csharp/NMSSessionRecoverTest.cs
@@ -57,42 +57,42 @@
         [Test]
         public void TestQueueSynchRecover()
         {
-            destination = new Queue("Queue-" + DateTime.Now.Ticks);
+            destination = new Queue("TEST.Queue-" + DateTime.Now.Ticks);
             DoTestSynchRecover();
         }
 
         [Test]
         public void TestQueueAsynchRecover()
         {
-            destination = new Queue("Queue-" + DateTime.Now.Ticks);
+			destination = new Queue("TEST.Queue-" + DateTime.Now.Ticks);
             DoTestAsynchRecover();
         }
 
         [Test]
         public void TestTopicSynchRecover()
         {
-            destination = new Topic("Topic-" + DateTime.Now.Ticks);
+			destination = new Topic("TEST.Topic-" + DateTime.Now.Ticks);
             DoTestSynchRecover();
         }
 
         [Test]
         public void TestTopicAsynchRecover()
         {
-            destination = new Topic("Topic-" + DateTime.Now.Ticks);
+			destination = new Topic("TEST.Topic-" + DateTime.Now.Ticks);
             DoTestAsynchRecover();
         }
 
         [Test]
         public void TestQueueAsynchRecoverWithAutoAck()
         {
-            destination = new Queue("Queue-" + DateTime.Now.Ticks);
+			destination = new Queue("TEST.Queue-" + DateTime.Now.Ticks);
             DoTestAsynchRecoverWithAutoAck();
         }
 
         [Test]
         public void TestTopicAsynchRecoverWithAutoAck()
         {
-            destination = new Topic("Topic-" + DateTime.Now.Ticks);
+			destination = new Topic("TEST.Topic-" + DateTime.Now.Ticks);
             DoTestAsynchRecoverWithAutoAck();
         }
 
diff --git a/src/test/csharp/StompQueueTransactionTest.cs b/src/test/csharp/StompQueueTransactionTest.cs
index dfc4b47..d9638fa 100755
--- a/src/test/csharp/StompQueueTransactionTest.cs
+++ b/src/test/csharp/StompQueueTransactionTest.cs
@@ -28,7 +28,7 @@
     public class StompQueueTransactionTest : StompTransactionTestSupport
     {
         public const String CLIENT_ID = "QueueTransactionTest";
-        public const String DESTINATION_NAME = "QueueTransactionTestDestination";
+		public const String DESTINATION_NAME = "TEST.QueueTransactionTest";
 
         protected override bool Topic
         {
diff --git a/src/test/csharp/StompRedeliveryPolicyTest.cs b/src/test/csharp/StompRedeliveryPolicyTest.cs
index 2f2005c..9ac065a 100755
--- a/src/test/csharp/StompRedeliveryPolicyTest.cs
+++ b/src/test/csharp/StompRedeliveryPolicyTest.cs
@@ -29,7 +29,7 @@
     [TestFixture]
     public class StompRedeliveryPolicyTest : NMSTestSupport
     {
-        private const string DESTINATION_NAME = "RedeliveryPolicyTestDest";
+		private const string DESTINATION_NAME = "TEST.RedeliveryPolicyTestDest";
 
         [Test]
         public void TestExponentialRedeliveryPolicyDelaysDeliveryOnRollback()
diff --git a/src/test/csharp/StompTopicTransactionTest.cs b/src/test/csharp/StompTopicTransactionTest.cs
index 2ebbab4..a146e5b 100755
--- a/src/test/csharp/StompTopicTransactionTest.cs
+++ b/src/test/csharp/StompTopicTransactionTest.cs
@@ -28,7 +28,7 @@
     public class StompTopicTransactionTest : StompTransactionTestSupport
     {
         public const String CLIENT_ID = "TopicTransactionTest";
-        public const String DESTINATION_NAME = "StompTopicTransactionTestDestination";
+		public const String DESTINATION_NAME = "TEST.StompTopicTransactionTestDestination";
         public const String SUBSCRIPTION_NAME = "TopicTransactionTest";
 
         protected override bool Topic
diff --git a/vs2008-stomp-test.csproj b/vs2008-stomp-test.csproj
index d72ea36..d93579e 100644
--- a/vs2008-stomp-test.csproj
+++ b/vs2008-stomp-test.csproj
@@ -55,17 +55,20 @@
     <NoWarn>3016</NoWarn>

   </PropertyGroup>

   <ItemGroup>

+    <Reference Include="Apache.NMS, Version=1.6.0.2963, Culture=neutral, PublicKeyToken=82756feee3957618, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.dll</HintPath>

+    </Reference>

+    <Reference Include="Apache.NMS.Test, Version=1.6.0.2963, Culture=neutral, PublicKeyToken=82756feee3957618, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.Test.dll</HintPath>

+    </Reference>

+    <Reference Include="nunit.framework, Version=2.5.8.10295, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>lib\NUnit\net-2.0\nunit.framework.dll</HintPath>

+    </Reference>

     <Reference Include="System" />

     <Reference Include="System.Xml" />

-    <Reference Include="nunit.framework">

-      <HintPath>lib\NUnit\mono-2.0\nunit.framework.dll</HintPath>

-    </Reference>

-    <Reference Include="Apache.NMS.Test">

-      <HintPath>lib\Apache.NMS\mono-2.0\Apache.NMS.Test.dll</HintPath>

-    </Reference>

-    <Reference Include="Apache.NMS">

-      <HintPath>lib\Apache.NMS\mono-2.0\Apache.NMS.dll</HintPath>

-    </Reference>

   </ItemGroup>

   <ItemGroup>

     <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">

@@ -100,6 +103,7 @@
   </ProjectExtensions>

   <ItemGroup>

     <Compile Include="src\test\csharp\AMQNET383Test.cs" />

+    <Compile Include="src\test\csharp\InvalidCredentialsTest.cs" />

     <Compile Include="src\test\csharp\StompHelperTest.cs" />

     <Compile Include="src\test\csharp\StompRedeliveryPolicyTest.cs" />

     <Compile Include="src\test\csharp\Threads\CompositeTaskRunnerTest.cs" />

diff --git a/vs2008-stomp.csproj b/vs2008-stomp.csproj
index 4f87e60..740707d 100644
--- a/vs2008-stomp.csproj
+++ b/vs2008-stomp.csproj
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>

+<?xml version="1.0" encoding="utf-8"?>

 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

   <PropertyGroup>

     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

-    <ProductVersion>9.0.21022</ProductVersion>

+    <ProductVersion>9.0.30729</ProductVersion>

     <SchemaVersion>2.0</SchemaVersion>

     <ProjectGuid>{AA51947C-1370-44DC-8692-1C8EFC5945F7}</ProjectGuid>

     <OutputType>Library</OutputType>

@@ -53,11 +53,12 @@
     <DefineConstants>TRACE;NET,NET_2_0</DefineConstants>

   </PropertyGroup>

   <ItemGroup>

+    <Reference Include="Apache.NMS, Version=1.6.0.2963, Culture=neutral, PublicKeyToken=82756feee3957618, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.dll</HintPath>

+    </Reference>

     <Reference Include="System" />

     <Reference Include="System.Xml" />

-    <Reference Include="Apache.NMS">

-      <HintPath>lib\Apache.NMS\mono-2.0\Apache.NMS.dll</HintPath>

-    </Reference>

   </ItemGroup>

   <ItemGroup>

     <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">