<NME> WorldModelTests.csproj
<BEF> ﻿<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>
    </ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{EF616C5D-B02E-4BF2-9AB5-81E6F479C342}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>WorldModelTests</RootNamespace>
    <AssemblyName>WorldModelTests</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Ciloci.Flee">
      <HintPath>..\Dependencies\Ciloci.Flee.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.VisualBasic" />
    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
    <Reference Include="Moq, Version=4.2.1409.1722, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
      <HintPath>..\packages\Moq.4.2.1409.1722\lib\net40\Moq.dll</HintPath>
      <Private>True</Private>
    </Reference>
    </CodeAnalysisDependentAssemblyPaths>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="ElementsTests.cs" />
    <Compile Include="FieldsTests.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Xml.Linq" />
  </ItemGroup>
  <ItemGroup>
    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
      <Visible>False</Visible>
    </CodeAnalysisDependentAssemblyPaths>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="CloneTests.cs" />
    <Compile Include="ElementsTests.cs" />
    <Compile Include="ExpressionTests.cs" />
    <Compile Include="FieldExtensionTests.cs" />
    <Compile Include="FieldsTests.cs" />
    <Compile Include="MultiScriptTests.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="QuestListTest.cs" />
    <Compile Include="SaveTests.cs" />
    <Compile Include="SwitchScriptConstructorTest.cs" />
    <Compile Include="ComplexTypesTests.cs" />
    <Compile Include="TemplateTests.cs" />
    <Compile Include="UtilityTests.cs" />
    <Compile Include="Walkthrough.cs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\IASL\IASL.csproj">
      <Project>{BE34CB28-317F-4732-AA32-9D715B4F2C7E}</Project>
      <Name>IASL</Name>
    </ProjectReference>
    <ProjectReference Include="..\Utility\Utility.csproj">
      <Project>{0E926905-F750-49F9-AEBD-CE14B2B231D8}</Project>
      <Name>Utility</Name>
    </ProjectReference>
    <ProjectReference Include="..\WorldModel\WorldModel\WorldModel.csproj">
      <Project>{F8CA1A78-02F7-405B-B223-3EFBEFBD8A88}</Project>
      <Name>WorldModel</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <None Include="packages.config" />
    <None Include="savetest.aslx">
      <SubType>Designer</SubType>
    </None>
    <None Include="walkthrough.aslx">
      <SubType>Designer</SubType>
    </None>
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>
<MSG> Adding ability to clone elements

git-svn-id: 53f3c0fc50e56599d49cd3470d1ba0222ad3846f@7932 4a90e977-6436-4932-9605-20e10c2b6fb3

<DFF> @@ -45,6 +45,7 @@
     </CodeAnalysisDependentAssemblyPaths>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="CloneTests.cs" />
     <Compile Include="ElementsTests.cs" />
     <Compile Include="FieldsTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />

{'commit': 'diff --git a/WorldModel/WorldModel/Element.cs b/WorldModel/WorldModel/Element.cs\nindex 642abcb0..e594341a 100644\n--- a/WorldModel/WorldModel/Element.cs\n+++ b/WorldModel/WorldModel/Element.cs\n@@ -116,16 +116,39 @@ namespace AxeSoftware.Quest\n         {\r\n             return s_typeStrings[type];\r\n         }\r\n-        \r\n+\r\n         internal Element(WorldModel worldModel)\r\n+            : this(worldModel, null)\r\n         {\r\n-            m_fields = new Fields(worldModel, this, false);\r\n-            m_metaFields = new Fields(worldModel, this, true);\r\n+        }\r\n+\r\n+        internal Element(WorldModel worldModel, Element element)\r\n+        {\r\n+            m_worldModel = worldModel;\r\n+\r\n+            if (element == null)\r\n+            {\r\n+                // New element\r\n+                m_fields = new Fields(worldModel, this, false);\r\n+                m_metaFields = new Fields(worldModel, this, true);\r\n+            }\r\n+            else\r\n+            {\r\n+                // Clone element\r\n+                m_fields = element.Fields.Clone(this);\r\n+                m_metaFields = element.MetaFields.Clone(this);\r\n+            }\r\n+\r\n             Fields.AttributeChanged += Fields_AttributeChanged;\r\n             Fields.AttributeChangedSilent += Fields_AttributeChangedSilent;\r\n             m_metaFields.AttributeChanged += MetaFields_AttributeChanged;\r\n             m_metaFields.AttributeChangedSilent += MetaFields_AttributeChangedSilent;\r\n-            m_worldModel = worldModel;\r\n+\r\n+        }\r\n+\r\n+        internal Element CreateClone()\r\n+        {\r\n+            return new Element(m_worldModel, this);\r\n         }\r\n \r\n         void Fields_AttributeChangedSilent(object sender, AttributeChangedEventArgs e)\r\n@@ -254,5 +277,12 @@ namespace AxeSoftware.Quest\n         {\r\n             m_initialised = true;\r\n         }\r\n+\r\n+        public Element Clone()\r\n+        {\r\n+            Element newElement = m_worldModel.GetElementFactory(m_elemType).CloneElement(this, Name + "2");\r\n+            \r\n+            return newElement;\r\n+        }\r\n     }\r\n }\r\ndiff --git a/WorldModel/WorldModel/Fields.cs b/WorldModel/WorldModel/Fields.cs\nindex cfda42fc..c8386a42 100644\n--- a/WorldModel/WorldModel/Fields.cs\n+++ b/WorldModel/WorldModel/Fields.cs\n@@ -124,6 +124,26 @@ namespace AxeSoftware.Quest\n             m_isMeta = isMeta;\r\n         }\r\n \r\n+        internal Fields Clone(Element newElement)\r\n+        {\r\n+            Fields clone = new Fields(m_worldModel, newElement, m_isMeta);\r\n+\r\n+            foreach (Element type in m_types.Reverse())\r\n+            {\r\n+                clone.m_types.Push(type);\r\n+            }\r\n+\r\n+            foreach (var attribute in m_attributes)\r\n+            {\r\n+                if (attribute.Key != "name")\r\n+                {\r\n+                    clone.Set(attribute.Key, attribute.Value, false, true);\r\n+                }\r\n+            }\r\n+\r\n+            return clone;\r\n+        }\r\n+\r\n         #region Indexed Properties\r\n         public string this[IField<string> field]\r\n         {\r\ndiff --git a/WorldModel/WorldModel/ObjectFactory.cs b/WorldModel/WorldModel/ObjectFactory.cs\nindex 3b15206a..4487ddfe 100644\n--- a/WorldModel/WorldModel/ObjectFactory.cs\n+++ b/WorldModel/WorldModel/ObjectFactory.cs\n@@ -14,6 +14,7 @@ namespace AxeSoftware.Quest\n         Element Create();\r\n         void DestroyElement(string elementName);\r\n         void DestroyElementSilent(string elementName);\r\n+        Element CloneElement(Element elementToClone, string newElementName);\r\n         WorldModel WorldModel { set; }\r\n     }\r\n \r\n@@ -33,14 +34,23 @@ namespace AxeSoftware.Quest\n             return CreateInternal(name, addToUndoLog, null);\r\n         }\r\n \r\n-        protected Element CreateInternal(string name, bool addToUndoLog, Action<Element> extraInitialisation, IList<string> initialTypes = null, IDictionary<string, object> initialFields = null)\r\n+        protected Element CreateInternal(string name, bool addToUndoLog, Action<Element> extraInitialisation, IList<string> initialTypes = null, IDictionary<string, object> initialFields = null, Element elementToClone = null)\r\n         {\r\n             if (addToUndoLog)\r\n             {\r\n                 WorldModel.UndoLogger.AddUndoAction(new CreateDestroyLogEntry(name, true, null, CreateElementType));\r\n             }\r\n \r\n-            Element newElement = new Element(WorldModel);\r\n+            Element newElement;\r\n+\r\n+            if (elementToClone == null)\r\n+            {\r\n+                newElement = new Element(WorldModel);\r\n+            }\r\n+            else\r\n+            {\r\n+                newElement = new Element(WorldModel, elementToClone);\r\n+            }\r\n \r\n             try\r\n             {\r\n@@ -88,6 +98,11 @@ namespace AxeSoftware.Quest\n             return Create(id);\r\n         }\r\n \r\n+        public Element CloneElement(Element elementToClone, string newElementName)\r\n+        {\r\n+            return CreateInternal(newElementName, true, null, elementToClone: elementToClone);\r\n+        }\r\n+\r\n         protected string FriendlyElementTypeName\r\n         {\r\n             get\r\ndiff --git a/WorldModelTests/CloneTests.cs b/WorldModelTests/CloneTests.cs\nnew file mode 100644\nindex 00000000..601e92eb\n--- /dev/null\n+++ b/WorldModelTests/CloneTests.cs\n@@ -0,0 +1,114 @@\n+\ufeffusing System;\r\n+using System.Collections.Generic;\r\n+using System.Linq;\r\n+using System.Text;\r\n+using Microsoft.VisualStudio.TestTools.UnitTesting;\r\n+using AxeSoftware.Quest;\r\n+\r\n+namespace WorldModelTests\r\n+{\r\n+    [TestClass]\r\n+    public class CloneTests\r\n+    {\r\n+        const string attributeName = "attribute";\r\n+        const string attributeValue = "attributevalue";\r\n+        const string listAttributeName = "listattribute";\r\n+        private List<string> listAttributeValue = new List<string> { "one", "two", "three" };\r\n+\r\n+        private WorldModel m_worldModel;\r\n+        private Element m_original;\r\n+\r\n+        [TestInitialize]\r\n+        public void Setup()\r\n+        {\r\n+            m_worldModel = new WorldModel();\r\n+\r\n+            m_original = m_worldModel.GetElementFactory(ElementType.Object).Create("original");\r\n+            m_original.Fields.Set(attributeName, attributeValue);\r\n+            m_original.Fields.Set(listAttributeName, new QuestList<string>(listAttributeValue));\r\n+            m_original.Fields.Resolve(null);\r\n+            Assert.AreEqual(attributeValue, m_original.Fields.GetString(attributeName));\r\n+            Assert.AreEqual(3, m_original.Fields.GetAsType<QuestList<string>>(listAttributeName).Count);\r\n+        }\r\n+\r\n+        [TestMethod]\r\n+        public void TestClone()\r\n+        {\r\n+            Element clone = m_original.Clone();\r\n+\r\n+            // Original and clone must be different objects\r\n+            Assert.AreNotSame(m_original, clone);\r\n+\r\n+            // Attribute values must be the same\r\n+            Assert.AreEqual(attributeValue, clone.Fields.GetString(attributeName));\r\n+            Assert.AreEqual(3, clone.Fields.GetAsType<QuestList<string>>(listAttributeName).Count);\r\n+\r\n+            // Names must not match\r\n+            Assert.AreNotEqual(m_original.Name, clone.Name);\r\n+\r\n+            // Both original and clone must be accessible by their names\r\n+            Assert.AreSame(m_original, m_worldModel.Elements.Get(m_original.Name));\r\n+            Assert.AreSame(clone, m_worldModel.Elements.Get(clone.Name));\r\n+        }\r\n+\r\n+        [TestMethod]\r\n+        public void TestUndoCloning()\r\n+        {\r\n+            int originalObjectCount = m_worldModel.Elements.Count(ElementType.Object);\r\n+\r\n+            m_worldModel.UndoLogger.StartTransaction("Create clone");\r\n+            Element clone = m_original.Clone();\r\n+            m_worldModel.UndoLogger.EndTransaction();\r\n+\r\n+            Assert.AreEqual(originalObjectCount + 1, m_worldModel.Elements.Count(ElementType.Object));\r\n+\r\n+            m_worldModel.UndoLogger.Undo();\r\n+\r\n+            Assert.AreEqual(originalObjectCount, m_worldModel.Elements.Count(ElementType.Object));\r\n+        }\r\n+\r\n+        [TestMethod]\r\n+        public void TestChangingClonedStringAttribute()\r\n+        {\r\n+            const string newAttributeValue = "newattributevalue";\r\n+\r\n+            Element clone = m_original.Clone();\r\n+\r\n+            m_worldModel.UndoLogger.StartTransaction("Change attribute");\r\n+            clone.Fields.Set(attributeName, newAttributeValue);\r\n+            m_worldModel.UndoLogger.EndTransaction();\r\n+\r\n+            // Cloned\'s field value is changed\r\n+            Assert.AreEqual(newAttributeValue, clone.Fields.GetString(attributeName));\r\n+\r\n+            // Original\'s field value is not changed\r\n+            Assert.AreEqual(attributeValue, m_original.Fields.GetString(attributeName));\r\n+\r\n+            m_worldModel.UndoLogger.Undo();\r\n+\r\n+            // Cloned\'s field value is back to original value\r\n+            Assert.AreEqual(attributeValue, clone.Fields.GetString(attributeName));\r\n+        }\r\n+\r\n+        [TestMethod]\r\n+        public void TestChangingClonedListAttribute()\r\n+        {\r\n+            Element clone = m_original.Clone();\r\n+\r\n+            m_worldModel.UndoLogger.StartTransaction("Change attribute");\r\n+            clone.Fields.GetAsType<QuestList<string>>(listAttributeName).Add("newvalue");\r\n+            m_worldModel.UndoLogger.EndTransaction();\r\n+\r\n+            // Cloned\'s field value is changed\r\n+            Assert.AreEqual(4, clone.Fields.GetAsType<QuestList<string>>(listAttributeName).Count);\r\n+\r\n+            // Original\'s field value is not changed\r\n+            Assert.AreEqual(3, m_original.Fields.GetAsType<QuestList<string>>(listAttributeName).Count);\r\n+\r\n+            m_worldModel.UndoLogger.Undo();\r\n+\r\n+            // Cloned\'s field value is back to original value\r\n+            Assert.AreEqual(3, clone.Fields.GetAsType<QuestList<string>>(listAttributeName).Count);\r\n+        }\r\n+    }\r\n+}\r\ndiff --git a/WorldModelTests/WorldModelTests.csproj b/WorldModelTests/WorldModelTests.csproj\nindex 9b7b0110..1185a91e 100644\n--- a/WorldModelTests/WorldModelTests.csproj\n+++ b/WorldModelTests/WorldModelTests.csproj\n@@ -45,6 +45,7 @@\n     </CodeAnalysisDependentAssemblyPaths>\r\n   </ItemGroup>\r\n   <ItemGroup>\r\n+    <Compile Include="CloneTests.cs" />\r\n     <Compile Include="ElementsTests.cs" />\r\n     <Compile Include="FieldsTests.cs" />\r\n     <Compile Include="Properties\\AssemblyInfo.cs" />\r\n', 'commit_subject': 'Adding ability to clone elements', 'repo_name': 'textadventures/quest', 'committer': {'name': 'Alex Warren', 'email': '60c6d277a8bd81de7fdde19201bf9c58a3df08f4@axeuk.com', 'time_sec': '1305806223', 'tz_offset': '0', 'date': {'seconds': '1305806223'}}, 'commit_tree': 'a57ea29695b443f7a0561fafdd12333b299815d5', 'commit_message': 'Adding ability to clone elements\n\ngit-svn-id: 53f3c0fc50e56599d49cd3470d1ba0222ad3846f@7932 4a90e977-6436-4932-9605-20e10c2b6fb3\n', 'language_name': 'HTML', 'license': 'mit', 'hunks': '@@ -45,6 +45,7 @@\n     </CodeAnalysisDependentAssemblyPaths>\r\n   </ItemGroup>\r\n   <ItemGroup>\r\n+    <Compile Include="CloneTests.cs" />\r\n     <Compile Include="ElementsTests.cs" />\r\n     <Compile Include="FieldsTests.cs" />\r\n     <Compile Include="Properties\\AssemblyInfo.cs" />\r\n', 'addition_count': 1, 'deletion_count': 0, 'src_file': 'a/WorldModelTests/WorldModelTests.csproj', 'tgt_file': 'b/WorldModelTests/WorldModelTests.csproj', 'file_extension': '.csproj', 'before_file': '\ufeff<?xml version="1.0" encoding="utf-8"?>\n<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n  <PropertyGroup>\n    <Configuration Condition=" \'$(Configuration)\' == \'\' ">Debug</Configuration>\n    <Platform Condition=" \'$(Platform)\' == \'\' ">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{EF616C5D-B02E-4BF2-9AB5-81E6F479C342}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>WorldModelTests</RootNamespace>\n    <AssemblyName>WorldModelTests</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=" \'$(Configuration)|$(Platform)\' == \'Debug|AnyCPU\' ">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=" \'$(Configuration)|$(Platform)\' == \'Release|AnyCPU\' ">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include="Ciloci.Flee">\n      <HintPath>..\\Dependencies\\Ciloci.Flee.dll</HintPath>\n    </Reference>\n    <Reference Include="Microsoft.VisualBasic" />\n    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />\n    <Reference Include="Moq, Version=4.2.1409.1722, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">\n      <HintPath>..\\packages\\Moq.4.2.1409.1722\\lib\\net40\\Moq.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    </CodeAnalysisDependentAssemblyPaths>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include="ElementsTests.cs" />\r\n    <Compile Include="FieldsTests.cs" />\r\n    <Compile Include="Properties\\AssemblyInfo.cs" />\r\n    <Reference Include="System.Drawing" />\n    <Reference Include="System.Windows.Forms" />\n    <Reference Include="System.Xml" />\n    <Reference Include="System.Xml.Linq" />\n  </ItemGroup>\n  <ItemGroup>\n    <CodeAnalysisDependentAssemblyPaths Condition=" \'$(VS100COMNTOOLS)\' != \'\' " Include="$(VS100COMNTOOLS)..\\IDE\\PrivateAssemblies">\n      <Visible>False</Visible>\n    </CodeAnalysisDependentAssemblyPaths>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include="CloneTests.cs" />\n    <Compile Include="ElementsTests.cs" />\n    <Compile Include="ExpressionTests.cs" />\n    <Compile Include="FieldExtensionTests.cs" />\n    <Compile Include="FieldsTests.cs" />\n    <Compile Include="MultiScriptTests.cs" />\n    <Compile Include="Properties\\AssemblyInfo.cs" />\n    <Compile Include="QuestListTest.cs" />\n    <Compile Include="SaveTests.cs" />\n    <Compile Include="SwitchScriptConstructorTest.cs" />\n    <Compile Include="ComplexTypesTests.cs" />\n    <Compile Include="TemplateTests.cs" />\n    <Compile Include="UtilityTests.cs" />\n    <Compile Include="Walkthrough.cs" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include="..\\IASL\\IASL.csproj">\n      <Project>{BE34CB28-317F-4732-AA32-9D715B4F2C7E}</Project>\n      <Name>IASL</Name>\n    </ProjectReference>\n    <ProjectReference Include="..\\Utility\\Utility.csproj">\n      <Project>{0E926905-F750-49F9-AEBD-CE14B2B231D8}</Project>\n      <Name>Utility</Name>\n    </ProjectReference>\n    <ProjectReference Include="..\\WorldModel\\WorldModel\\WorldModel.csproj">\n      <Project>{F8CA1A78-02F7-405B-B223-3EFBEFBD8A88}</Project>\n      <Name>WorldModel</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include="packages.config" />\n    <None Include="savetest.aslx">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include="walkthrough.aslx">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <Import Project="$(MSBuildBinPath)\\Microsoft.CSharp.targets" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name="BeforeBuild">\n  </Target>\n  <Target Name="AfterBuild">\n  </Target>\n  -->\n</Project>', 'message': 'Adding ability to clone elements\n\ngit-svn-id: 53f3c0fc50e56599d49cd3470d1ba0222ad3846f@7932 4a90e977-6436-4932-9605-20e10c2b6fb3\n', 'author_name': 'Alex Warren', 'lang': 'csproj'}