Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 336b105

Browse files
committed
Handle error looking for init.ps1 in NuGet packages directory.
If there is an exception finding init.ps1 files when the solution is opened then the unhandled exception dialog is shown. This can happen if a NuGet package requires NuGet 3.0. This results in an NuGetVersionNotSatisfiedException being thrown. Now when this happens the error message is reported in the PowerShell console if it is open.
1 parent 9c3fd24 commit 336b105

File tree

4 files changed

+49
-2
lines changed

4 files changed

+49
-2
lines changed

src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsConsole.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717
// DEALINGS IN THE SOFTWARE.
1818

1919
using System;
20+
using ICSharpCode.Scripting;
2021

2122
namespace ICSharpCode.PackageManagement.Scripting
2223
{
2324
public class PackageInitializationScriptsConsole
2425
{
25-
IPackageManagementConsoleHost consoleHost;
26+
readonly IPackageManagementConsoleHost consoleHost;
2627

2728
public PackageInitializationScriptsConsole(
2829
IPackageManagementConsoleHost consoleHost)
@@ -36,5 +37,13 @@ public void ExecuteCommand(string command)
3637
consoleHost.ExecuteCommand(command);
3738
}
3839
}
40+
41+
public void WriteError(string message)
42+
{
43+
if (consoleHost.IsRunning) {
44+
consoleHost.ScriptingConsole.WriteLine(message, ScriptingStyle.Error);
45+
consoleHost.WritePrompt();
46+
}
47+
}
3948
}
4049
}

src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunPackageInitializationScriptsOnSolutionOpen.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ public RunPackageInitializationScriptsOnSolutionOpen(
4747

4848
void SolutionOpened(object sender, SolutionEventArgs e)
4949
{
50-
RunPackageInitializationScripts(e.Solution);
50+
try {
51+
RunPackageInitializationScripts(e.Solution);
52+
} catch (Exception ex) {
53+
scriptsConsole.WriteError(ex.Message);
54+
}
5155
}
5256

5357
void RunPackageInitializationScripts(ISolution solution)

src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,15 @@ public class FakePackageInitializationScriptsFactory : IPackageInitializationScr
2828
new FakePackageInitializationScripts();
2929

3030
public ISolution SolutionPassedToCreatePackageInitializationScripts;
31+
32+
public Exception ExceptionToThrow;
3133

3234
public IPackageInitializationScripts CreatePackageInitializationScripts(
3335
ISolution solution)
3436
{
37+
if (ExceptionToThrow != null)
38+
throw ExceptionToThrow;
39+
3540
SolutionPassedToCreatePackageInitializationScripts = solution;
3641
return FakePackageInitializationScripts;
3742
}

src/AddIns/Misc/PackageManagement/Test/Src/Scripting/RunPackageInitializationScriptsOnSolutionOpenTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System;
2020
using ICSharpCode.PackageManagement.Design;
2121
using ICSharpCode.PackageManagement.Scripting;
22+
using ICSharpCode.Scripting;
2223
using ICSharpCode.Scripting.Tests.Utils;
2324
using ICSharpCode.SharpDevelop.Project;
2425
using NUnit.Framework;
@@ -102,5 +103,33 @@ public void Instance_SolutionOpenedAndHasNoPackageInitializationScripts_InvokeIn
102103

103104
Assert.IsFalse(contains);
104105
}
106+
107+
[Test]
108+
public void Instance_ExceptionThrownByScriptsFactory_ErrorMessageLoggedToConsole()
109+
{
110+
CreateRunner();
111+
SolutionHasPackageInitializationScripts();
112+
fakeConsoleHost.IsRunning = true;
113+
fakeScriptsFactory.ExceptionToThrow = new Exception("Error");
114+
115+
OpenSolution();
116+
117+
Assert.AreEqual("Error", fakeScriptingConsole.TextPassedToWriteLine);
118+
Assert.AreEqual(ScriptingStyle.Error, fakeScriptingConsole.ScriptingStylePassedToWriteLine);
119+
Assert.IsTrue(fakeConsoleHost.IsWritePromptCalled);
120+
}
121+
122+
[Test]
123+
public void Instance_ExceptionThrownByScriptsFactoryButConsoleIsNotRunning_NoErrorMessageLoggedToConsole()
124+
{
125+
CreateRunner();
126+
SolutionHasPackageInitializationScripts();
127+
fakeConsoleHost.IsRunning = false;
128+
fakeScriptsFactory.ExceptionToThrow = new Exception("Error");
129+
130+
OpenSolution();
131+
132+
Assert.IsNull(fakeScriptingConsole.TextPassedToWriteLine);
133+
}
105134
}
106135
}

0 commit comments

Comments
 (0)