using System; using UnityEditor; using UnityEngine; using System.Xml; using System.IO; using System.Text; namespace ET { public class OnGenerateCSProjectProcessor: AssetPostprocessor { public static string OnGeneratedCSProject(string path, string content) { if (path.EndsWith("Unity.Core.csproj")) { return GenerateCustomProject(path, content); } if (Define.EnableCodes) { if (path.EndsWith("Unity.Hotfix.Codes.csproj")) { content = GenerateCustomProject(path, content); } if (path.EndsWith("Unity.Model.Codes.csproj")) { content = GenerateCustomProject(path, content); } if (path.EndsWith("Unity.HotfixView.Codes.csproj")) { content = GenerateCustomProject(path, content); } if (path.EndsWith("Unity.ModelView.Codes.csproj")) { content = GenerateCustomProject(path, content); } } else { if (path.EndsWith("Unity.Hotfix.csproj")) { content = content.Replace("", string.Empty); content = content.Replace("", string.Empty); content = GenerateCustomProject(path, content, @"Assets\Scripts\Codes\Hotfix\**\*.cs %(RecursiveDir)%(FileName)%(Extension)"); } if (path.EndsWith("Unity.HotfixView.csproj")) { content = content.Replace("", string.Empty); content = content.Replace("", string.Empty); content = GenerateCustomProject(path, content, @"Assets\Scripts\Codes\HotfixView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)"); } if (path.EndsWith("Unity.Model.csproj")) { content = content.Replace("", string.Empty); content = content.Replace("", string.Empty); content = GenerateCustomProject(path, content, @"Assets\Scripts\Codes\Model\Server\**\*.cs Server\%(RecursiveDir)%(FileName)%(Extension)", @"Assets\Scripts\Codes\Model\Client\**\*.cs Client\%(RecursiveDir)%(FileName)%(Extension)", @"Assets\Scripts\Codes\Model\Share\**\*.cs Share\%(RecursiveDir)%(FileName)%(Extension)", @"Assets\Scripts\Codes\Model\Generate\ClientServer\**\*.cs Generate\%(RecursiveDir)%(FileName)%(Extension)"); } if (path.EndsWith("Unity.ModelView.csproj")) { content = content.Replace("", string.Empty); content = content.Replace("", string.Empty); content = GenerateCustomProject(path, content, @"Assets\Scripts\Codes\ModelView\**\*.cs %(RecursiveDir)%(FileName)%(Extension)"); } } return content; } private static string GenerateCustomProject(string path, string content, params string[] links) { XmlDocument doc = new XmlDocument(); doc.LoadXml(content); var newDoc = doc.Clone() as XmlDocument; var rootNode = newDoc.GetElementsByTagName("Project")[0]; XmlElement itemGroup = newDoc.CreateElement("ItemGroup", newDoc.DocumentElement.NamespaceURI); foreach (var s in links) { string[] ss = s.Split(' '); string p = ss[0]; string linkStr = ss[1]; XmlElement compile = newDoc.CreateElement("Compile", newDoc.DocumentElement.NamespaceURI); XmlElement link = newDoc.CreateElement("Link", newDoc.DocumentElement.NamespaceURI); link.InnerText = linkStr; //compile.AppendChild(link); compile.SetAttribute("Include", p); itemGroup.AppendChild(compile); } var projectReference = newDoc.CreateElement("ProjectReference", newDoc.DocumentElement.NamespaceURI); projectReference.SetAttribute("Include", @"..\Share\Analyzer\Share.Analyzer.csproj"); projectReference.SetAttribute("OutputItemType", @"Analyzer"); projectReference.SetAttribute("ReferenceOutputAssembly", @"false"); var project = newDoc.CreateElement("Project", newDoc.DocumentElement.NamespaceURI); project.InnerText = @"{d1f2986b-b296-4a2d-8f12-be9f470014c3}"; projectReference.AppendChild(project); var name = newDoc.CreateElement("Name", newDoc.DocumentElement.NamespaceURI); name.InnerText = "Analyzer"; projectReference.AppendChild(project); itemGroup.AppendChild(projectReference); rootNode.AppendChild(itemGroup); using (StringWriter sw = new StringWriter()) { using (XmlTextWriter tx = new XmlTextWriter(sw)) { tx.Formatting = Formatting.Indented; newDoc.WriteTo(tx); tx.Flush(); return sw.GetStringBuilder().ToString(); } } } } }