Example #1
0
        /// <summary>
        /// Drafts the two typical lines found, per project, in a .sln file.
        /// </summary>
        /// <param name="projFile">
        /// If the projFile has its <see cref="ProjFile.GetMainProjectTypeGuid()"/> property assigned then
        /// that value is used; elsewise, a match is looked up in <see cref="VisualStudioProjTypeGuids"/>
        /// </param>
        /// <param name="slnDir"></param>
        /// <returns></returns>
        public static string GetSlnProjectEntry(ProjFile projFile, string slnDir)
        {
            var projExt = Path.GetExtension(projFile.FileName);

            if (string.IsNullOrWhiteSpace(projExt))
            {
                return(null);
            }

            var projGuid = projFile.ProjectGuid;

            if (string.IsNullOrWhiteSpace(projGuid))
            {
                return(null);
            }

            if (string.IsNullOrWhiteSpace(projFile.GetMainProjectTypeGuid()) && !VisualStudioProjTypeGuids.ContainsKey(projExt))
            {
                throw new NotImplementedException("There is no VS Project Type Guid defined for " +
                                                  $"a '{projExt}' file type.  Assign the ProjFile's " +
                                                  "VsProjectTypeGuids directly.");
            }

            var projTypeGuid = projFile.GetMainProjectTypeGuid() ?? VisualStudioProjTypeGuids[projExt];

            var projName = Path.GetFileNameWithoutExtension(projFile.FileName);

            var projFileFullName = Path.Combine(projFile.DirectoryName, projFile.FileName);
            var projRelFullName  = projFileFullName;

            NfPath.TryGetRelPath(slnDir, ref projRelFullName);

            var projBldr = new StringBuilder();

            projBldr.AppendLine(
                $"Project(\"{projTypeGuid}\") = \"{projName}\", \"{projRelFullName}\", \"{projGuid}\"");
            projBldr.AppendLine("EndProject");
            return(projBldr.ToString());
        }