diff --git a/README.md b/README.md
index d40630f..8b1e258 100644
--- a/README.md
+++ b/README.md
@@ -3,13 +3,16 @@ GitHubLink
![GitHubLink](design/logo/logo_64.png)
-GitHubLink let's users step through your code hosted on GitHub! **This makes symbol servers obsolete** which saves you both time with uploading source files with symbols and the user no longer has to specify custom symbol servers (such as symbolsource.org).
+GitHubLink let's users step through your code hosted on GitHub! **Help making .NET open source projects more accessible by enabling this for your .NET projects, it's just a single additional step in your build**. See the list of [projects using GitHubLink](#ProjectsUsingGitHubLink).
+
+GitHubLink makes symbol servers obsolete which saves you both time with uploading source files with symbols and the user no longer has to specify custom symbol servers (such as symbolsource.org).
![Stepping through external source code](doc/images/GitHubLink_example.gif)
-
-The idea is based on the [SourceLink project](https://github.com/ctaggart/SourceLink "SourceLink project"). However it requires FAKE and not everyone likes to write code in F#. GitHubLink is available as console application and can be references as assembly as well to be used in other .NET assemblies.
-The advantage of GitHubLink is that it is fully customized for GitHub. It also works with GitHub urls so it **does not require a local git repository to work**. This makes it perfectly usable in continuous integration servers such as [Continua CI](http://www.finalbuilder.com/Continua-CI "Continua CI").
+
+The idea is based on the SourceLink project. However it requires FAKE and not everyone likes to write code in F#. GitHubLink is available as console application and can be references as assembly as well to be used in other .NET assemblies.
+
+The advantage of GitHubLink is that it is fully customized for GitHub. It also works with GitHub urls so it **does not require a local git repository to work**. This makes it perfectly usable in continuous integration servers such as Continua CI.
Updating all the pdb files is very fast. A solution with over 85 projects will be handled in less than 30 seconds.
@@ -92,13 +95,13 @@ The releases will be available as separate executable download on the [releases
## Get it via Chocolatey ##
-If you want to install the tool on your (build) computer, the package is available via [Chocolatey](https://chocolatey.org/). To install, use the following command:
+If you want to install the tool on your (build) computer, the package is available via Chocolatey. To install, use the following command:
cinst GitHubLink
## Get it via NuGet ##
-If you want to reference the assembly to use it in code, the recommended way to get it is via [NuGet](http://www.nuget.org/).
+If you want to reference the assembly to use it in code, the recommended way to get it is via NuGet.
**Note that getting GitHubLink via NuGet will add it as a reference to the project**
@@ -106,10 +109,23 @@ If you want to reference the assembly to use it in code, the recommended way to
The SrcSrv tool (Srcsrv.dll) enables a client to retrieve the exact version of the source files that were used to build an application. Because the source code for a module can change between versions and over the course of years, it is important to look at the source code as it existed when the version of the module in question was built.
-For more information, see the [official documentation of SrcSrv](http://msdn.microsoft.com/en-us/library/windows/hardware/ff558791(v=vs.85).aspx).
+For more information, see the official documentation of SrcSrv.
GitHubLink creates a source index file and updates the PDB file so it will retrieve the files from the GitHub file handler.
+
+# Projects using GitHubLink #
+
+Below is a list of projects already using GitHubLink.
+
+- Catel
+- GitHubLink
+
+Are you using GitHubLink in your projects? Let us know and we will add your project to the list.
+
+*Note that you can also create a pull request on this document and add it yourself.*
+
+
# Icon #
Link by Dominic Whittle from The Noun Project
\ No newline at end of file
diff --git a/doc/history.txt b/doc/history.txt
index 6ddebba..444b52e 100644
--- a/doc/history.txt
+++ b/doc/history.txt
@@ -13,7 +13,7 @@ Project website: https://github.com/GeertvanHorrik/GitHubLink
**********************************************************
==================
-Version 1.1.0
+Version 1.2.0
==================
Release date:
@@ -22,7 +22,34 @@ Release date:
Added/fixed:
============
-xx
+(*) #7 Show relative paths to make to file names easier to read
+(x) #5 When an error occurs, the console application will no longer wait for a key input press to prevent
+ it from blocking a build
+
+Roadmap:
+========
+See https://github.com/GeertvanHorrik/GitHubLink
+
+Known issues:
+=============
+See https://github.com/GeertvanHorrik/GitHubLink
+
+**********************************************************
+
+
+==================
+Version 1.1.0
+==================
+
+Release date:
+=============
+2014/04/19
+
+Added/fixed:
+============
+(+) #1 Created Chocolatey package for easier deployment
+(+) #2 Added support for VB projects
+(+) #3 Created NuGet package for deployment when being referenced from code
Roadmap:
========
diff --git a/src/GitHubLink.Test/ContextFacts.cs b/src/GitHubLink.Test/ContextFacts.cs
index 52efffe..e70d2de 100644
--- a/src/GitHubLink.Test/ContextFacts.cs
+++ b/src/GitHubLink.Test/ContextFacts.cs
@@ -7,17 +7,14 @@
namespace GitHubLink.Test
{
using Catel;
+ using Catel.Test;
using Microsoft.VisualStudio.TestTools.UnitTesting;
public class ContextFacts
{
- #region Nested type: TheDefaultValues
-
[TestClass]
public class TheDefaultValues
{
- #region Methods
-
[TestMethod]
public void SetsRightDefaultValues()
{
@@ -26,10 +23,54 @@ public void SetsRightDefaultValues()
Assert.AreEqual("Release", context.ConfigurationName);
Assert.IsFalse(context.IsHelp);
}
-
- #endregion
}
- #endregion
+ [TestClass]
+ public class TheValidateContextMethod
+ {
+ [TestMethod]
+ public void ThrowsExceptionForMissingSolutionDirectory()
+ {
+ var context = new Context();
+
+ ExceptionTester.CallMethodAndExpectException(() => context.ValidateContext());
+ }
+
+ [TestMethod]
+ public void ThrowsExceptionForMissingConfigurationName()
+ {
+ var context = new Context
+ {
+ SolutionDirectory = @"c:\source\githublink",
+ ConfigurationName = string.Empty
+ };
+
+ ExceptionTester.CallMethodAndExpectException(() => context.ValidateContext());
+ }
+
+ [TestMethod]
+ public void ThrowsExceptionForMissingTargetUrl()
+ {
+ var context = new Context
+ {
+ SolutionDirectory = @"c:\source\githublink",
+ };
+
+ ExceptionTester.CallMethodAndExpectException(() => context.ValidateContext());
+ }
+
+ [TestMethod]
+ public void SucceedsForValidContext()
+ {
+ var context = new Context
+ {
+ SolutionDirectory = @"c:\source\githublink",
+ TargetUrl = "https://github.com/geertvanhorrik/githublink"
+ };
+
+ // should not throw
+ context.ValidateContext();
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/GitHubLink.Test/Extensions/ContextExtensionsFacts.cs b/src/GitHubLink.Test/Extensions/ContextExtensionsFacts.cs
new file mode 100644
index 0000000..ba9829e
--- /dev/null
+++ b/src/GitHubLink.Test/Extensions/ContextExtensionsFacts.cs
@@ -0,0 +1,47 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) 2012 - 2014 CatenaLogic. All rights reserved.
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace GitHubLink.Test.Extensions
+{
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+ public class ContextExtensionsFacts
+ {
+ #region Nested type: TheGetRelativePathMethod
+
+ [TestClass]
+ public class TheGetRelativePathMethod
+ {
+ [TestMethod]
+ public void ReturnsRelativePathWithDirectoryDownwards()
+ {
+ var context = new Context
+ {
+ SolutionDirectory = @"c:\source\githublink"
+ };
+
+ var relativePath = context.GetRelativePath(@"c:\source\githublink\src\subdir1\somefile.cs");
+
+ Assert.AreEqual(@"src\subdir1\somefile.cs", relativePath);
+ }
+
+ [TestMethod]
+ public void ReturnsRelativePathWithDirectoryUpwards()
+ {
+ var context = new Context
+ {
+ SolutionDirectory = @"c:\source\githublink"
+ };
+
+ var relativePath = context.GetRelativePath(@"c:\source\catel\src\subdir1\somefile.cs");
+
+ Assert.AreEqual(@"..\catel\src\subdir1\somefile.cs", relativePath);
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/GitHubLink.Test/Extensions/StringExtensionsFacts.github.cs b/src/GitHubLink.Test/Extensions/StringExtensionsFacts.github.cs
index 8266d06..11a9c99 100644
--- a/src/GitHubLink.Test/Extensions/StringExtensionsFacts.github.cs
+++ b/src/GitHubLink.Test/Extensions/StringExtensionsFacts.github.cs
@@ -16,7 +16,7 @@ public class TheGetGitHubCompanyNameMethod
[TestMethod]
public void ReturnsValidCompany()
{
- var company = GitHubLink.StringExtensions.GetGitHubCompanyName("https://github.com/GeertvanHorrik/GitHubLink");
+ var company = StringExtensions.GetGitHubCompanyName("https://github.com/GeertvanHorrik/GitHubLink");
Assert.AreEqual("GeertvanHorrik", company);
}
@@ -28,7 +28,7 @@ public class TheGetGitHubProjectNameMethod
[TestMethod]
public void ReturnsValidProject()
{
- var project = GitHubLink.StringExtensions.GetGitHubProjectName("https://github.com/GeertvanHorrik/GitHubLink");
+ var project = StringExtensions.GetGitHubProjectName("https://github.com/GeertvanHorrik/GitHubLink");
Assert.AreEqual("GitHubLink", project);
}
@@ -40,7 +40,7 @@ public class TheGetGitHubProjectUrlMethod
[TestMethod]
public void ReturnsValidUrl()
{
- var company = GitHubLink.StringExtensions.GetGitHubProjectUrl("https://github.com/GeertvanHorrik/GitHubLink");
+ var company = StringExtensions.GetGitHubProjectUrl("https://github.com/GeertvanHorrik/GitHubLink");
Assert.AreEqual("https://github.com/GeertvanHorrik/GitHubLink", company);
}
@@ -48,7 +48,7 @@ public void ReturnsValidUrl()
[TestMethod]
public void ReturnsValidUrlWhenGitIsAppended()
{
- var company = GitHubLink.StringExtensions.GetGitHubProjectUrl("https://github.com/GeertvanHorrik/GitHubLink.git");
+ var company = StringExtensions.GetGitHubProjectUrl("https://github.com/GeertvanHorrik/GitHubLink.git");
Assert.AreEqual("https://github.com/GeertvanHorrik/GitHubLink", company);
}
@@ -60,7 +60,7 @@ public class TheGetGitHubCompanyUrlMethod
[TestMethod]
public void ReturnsValidUrl()
{
- var company = GitHubLink.StringExtensions.GetGitHubCompanyUrl("https://github.com/GeertvanHorrik/GitHubLink");
+ var company = StringExtensions.GetGitHubCompanyUrl("https://github.com/GeertvanHorrik/GitHubLink");
Assert.AreEqual("https://github.com/GeertvanHorrik", company);
}
@@ -72,7 +72,7 @@ public class TheGetGitHubRawUrlMethod
[TestMethod]
public void ReturnsValidUrl()
{
- var company = GitHubLink.StringExtensions.GetGitHubRawUrl("https://github.com/GeertvanHorrik/GitHubLink");
+ var company = StringExtensions.GetGitHubRawUrl("https://github.com/GeertvanHorrik/GitHubLink");
Assert.AreEqual("https://raw.github.com/GeertvanHorrik/GitHubLink", company);
}
diff --git a/src/GitHubLink.Test/GitHubLink.Test.csproj b/src/GitHubLink.Test/GitHubLink.Test.csproj
index 2f46601..717827a 100644
--- a/src/GitHubLink.Test/GitHubLink.Test.csproj
+++ b/src/GitHubLink.Test/GitHubLink.Test.csproj
@@ -56,6 +56,7 @@
+
diff --git a/src/GitHubLink.sln b/src/GitHubLink.sln
index 36b61ef..f4b7fef 100644
--- a/src/GitHubLink.sln
+++ b/src/GitHubLink.sln
@@ -33,6 +33,45 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{D435DFD9-F
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHubLink.Test", "GitHubLink.Test\GitHubLink.Test.csproj", "{ED2B9579-59D2-40F2-BC5E-F4DC3DAB9A56}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{2A773B1D-106C-4583-8021-9AC0BB3E5408}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "design", "design", "{0A177E6C-1C04-416D-9473-82EE9A9ACFB4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FinalBuilder", "FinalBuilder", "{8EABCB0D-E792-4700-BDF9-E488CF2AB4A2}"
+ ProjectSection(SolutionItems) = preProject
+ ..\deployment\FinalBuilder\GitHubLink.CreatePackages.fbp7 = ..\deployment\FinalBuilder\GitHubLink.CreatePackages.fbp7
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Chocolatey", "Chocolatey", "{9765817D-03DD-4879-8A43-CB3086B6743F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "template", "template", "{BEEC31FD-7021-47BA-AB54-A5B4C7C23F7E}"
+ ProjectSection(SolutionItems) = preProject
+ ..\deployment\Chocolatey\template\GitHubLink.nuspec = ..\deployment\Chocolatey\template\GitHubLink.nuspec
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "template", "template", "{75559B70-907C-4375-A44B-8195B5027B3C}"
+ ProjectSection(SolutionItems) = preProject
+ ..\deployment\NuGet\template\GitHubLink.nuspec = ..\deployment\NuGet\template\GitHubLink.nuspec
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{5BC2D5A6-10B0-425B-BAB3-5AB3DFDC24B2}"
+ ProjectSection(SolutionItems) = preProject
+ ..\deployment\Chocolatey\template\tools\chocolateyInstall.ps1 = ..\deployment\Chocolatey\template\tools\chocolateyInstall.ps1
+ ..\deployment\Chocolatey\template\tools\chocolateyUninstall.ps1 = ..\deployment\Chocolatey\template\tools\chocolateyUninstall.ps1
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logo", "logo", "{CADD04D7-0CC0-48BB-B3EC-F82E34895982}"
+ ProjectSection(SolutionItems) = preProject
+ ..\design\logo\logo.ico = ..\design\logo\logo.ico
+ ..\design\logo\logo_1024.png = ..\design\logo\logo_1024.png
+ ..\design\logo\logo_128.png = ..\design\logo\logo_128.png
+ ..\design\logo\logo_16.png = ..\design\logo\logo_16.png
+ ..\design\logo\logo_256.png = ..\design\logo\logo_256.png
+ ..\design\logo\logo_32.png = ..\design\logo\logo_32.png
+ ..\design\logo\logo_512.png = ..\design\logo\logo_512.png
+ ..\design\logo\logo_64.png = ..\design\logo\logo_64.png
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -57,5 +96,12 @@ Global
{A5FCE4FA-083A-4814-B38C-2AED9C37647F} = {A6694C2C-1A8A-49F0-B404-1BBB4D081808}
{D435DFD9-F741-4FCA-A65A-28B7D251983D} = {A6694C2C-1A8A-49F0-B404-1BBB4D081808}
{ED2B9579-59D2-40F2-BC5E-F4DC3DAB9A56} = {D435DFD9-F741-4FCA-A65A-28B7D251983D}
+ {2A773B1D-106C-4583-8021-9AC0BB3E5408} = {99836492-466A-44E3-A92B-72CE3744F61C}
+ {8EABCB0D-E792-4700-BDF9-E488CF2AB4A2} = {99836492-466A-44E3-A92B-72CE3744F61C}
+ {9765817D-03DD-4879-8A43-CB3086B6743F} = {99836492-466A-44E3-A92B-72CE3744F61C}
+ {BEEC31FD-7021-47BA-AB54-A5B4C7C23F7E} = {9765817D-03DD-4879-8A43-CB3086B6743F}
+ {75559B70-907C-4375-A44B-8195B5027B3C} = {2A773B1D-106C-4583-8021-9AC0BB3E5408}
+ {5BC2D5A6-10B0-425B-BAB3-5AB3DFDC24B2} = {BEEC31FD-7021-47BA-AB54-A5B4C7C23F7E}
+ {CADD04D7-0CC0-48BB-B3EC-F82E34895982} = {0A177E6C-1C04-416D-9473-82EE9A9ACFB4}
EndGlobalSection
EndGlobal
diff --git a/src/GitHubLink/Context.cs b/src/GitHubLink/Context.cs
index f83c3da..f1e93e1 100644
--- a/src/GitHubLink/Context.cs
+++ b/src/GitHubLink/Context.cs
@@ -12,13 +12,18 @@ namespace GitHubLink
public class Context
{
- private static ILog Log = LogManager.GetCurrentClassLogger();
+ private static readonly ILog Log = LogManager.GetCurrentClassLogger();
- public Context()
+ private readonly Lazy _tempDirectory = new Lazy(() =>
{
- TempDirectory = Path.Combine(Path.GetTempPath(), "SourceLink", Guid.NewGuid().ToString());
- Directory.CreateDirectory(TempDirectory);
+ var tempDirectory = Path.Combine(Path.GetTempPath(), "SourceLink", Guid.NewGuid().ToString());
+ Directory.CreateDirectory(tempDirectory);
+
+ return tempDirectory;
+ });
+ public Context()
+ {
ConfigurationName = "Release";
}
@@ -27,7 +32,7 @@ public Context()
public string SolutionDirectory { get; set; }
public string ConfigurationName { get; set; }
- public string TempDirectory { get; private set; }
+ public string TempDirectory { get { return _tempDirectory.Value; } }
public string TargetUrl { get; set; }
public string TargetBranch { get; set; }
diff --git a/src/GitHubLink/Extensions/ContextExtensions.cs b/src/GitHubLink/Extensions/ContextExtensions.cs
new file mode 100644
index 0000000..fe76a9d
--- /dev/null
+++ b/src/GitHubLink/Extensions/ContextExtensions.cs
@@ -0,0 +1,21 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// Copyright (c) 2012 - 2014 CatenaLogic. All rights reserved.
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace GitHubLink
+{
+ using Catel;
+
+ public static class ContextExtensions
+ {
+ public static string GetRelativePath(this Context context, string fullPath)
+ {
+ Argument.IsNotNull(() => context);
+ Argument.IsNotNull(() => fullPath);
+
+ return Catel.IO.Path.GetRelativePath(fullPath, context.SolutionDirectory);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/GitHubLink/GitHubLink.csproj b/src/GitHubLink/GitHubLink.csproj
index 28007d7..2a9b561 100644
--- a/src/GitHubLink/GitHubLink.csproj
+++ b/src/GitHubLink/GitHubLink.csproj
@@ -72,6 +72,7 @@
Properties\SolutionAssemblyInfo.cs
+
diff --git a/src/GitHubLink/Linker.cs b/src/GitHubLink/Linker.cs
index d692b37..3dc4f3d 100644
--- a/src/GitHubLink/Linker.cs
+++ b/src/GitHubLink/Linker.cs
@@ -83,7 +83,7 @@ public static int Link(Context context)
foreach (var failedProject in failedProjects)
{
- Log.Info("* {0}", Path.GetFileName(failedProject));
+ Log.Info("* {0}", context.GetRelativePath(failedProject));
}
Log.Unindent();
@@ -112,19 +112,21 @@ public static int Link(Context context)
return exitCode ?? -1;
}
- public static bool LinkProject(Context context, string projectFile)
+ private static bool LinkProject(Context context, string projectFile)
{
Argument.IsNotNull(() => context);
Argument.IsNotNullOrWhitespace(() => projectFile);
- Log.Info("Handling project '{0}'", projectFile);
-
- Log.Indent();
+ string projectName = context.GetRelativePath(projectFile);
try
{
var project = ProjectHelper.LoadProject(projectFile, context.ConfigurationName);
- string projectName = project.GetProjectName();
+ projectName = project.GetProjectName();
+
+ Log.Info("Handling project '{0}'", projectName);
+
+ Log.Indent();
var compilables = project.GetCompilableItems().Select(x => x.GetFullFileName());
@@ -132,8 +134,7 @@ public static bool LinkProject(Context context, string projectFile)
var projectStcSrvFile = Path.GetFullPath(project.GetOutputSrcSrvFile());
if (!File.Exists(projectPdbFile))
{
- Log.Warning("No pdb file found for '{0}', is project built in release mode with pdb files enabled?", projectName);
- Log.Unindent();
+ Log.Warning("No pdb file found for '{0}', is project built in '{1}' mode with pdb files enabled?", projectName, context.ConfigurationName);
return false;
}
@@ -151,7 +152,8 @@ public static bool LinkProject(Context context, string projectFile)
var paths = new Dictionary();
foreach (var compilable in compilables)
{
- var relativePathForUrl = compilable.Replace(context.SolutionDirectory, string.Empty).Replace("\\", "/");
+ var relativePathForUrl = compilable.Replace(context.SolutionDirectory, string.Empty)
+ .Replace("\\", "/");
while (relativePathForUrl.StartsWith("/"))
{
relativePathForUrl = relativePathForUrl.Substring(1, relativePathForUrl.Length - 1);
@@ -162,17 +164,20 @@ public static bool LinkProject(Context context, string projectFile)
project.CreateSrcSrv(rawUrl, revision, paths);
- Log.Debug("Created source server link file, updating pdb file '{0}'", projectPdbFile);
+ Log.Debug("Created source server link file, updating pdb file '{0}'", context.GetRelativePath(projectPdbFile));
PdbStrHelper.Execute(projectPdbFile, projectStcSrvFile);
}
catch (Exception ex)
{
- Log.Warning(ex, "An error occurred while processing project '{0}'", projectFile);
+ Log.Warning(ex, "An error occurred while processing project '{0}'", projectName);
throw;
}
-
- Log.Unindent();
+ finally
+ {
+ Log.Unindent();
+ Log.Info(string.Empty);
+ }
return true;
}
diff --git a/src/GitHubLink/Program.cs b/src/GitHubLink/Program.cs
index d95fddf..5998916 100644
--- a/src/GitHubLink/Program.cs
+++ b/src/GitHubLink/Program.cs
@@ -18,6 +18,10 @@ internal class Program
private static int Main(string[] args)
{
+#if DEBUG
+ LogManager.AddDebugListener(true);
+#endif
+
var consoleLogListener = new OutputLogListener();
LogManager.AddListener(consoleLogListener);
@@ -49,7 +53,6 @@ private static int Main(string[] args)
}
catch (Exception)
{
- WaitForKeyPress();
return -1;
}
}
diff --git a/src/SolutionAssemblyInfo.cs b/src/SolutionAssemblyInfo.cs
index 998372e..3463fb4 100644
--- a/src/SolutionAssemblyInfo.cs
+++ b/src/SolutionAssemblyInfo.cs
@@ -32,7 +32,7 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0")]
-[assembly: AssemblyInformationalVersion("1.0, manual release in Visual Studio")]
+[assembly: AssemblyVersion("1.2.0")]
+[assembly: AssemblyInformationalVersion("1.2.0, manual released in Visual Studio")]
[assembly: CLSCompliant(false)]
\ No newline at end of file
diff --git a/tools/GitHubLink/GitHubLink.exe b/tools/GitHubLink/GitHubLink.exe
index d5a3002..2aa8afc 100644
Binary files a/tools/GitHubLink/GitHubLink.exe and b/tools/GitHubLink/GitHubLink.exe differ