private string ProjectName(string relativePath) { var match = regex.Match(relativePath); var directoryStructure = match.Groups[1].Value.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries); //var indexIfCSextension = fileName.LastIndexOf(@"\.cs", StringComparison.Ordinal); var projectName = ""; projectName = projectName + directoryStructure[0]; if (directoryStructure.Length == 1) { ; } else { projectName = projectName + "_" + directoryStructure[1]; } var mksProjectFile = new MksProjectFile(); mksProjectFile.Name = projectName; return(projectName); }
//we need to split Common into 2 pieces //the first truly has no dependencies to outher projects //the second may. private void SplitMksCommonIntoPieces() { var common = _mksProjectFiles.FirstOrDefault(c => c.Name == "Common"); var mksCommonBase = new MksProjectFile(); foreach (var item in common.ProjectItems) { if (item.References.Any(c => c.StartsWith("MKS")) == false) { mksCommonBase.ProjectItems.Add(item); } } foreach (var item in mksCommonBase.ProjectItems) { common.ProjectItems.Remove(item); } }
/// <summary> /// This will seed the project item with the base template and compile files from source /// </summary> /// <param name="projectName"></param> /// <param name="projectItems"></param> /// <param name="targetDir"></param> private MksProjectFile GenerateProjectFile(GenerateProjectFileOptions generateProjectFileOptions) { var projectSkeleton = generateProjectFileOptions.ProjectName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries); string projectName; if (projectSkeleton.Length == 2) { projectName = projectSkeleton[0]; } else { projectName = projectSkeleton.ConcatToString(""); } var subDir = projectSkeleton.ConcatToString("\\"); var fileName = generateProjectFileOptions.ProjectName.ConcatToString("") + ".csproj"; var fullNameSpace = generateProjectFileOptions.Prefix + (generateProjectFileOptions.Prefix.EndsWith(".") ? "" : ".") + projectSkeleton.ConcatToString("."); var newPath = Path.Combine(generateProjectFileOptions.TargetDir, subDir, fileName); var mksProjectFile = new MksProjectFile(); mksProjectFile.AbsoluteTargetPath = newPath; mksProjectFile.FileName = fileName; var guidElement = _guidMap.FindMandatoryElementWithAttributeName("Project", "Name", projectName); var guid = guidElement.Attribute("Guid").Value; mksProjectFile.Guid = guid; mksProjectFile.Name = projectName; mksProjectFile.NameSpace = fullNameSpace; mksProjectFile.ProjectItems = generateProjectFileOptions.ProjectItems.Select(c => new MksProjectItem(mksProjectFile, c, Path.Combine(_sourceDir, c.EvaluatedInclude), c.EvaluatedInclude, _targetDir)).ToArray(); var mksProjectFileXML = GenerateProjectXML(projectName, _guidMap, _template, fullNameSpace, mksProjectFile); mksProjectFile.XML = mksProjectFileXML; return(mksProjectFile); }
private MksProjectFile ProjectNameFromPath(string relativePathToSourceProj) { var match = regex.Match(relativePathToSourceProj); var directoryStructure = match.Groups[1].Value.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries); //var indexIfCSextension = fileName.LastIndexOf(@"\.cs", StringComparison.Ordinal); var projectName = ""; projectName = projectName + directoryStructure[0]; if (directoryStructure.Length == 1 || (directoryStructure.Length == 2 && directoryStructure[1].Contains(".cs"))) { projectName = projectName + "_" + FileWalker.CoreOrDupe(Path.Combine(_rootOfSourceDir, directoryStructure.ConcatToString("\\")), _rootOfSourceDir, _rootOfTargetDir); } else { projectName = projectName + "_" + directoryStructure[1]; } if (projectName.Contains('_') == false) { } var mksProjectFile = new MksProjectFile(); mksProjectFile.Name = projectName; mksProjectFile.RelativePath = _rootOfSource + projectName.Replace("_", "\\").Trim(); mksProjectFile.FileName = projectName.Replace("_", "").Trim() + ".csproj"; mksProjectFile.AbsoluteTargetPath = _rootOfTargetDir + projectName.Replace("_", "\\").Trim() + "\\" + mksProjectFile.FileName; return(mksProjectFile); }
/// <summary> /// This is called by GenerateProjectFile. It will use the path, xml and options passed int to create the phyisical file. /// </summary> /// <param name="guidMap"></param> /// <param name="template"></param> /// <param name="newPath"></param> /// <param name="fileName"></param> /// <param name="fullNameSpace"></param> private string GenerateProjectXML(string projectName, XElement guidMap, XDocument template, string nameSpace, MksProjectFile mksProjectFile) { var projFile = template.CopyDoc(); var guidElement = guidMap.FindMandatoryElementWithAttributeName("Project", "Name", projectName); var guid = guidElement.Attribute("Guid").Value; projFile.Root.Descendants(XName.Get("ProjectGuid", projFile.Root.GetDefaultNamespace().NamespaceName)).First().SetValue(guid); projFile.Root.Descendants(XName.Get("RootNamespace", projFile.Root.GetDefaultNamespace().NamespaceName)).First().SetValue(nameSpace); projFile.Root.Descendants(XName.Get("AssemblyName", projFile.Root.GetDefaultNamespace().NamespaceName)).First().SetValue(projectName); return(projFile.ToString()); }