protected virtual void GenerateCode(CodeCompileUnit unit, CodeDomProvider provider,
                                            CodeGenerationResults content, string itemPath)
        {
            CodeCompileUnit cloneUnit = CloneUnit(unit);

            foreach (CodeNamespace ns in unit.Namespaces)
            {
                cloneUnit.Namespaces.Clear();
                cloneUnit.Namespaces.Add(CloneNamespace(ns));
                foreach (CodeTypeDeclaration codeType in ns.Types)
                {
                    string file = Path.Combine(Path.GetDirectoryName(itemPath),
                                               Path.ChangeExtension(codeType.Name, Path.GetExtension(itemPath)));
                    if (!content.ContainsFile(file))
                    {
                        cloneUnit.Namespaces[0].Types.Clear();
                        cloneUnit.Namespaces[0].Types.Add(codeType);
                        using (StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture))
                        {
                            provider.GenerateCodeFromCompileUnit(cloneUnit, stringWriter, new CodeGeneratorOptions());
                            content.Add(file, stringWriter.ToString());
                        }
                    }
                }
            }
        }
		protected virtual void GenerateCode(CodeCompileUnit unit, CodeDomProvider provider, 
			CodeGenerationResults content, string itemPath)
		{
			CodeCompileUnit cloneUnit = CloneUnit(unit);

			foreach (CodeNamespace ns in unit.Namespaces)
			{
				cloneUnit.Namespaces.Clear();
				cloneUnit.Namespaces.Add(CloneNamespace(ns));
				foreach (CodeTypeDeclaration codeType in ns.Types)
				{
					string file = Path.Combine(Path.GetDirectoryName(itemPath),
						Path.ChangeExtension(codeType.Name, Path.GetExtension(itemPath)));
					if (!content.ContainsFile(file))
					{
						cloneUnit.Namespaces[0].Types.Clear();
						cloneUnit.Namespaces[0].Types.Add(codeType);
						using (StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture))
						{
							provider.GenerateCodeFromCompileUnit(cloneUnit, stringWriter, new CodeGeneratorOptions());
							content.Add(file, stringWriter.ToString());
						}
					}
				}
			}
		}