From 46dfcc30e0992afc49f75430c696ce70ebef4a8b Mon Sep 17 00:00:00 2001 From: Jeff Tong Date: Tue, 22 Aug 2017 15:21:14 -0700 Subject: [PATCH 1/7] Adding support of VB.NET projects. --- .../Infrastructure/ProjectFileFinder.cs | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/SlimJim/Infrastructure/ProjectFileFinder.cs b/src/SlimJim/Infrastructure/ProjectFileFinder.cs index 0fb0c1f..6ea4583 100644 --- a/src/SlimJim/Infrastructure/ProjectFileFinder.cs +++ b/src/SlimJim/Infrastructure/ProjectFileFinder.cs @@ -4,6 +4,7 @@ using System.Reflection; using System.Text.RegularExpressions; using log4net; +using System; namespace SlimJim.Infrastructure { @@ -12,7 +13,10 @@ public class ProjectFileFinder private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private readonly List ignorePatterns; - public ProjectFileFinder() + private string[] _supportedExtensions = new[] { ".csproj", ".vbproj" }; + + + public ProjectFileFinder() { ignorePatterns = new List(); IgnorePatterns(@"^\.svn$", @"^\.hg$", @"^\.git$", "^bin$", "^obj$", "ReSharper"); @@ -20,7 +24,7 @@ public ProjectFileFinder() public virtual List FindAllProjectFiles(string startPath) { - Log.InfoFormat("Searching for .csproj files at {0}", startPath); + Log.InfoFormat($"Searching for '{string.Join(",", _supportedExtensions)}' files at '{startPath}'."); var root = new DirectoryInfo(startPath); var projectFiles = GetProjectFiles(root); @@ -42,19 +46,19 @@ private List GetProjectFiles(DirectoryInfo directory) private void SearchDirectoryForProjects(DirectoryInfo directory, List files) { - FileInfo[] projects = directory - .GetFiles("*.csproj") - .Where(f => !PathIsIgnored(f.Name)) + FileInfo[] projects = directory + .GetFiles("*.*", SearchOption.AllDirectories) + .Where(f => _supportedExtensions.Contains(f.Extension, StringComparer.OrdinalIgnoreCase)) + .Where(f => !PathIsIgnored(f.Name)) .ToArray(); - - if (projects.Length > 0) + if (projects.Length > 0) { AddProjectFile(projects, files); } - else - { - RecurseChildDirectories(directory, files); - } + else + { + RecurseChildDirectories(directory, files); + } } private void RecurseChildDirectories(DirectoryInfo directory, List files) From 606f9c17bf4fe17ff025c08ccea478a1de7d5842 Mon Sep 17 00:00:00 2001 From: Jeff Tong Date: Tue, 22 Aug 2017 15:22:07 -0700 Subject: [PATCH 2/7] Taking into account that some Imports tags may not have Project as an attribute. --- src/SlimJim/Infrastructure/CsProjReader.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/SlimJim/Infrastructure/CsProjReader.cs b/src/SlimJim/Infrastructure/CsProjReader.cs index 274d702..dd57e57 100644 --- a/src/SlimJim/Infrastructure/CsProjReader.cs +++ b/src/SlimJim/Infrastructure/CsProjReader.cs @@ -96,8 +96,9 @@ private string ReadProjectGuid(XElement projectReference, FileInfo csprojFile) private bool FindImportedNuGetTargets(XElement xml) { - var importPaths = (from import in xml.DescendantsAndSelf(Ns + "Import") - select import.Attribute("Project").Value); + var importPaths = xml.DescendantsAndSelf(Ns + "Import") + .Where(i => i.Attribute("Project") != null) + .Select(i => i.Attribute("Project").Value); return importPaths.Any(p => p.EndsWith(@"\.nuget\nuget.targets", StringComparison.InvariantCultureIgnoreCase)); } From ef5a554f99e187c74b8e90837dbffe61e7119a1f Mon Sep 17 00:00:00 2001 From: Jeff Tong Date: Thu, 14 Sep 2017 17:06:31 -0700 Subject: [PATCH 3/7] Cleaning up namespaces. --- src/SlimJim.Test/SlnFileGeneratorTests.cs | 10 ++++++---- src/SlimJim.Test/TestBase.cs | 7 +------ src/SlimJim/CsProjConverter.cs | 9 +++++++-- src/SlimJim/HintPathConverter.cs | 6 +++--- src/SlimJim/Infrastructure/CsProjReader.cs | 8 +++++--- src/SlimJim/Infrastructure/ProjectFileFinder.cs | 8 +++++--- src/SlimJim/ReferenceConverter.cs | 15 +++++---------- src/SlimJim/SlimJimMain.cs | 10 ++++++---- src/SlimJim/SlnFileGenerator.cs | 8 +++++--- 9 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/SlimJim.Test/SlnFileGeneratorTests.cs b/src/SlimJim.Test/SlnFileGeneratorTests.cs index 9688f60..aadabc3 100644 --- a/src/SlimJim.Test/SlnFileGeneratorTests.cs +++ b/src/SlimJim.Test/SlnFileGeneratorTests.cs @@ -1,13 +1,15 @@ -using System; using System.Collections.Generic; + using NUnit.Framework; using Rhino.Mocks; -using SlimJim.Infrastructure; -using SlimJim.Model; + namespace SlimJim.Test { - [TestFixture] + using SlimJim.Infrastructure; + using SlimJim.Model; + + [TestFixture] public class SlnFileGeneratorTests : TestBase { private const string TargetProject = "MyProject"; diff --git a/src/SlimJim.Test/TestBase.cs b/src/SlimJim.Test/TestBase.cs index a7e9a8d..c633e24 100644 --- a/src/SlimJim.Test/TestBase.cs +++ b/src/SlimJim.Test/TestBase.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using NUnit.Framework; -using Rhino.Mocks; -using SlimJim.Infrastructure; -using SlimJim.Model; + using System.IO; namespace SlimJim.Test diff --git a/src/SlimJim/CsProjConverter.cs b/src/SlimJim/CsProjConverter.cs index 1a633c3..5109a4f 100644 --- a/src/SlimJim/CsProjConverter.cs +++ b/src/SlimJim/CsProjConverter.cs @@ -1,10 +1,15 @@ + using System.Xml; + using log4net; -using SlimJim.Model; + namespace SlimJim { - public abstract class CsProjConverter + using Model; + + + public abstract class CsProjConverter { protected const string MSBuildXmlNamespace = "http://schemas.microsoft.com/developer/msbuild/2003"; protected readonly ILog log; diff --git a/src/SlimJim/HintPathConverter.cs b/src/SlimJim/HintPathConverter.cs index 81b53d8..7330173 100644 --- a/src/SlimJim/HintPathConverter.cs +++ b/src/SlimJim/HintPathConverter.cs @@ -1,13 +1,13 @@ using System; using System.IO; using System.Linq; -using System.Xml; using System.Xml.XPath; -using SlimJim.Model; namespace SlimJim { - public class HintPathConverter : CsProjConverter + using Model; + + public class HintPathConverter : CsProjConverter { private const string NuGetPackagesDirectoryName = @"packages\"; private enum Mode { Convert, Restore } diff --git a/src/SlimJim/Infrastructure/CsProjReader.cs b/src/SlimJim/Infrastructure/CsProjReader.cs index dd57e57..46f4fb3 100644 --- a/src/SlimJim/Infrastructure/CsProjReader.cs +++ b/src/SlimJim/Infrastructure/CsProjReader.cs @@ -3,13 +3,15 @@ using System.IO; using System.Linq; using System.Xml.Linq; -using SlimJim.Model; -using log4net; using System.Reflection; +using log4net; + namespace SlimJim.Infrastructure { - public class CsProjReader + using Model; + + public class CsProjReader { private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly XNamespace Ns = "http://schemas.microsoft.com/developer/msbuild/2003"; diff --git a/src/SlimJim/Infrastructure/ProjectFileFinder.cs b/src/SlimJim/Infrastructure/ProjectFileFinder.cs index 6ea4583..ff7dc68 100644 --- a/src/SlimJim/Infrastructure/ProjectFileFinder.cs +++ b/src/SlimJim/Infrastructure/ProjectFileFinder.cs @@ -1,10 +1,12 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text.RegularExpressions; + using log4net; -using System; + namespace SlimJim.Infrastructure { @@ -29,7 +31,7 @@ public virtual List FindAllProjectFiles(string startPath) var root = new DirectoryInfo(startPath); var projectFiles = GetProjectFiles(root); - return projectFiles; + return projectFiles; } private List GetProjectFiles(DirectoryInfo directory) diff --git a/src/SlimJim/ReferenceConverter.cs b/src/SlimJim/ReferenceConverter.cs index 94e38e8..91401f9 100644 --- a/src/SlimJim/ReferenceConverter.cs +++ b/src/SlimJim/ReferenceConverter.cs @@ -2,12 +2,13 @@ using System.Linq; using System.Xml; using System.Xml.XPath; -using SlimJim.Model; -using log4net; + namespace SlimJim { - public class ReferenceConverter : CsProjConverter + using Model; + + public class ReferenceConverter : CsProjConverter { public void ConvertToProjectReferences(Sln solution) { @@ -83,11 +84,5 @@ private void ConvertToProjectReference(CsProj project, IEnumerable refer doc.Save(project.Path); } - private static XmlElement CreateElementWithInnerText(XmlDocument doc, string elementName, string text) - { - var e = doc.CreateElement(elementName, MSBuildXmlNamespace); - e.InnerText = text; - return e; - } - } + } } \ No newline at end of file diff --git a/src/SlimJim/SlimJimMain.cs b/src/SlimJim/SlimJimMain.cs index 69d0272..bc4f507 100644 --- a/src/SlimJim/SlimJimMain.cs +++ b/src/SlimJim/SlimJimMain.cs @@ -1,15 +1,17 @@ -using System.IO; +using System; +using System.IO; + using log4net; using log4net.Appender; using log4net.Config; using log4net.Core; using log4net.Layout; -using SlimJim.Infrastructure; -using System; namespace SlimJim { - public class SlimJimMain + using Infrastructure; + + public class SlimJimMain { public static void Main(string[] args) { diff --git a/src/SlimJim/SlnFileGenerator.cs b/src/SlimJim/SlnFileGenerator.cs index 2a83db2..781697f 100644 --- a/src/SlimJim/SlnFileGenerator.cs +++ b/src/SlimJim/SlnFileGenerator.cs @@ -2,13 +2,15 @@ using System.Collections.Generic; using System.IO; using System.Linq; + using log4net; -using SlimJim.Infrastructure; -using SlimJim.Model; namespace SlimJim { - public class SlnFileGenerator + using Infrastructure; + using Model; + + public class SlnFileGenerator { private static readonly ILog Log = LogManager.GetLogger(typeof(SlnFileGenerator)); public CsProjRepository ProjectRepository { get; set; } From 453ee24a511207fb85a6e195b933523fc56df2bf Mon Sep 17 00:00:00 2001 From: Jeff Tong Date: Thu, 14 Sep 2017 18:35:04 -0700 Subject: [PATCH 4/7] Adding support for VisualStudio 2017. Adding unit tests for VS2017 version option. Default to VS2017. Updating to nuget packages. --- .../Infrastructure/ArgsOptionsBuilderTests.cs | 43 ++++++++++++--- src/SlimJim.Test/Model/SlnTests.cs | 8 +-- src/SlimJim.Test/SlimJim.Test.csproj | 22 ++++---- src/SlimJim.Test/packages.config | 7 +-- .../Infrastructure/ArgsOptionsBuilder.cs | 2 +- src/SlimJim/Infrastructure/SlnFileRenderer.cs | 6 +-- src/SlimJim/Model/Sln.cs | 3 +- src/SlimJim/Model/SlnGenerationOptions.cs | 2 +- src/SlimJim/Model/VisualStudioVersion.cs | 53 +++++++++++++++---- src/SlimJim/SlimJim.csproj | 11 ++-- src/SlimJim/packages.config | 2 +- 11 files changed, 114 insertions(+), 45 deletions(-) diff --git a/src/SlimJim.Test/Infrastructure/ArgsOptionsBuilderTests.cs b/src/SlimJim.Test/Infrastructure/ArgsOptionsBuilderTests.cs index 7744234..dd94786 100644 --- a/src/SlimJim.Test/Infrastructure/ArgsOptionsBuilderTests.cs +++ b/src/SlimJim.Test/Infrastructure/ArgsOptionsBuilderTests.cs @@ -39,7 +39,6 @@ public void SpecifiedTargetProject() Assert.That(options.TargetProjectNames, Is.EqualTo(new[] { "MyProject" })); Assert.That(options.SolutionName, Is.EqualTo("MyProject")); - } [Test] @@ -48,7 +47,7 @@ public void SpecifiedMultipleTargetProjects() options = ArgsOptionsBuilder.BuildOptions(new[] { "--target", "MyProject", "--target", "YourProject" }, WorkingDirectory); Assert.That(options.TargetProjectNames, Is.EqualTo(new[] { "MyProject", "YourProject" })); - Assert.That(options.SolutionName, Is.StringMatching("MyProject_YourProject")); + Assert.That(options.SolutionName, Does.Match("MyProject_YourProject")); } [Test] @@ -86,15 +85,47 @@ public void SpecifiedVisualStudioVersion2010() Assert.That(options.VisualStudioVersion, Is.EqualTo(VisualStudioVersion.VS2010)); } - [Test] + [Test] + public void SpecifiedVisualStudioVersion2012() + { + options = ArgsOptionsBuilder.BuildOptions(new[] { "--version", "2012" }, WorkingDirectory); + + Assert.That(options.VisualStudioVersion, Is.EqualTo(VisualStudioVersion.VS2012)); + } + + [Test] + public void SpecifiedVisualStudioVersion2013() + { + options = ArgsOptionsBuilder.BuildOptions(new[] { "--version", "2013" }, WorkingDirectory); + + Assert.That(options.VisualStudioVersion, Is.EqualTo(VisualStudioVersion.VS2013)); + } + + [Test] + public void SpecifiedVisualStudioVersion2015() + { + options = ArgsOptionsBuilder.BuildOptions(new[] { "--version", "2015" }, WorkingDirectory); + + Assert.That(options.VisualStudioVersion, Is.EqualTo(VisualStudioVersion.VS2015)); + } + + [Test] + public void SpecifiedVisualStudioVersion2017() + { + options = ArgsOptionsBuilder.BuildOptions(new[] { "--version", "2017" }, WorkingDirectory); + + Assert.That(options.VisualStudioVersion, Is.EqualTo(VisualStudioVersion.VS2017)); + } + + [Test] public void InvalidVisualStudioVersionNumber() { options = ArgsOptionsBuilder.BuildOptions(new[] { "--version", "dumb" }, WorkingDirectory); - Assert.That(options.VisualStudioVersion, Is.EqualTo(VisualStudioVersion.VS2015)); + Assert.That(options.VisualStudioVersion, Is.EqualTo(VisualStudioVersion.VS2017)); } - [Test] + [Test] public void SpecifiedSolutionName() { options = ArgsOptionsBuilder.BuildOptions(new[] { "--name", "MyProjects" }, WorkingDirectory); @@ -106,14 +137,12 @@ public void SpecifiedSolutionName() public void UnspecifiedSolutionNameWithSingleTargetProject() { options = ArgsOptionsBuilder.BuildOptions(new[] { "--target", "MyProject" }, WorkingDirectory); - } [Test] public void UnspecifiedSolutionNameWithMultipleTargetProjectsUsesFirstProjectNamePlusSuffix() { options = ArgsOptionsBuilder.BuildOptions(new[] { "--target", "MyProject", "--target", "YourProject" }, WorkingDirectory); - } [Test] diff --git a/src/SlimJim.Test/Model/SlnTests.cs b/src/SlimJim.Test/Model/SlnTests.cs index fa96235..19bb330 100644 --- a/src/SlimJim.Test/Model/SlnTests.cs +++ b/src/SlimJim.Test/Model/SlnTests.cs @@ -9,16 +9,16 @@ namespace SlimJim.Test.Model public class SlnTests { [Test] - public void VersionDefaultsTo2010() + public void VersionDefaultsTo2017() { - Assert.That(new Sln("sln").Version, Is.EqualTo(VisualStudioVersion.VS2010)); + Assert.That(new Sln("sln").Version, Is.EqualTo(VisualStudioVersion.VS2017)); } [Test] public void GuidFormatIncludesCurlyBraces() { - Assert.That(new Sln("sample").Guid, Is.StringStarting("{")); - Assert.That(new Sln("sample").Guid, Is.StringEnding("}")); + Assert.That(new Sln("sample").Guid, Does.StartWith("{")); + Assert.That(new Sln("sample").Guid, Does.EndWith("}")); } [Test] diff --git a/src/SlimJim.Test/SlimJim.Test.csproj b/src/SlimJim.Test/SlimJim.Test.csproj index c63624d..b0f495f 100644 --- a/src/SlimJim.Test/SlimJim.Test.csproj +++ b/src/SlimJim.Test/SlimJim.Test.csproj @@ -31,14 +31,17 @@ 4 - - ..\packages\NUnit.2.5.9.10348\lib\nunit.framework.dll + + ..\packages\log4net.2.0.8\lib\net40-full\log4net.dll + True - - ..\packages\NUnit.2.5.9.10348\lib\nunit.mocks.dll + + ..\packages\NUnit.3.8.1\lib\net40\nunit.framework.dll + True - - ..\packages\RhinoMocks.3.6\lib\Rhino.Mocks.dll + + ..\packages\RhinoMocks.3.6.1\lib\net\Rhino.Mocks.dll + True @@ -47,9 +50,6 @@ - - ..\packages\log4net.2.0.3\lib\net40-full\log4net.dll - @@ -104,7 +104,9 @@ - + + +