diff --git a/VsDingExtensionProject/Guids.cs b/VsDingExtensionProject/Guids.cs
index 90438f2..6362409 100644
--- a/VsDingExtensionProject/Guids.cs
+++ b/VsDingExtensionProject/Guids.cs
@@ -1,8 +1,9 @@
// Guids.cs
// MUST match guids.h
+
using System;
-namespace VitaliiGanzha.VsDingExtensionProject
+namespace VitaliiGanzha.VsDingExtension
{
static class GuidList
{
diff --git a/VsDingExtensionProject/Properties/AssemblyInfo.cs b/VsDingExtensionProject/Properties/AssemblyInfo.cs
index 92e3d86..d241dbb 100644
--- a/VsDingExtensionProject/Properties/AssemblyInfo.cs
+++ b/VsDingExtensionProject/Properties/AssemblyInfo.cs
@@ -29,8 +29,6 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
-
+[assembly: AssemblyVersion("1.0.*")]
diff --git a/VsDingExtensionProject/Resources.Designer.cs b/VsDingExtensionProject/Resources.Designer.cs
index dc9f7dc..d98eab0 100644
--- a/VsDingExtensionProject/Resources.Designer.cs
+++ b/VsDingExtensionProject/Resources.Designer.cs
@@ -8,7 +8,7 @@
//
//------------------------------------------------------------------------------
-namespace VitaliiGanzha.VsDingExtensionProject {
+namespace VitaliiGanzha.VsDingExtension {
using System;
@@ -39,7 +39,7 @@ namespace VitaliiGanzha.VsDingExtensionProject {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VitaliiGanzha.VsDingExtensionProject.Resources", typeof(Resources).Assembly);
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VitaliiGanzha.VsDingExtension.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
@@ -60,6 +60,24 @@ namespace VitaliiGanzha.VsDingExtensionProject {
}
}
+ ///
+ /// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream.
+ ///
+ internal static System.IO.UnmanagedMemoryStream build {
+ get {
+ return ResourceManager.GetStream("build", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream.
+ ///
+ internal static System.IO.UnmanagedMemoryStream debug {
+ get {
+ return ResourceManager.GetStream("debug", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream.
///
diff --git a/VsDingExtensionProject/Resources.resx b/VsDingExtensionProject/Resources.resx
index 4b7f1b3..4a8cf71 100644
--- a/VsDingExtensionProject/Resources.resx
+++ b/VsDingExtensionProject/Resources.resx
@@ -118,6 +118,12 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Resources\build.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Resources\debug.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
Resources\ding.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
diff --git a/VsDingExtensionProject/Resources/build.wav b/VsDingExtensionProject/Resources/build.wav
new file mode 100644
index 0000000..f837519
Binary files /dev/null and b/VsDingExtensionProject/Resources/build.wav differ
diff --git a/VsDingExtensionProject/Resources/debug.wav b/VsDingExtensionProject/Resources/debug.wav
new file mode 100644
index 0000000..ed6ed85
Binary files /dev/null and b/VsDingExtensionProject/Resources/debug.wav differ
diff --git a/VsDingExtensionProject/Resources/speaker.ico b/VsDingExtensionProject/Resources/speaker.ico
new file mode 100644
index 0000000..f7a3433
Binary files /dev/null and b/VsDingExtensionProject/Resources/speaker.ico differ
diff --git a/VsDingExtensionProject/VsDingExtensionProject.csproj b/VsDingExtensionProject/VsDingExtensionProject.csproj
index f7c63b3..87e8733 100644
--- a/VsDingExtensionProject/VsDingExtensionProject.csproj
+++ b/VsDingExtensionProject/VsDingExtensionProject.csproj
@@ -4,6 +4,10 @@
12.0
12.0
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+
+ speaker.ico
@@ -14,8 +18,8 @@
{82b43b9b-a64c-4715-b499-d71e9ca2bd60};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
Library
Properties
- VitaliiGanzha.VsDingExtensionProject
- VsDingExtensionProject
+ VitaliiGanzha.VsDingExtension
+ VsDingExtension
True
Key.snk
v4.5
@@ -28,6 +32,7 @@
DEBUG;TRACE
prompt
4
+ false
pdbonly
@@ -37,6 +42,7 @@
prompt
4
true
+ false
@@ -172,7 +178,13 @@
+
+ Always
+ true
+
+
+
diff --git a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs
index 5dad53f..510fd5d 100644
--- a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs
+++ b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs
@@ -1,11 +1,6 @@
-using System;
-using System.ComponentModel.Composition;
-using System.ComponentModel.Composition.Hosting;
-using System.Diagnostics;
+using System.Diagnostics;
using System.Globalization;
-using System.IO;
using System.Media;
-using System.Reflection;
using System.Runtime.InteropServices;
using EnvDTE;
using EnvDTE80;
@@ -13,23 +8,9 @@ using Microsoft.VisualStudio.ComponentModelHost;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.TestWindow.Extensibility;
-namespace VitaliiGanzha.VsDingExtensionProject
+namespace VitaliiGanzha.VsDingExtension
{
- ///
- /// This is the class that implements the package exposed by this assembly.
- ///
- /// The minimum requirement for a class to be considered a valid package for Visual Studio
- /// is to implement the IVsPackage interface and register itself with the shell.
- /// This package uses the helper classes defined inside the Managed Package Framework (MPF)
- /// to do it: it derives from the Package class that provides the implementation of the
- /// IVsPackage interface and uses the registration attributes defined in the framework to
- /// register itself and its components with the shell.
- ///
- // This attribute tells the PkgDef creation utility (CreatePkgDef.exe) that this class is
- // a package.
[PackageRegistration(UseManagedResourcesOnly = true)]
- // This attribute is used to register the information needed to show this package
- // in the Help/About dialog of Visual Studio.
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[Guid(GuidList.guidVsDingExtensionProjectPkgString)]
[ProvideAutoLoad("{f1536ef8-92ec-443c-9ed7-fdadf150da82}")]
@@ -37,46 +18,44 @@ namespace VitaliiGanzha.VsDingExtensionProject
{
private DTE2 applicationObject;
private AddIn addInInstance;
+ private BuildEvents buildEvents;
+ private DebuggerEvents debugEvents;
+ private SoundPlayer buildCompleteSoundPlayer;
+ private SoundPlayer debugSoundPlayer;
+ private SoundPlayer testCompleteSoundPlayer;
- ///
- /// Default constructor of the package.
- /// Inside this method you can place any initialization code that does not require
- /// any Visual Studio service because at this point the package object is created but
- /// not sited yet inside Visual Studio environment. The place to do all the other
- /// initialization is the Initialize method.
- ///
public VsDingExtensionProjectPackage()
{
Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString()));
}
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Overridden Package Implementation
#region Package Members
- ///
- /// Initialization of the package; this method is called right after the package is sited, so this is the place
- /// where you can put all the initialization code that rely on services provided by VisualStudio.
- ///
protected override void Initialize()
{
Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}",
this.ToString()));
base.Initialize();
+ buildCompleteSoundPlayer = new SoundPlayer(Resources.build);
+ debugSoundPlayer = new SoundPlayer(Resources.debug);
+ testCompleteSoundPlayer = new SoundPlayer(Resources.ding);
+
applicationObject = (DTE2) GetService(typeof (DTE));
- applicationObject.Events.BuildEvents.OnBuildDone += BuildEventsOnOnBuildDone;
- applicationObject.Events.DebuggerEvents.OnEnterBreakMode += DebuggerEventsOnOnEnterBreakMode;
+ this.buildEvents = applicationObject.Events.BuildEvents;
+ this.debugEvents = applicationObject.Events.DebuggerEvents;
+
+ buildEvents.OnBuildDone += (scope, action) => buildCompleteSoundPlayer.Play();
+ debugEvents.OnEnterBreakMode += (dbgEventReason reason, ref dbgExecutionAction action) => debugSoundPlayer.Play();
var componentModel =
Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof (SComponentModel)) as IComponentModel;
if (componentModel == null)
{
- throw new Exception("componentModel is null");
+ Debug.WriteLine("componentModel is null");
+ return;
}
var operationState = componentModel.GetService();
@@ -85,29 +64,12 @@ namespace VitaliiGanzha.VsDingExtensionProject
private void OperationStateOnStateChanged(object sender, OperationStateChangedEventArgs operationStateChangedEventArgs)
{
+
if (operationStateChangedEventArgs.State.HasFlag(TestOperationStates.TestExecutionFinished))
{
- PlaySound();
+ testCompleteSoundPlayer.Play();
}
}
-
- private void DebuggerEventsOnOnEnterBreakMode(dbgEventReason reason, ref dbgExecutionAction executionAction)
- {
- PlaySound();
- }
-
- private void BuildEventsOnOnBuildDone(vsBuildScope scope, vsBuildAction action)
- {
- PlaySound();
- }
-
- private void PlaySound()
- {
- SoundPlayer player = new SoundPlayer(Resources.ding);
- player.PlaySync();
-
- }
-
#endregion
}
diff --git a/VsDingExtensionProject/source.extension.vsixmanifest b/VsDingExtensionProject/source.extension.vsixmanifest
index cb33ea4..8c938db 100644
--- a/VsDingExtensionProject/source.extension.vsixmanifest
+++ b/VsDingExtensionProject/source.extension.vsixmanifest
@@ -2,8 +2,22 @@
- VsDingExtensionProject
- Information about my package
+ Visual Studio Ding extension
+ This small extension will play notification sounds when following events occur:
+- Build Complete
+- Entering debugger mode (breakpoint hit, etc)
+- Unit tests finished to run
+
+Useful when working with big solutions or when build/test run/hitting a breakpoint takes a lot of time and developer can be distructed on other things while he waits.
+
+Just install it and it is ready to use!
+
+This is an open source project, join!
+
+Twitter: @GanzhaVitalii
+ https://github.com/thecoderok/vsdingextension
+ speaker.ico
+ productivity
diff --git a/VsDingExtensionProject/speaker.ico b/VsDingExtensionProject/speaker.ico
new file mode 100644
index 0000000..f7a3433
Binary files /dev/null and b/VsDingExtensionProject/speaker.ico differ