diff --git a/Creating custom debug visualizers for Visual Studio 2022.url b/Creating custom debug visualizers for Visual Studio 2022.url new file mode 100644 index 0000000..ebe0892 --- /dev/null +++ b/Creating custom debug visualizers for Visual Studio 2022.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://blog.elmah.io/creating-custom-debug-visualizers-for-visual-studio-2022/ diff --git a/MailAddressVisualizer/.vsextension/string-resources.json b/MailAddressVisualizer/.vsextension/string-resources.json new file mode 100644 index 0000000..097d805 --- /dev/null +++ b/MailAddressVisualizer/.vsextension/string-resources.json @@ -0,0 +1,3 @@ +{ + "MailAddressVisualizer.Command1.DisplayName": "Sample Remote Command" +} diff --git a/MailAddressVisualizer/ExtensionEntrypoint.cs b/MailAddressVisualizer/ExtensionEntrypoint.cs new file mode 100644 index 0000000..1dc7c09 --- /dev/null +++ b/MailAddressVisualizer/ExtensionEntrypoint.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.VisualStudio.Extensibility; + +namespace MailAddressVisualizer +{ + /// + /// Extension entrypoint for the VisualStudio.Extensibility extension. + /// + [VisualStudioContribution] + internal class ExtensionEntrypoint : Extension + { + /// + public override ExtensionConfiguration ExtensionConfiguration => new() + { + Metadata = new( + id: "MailAddressVisualizer.3c0400c3-acec-4b09-b561-c11fac7b10a7", + version: this.ExtensionAssemblyVersion, + publisherName: "Publisher name", + displayName: "MailAddressVisualizer", + description: "Extension description"), + }; + + /// + protected override void InitializeServices(IServiceCollection serviceCollection) + { + base.InitializeServices(serviceCollection); + + // You can configure dependency injection here by adding services to the serviceCollection. + } + } +} diff --git a/MailAddressVisualizer/MailAddressDebuggerVisualizerProvider .cs b/MailAddressVisualizer/MailAddressDebuggerVisualizerProvider .cs new file mode 100644 index 0000000..7730519 --- /dev/null +++ b/MailAddressVisualizer/MailAddressDebuggerVisualizerProvider .cs @@ -0,0 +1,24 @@ +using MailAddressVisualizerSource; +using Microsoft.VisualStudio.Extensibility.DebuggerVisualizers; +using Microsoft.VisualStudio.RpcContracts.RemoteUI; +using System.Net.Mail; +using System.Threading; +using System.Threading.Tasks; +namespace MailAddressVisualizer; + +internal class MailAddressDebuggerVisualizerProvider : DebuggerVisualizerProvider +{ + public override DebuggerVisualizerProviderConfiguration DebuggerVisualizerProviderConfiguration + => new("Mail Address Visualizer", typeof(MailAddress)); + + public override async Task CreateVisualizerAsync( + VisualizerTarget visualizerTarget, CancellationToken cancellationToken) + { + MailAddressModel? model = await visualizerTarget + .ObjectSource + .RequestDataAsync(jsonSerializer: null, CancellationToken.None); + + return await Task.FromResult( + new MailAddressVisualizerUserControl(model)); + } +} \ No newline at end of file diff --git a/MailAddressVisualizer/MailAddressVisualizer.csproj b/MailAddressVisualizer/MailAddressVisualizer.csproj new file mode 100644 index 0000000..214508f --- /dev/null +++ b/MailAddressVisualizer/MailAddressVisualizer.csproj @@ -0,0 +1,24 @@ + + + net8.0-windows8.0 + enable + latest + en-US + + + + + + + + + + + + + + + + + + diff --git a/MailAddressVisualizer/MailAddressVisualizer.slnx b/MailAddressVisualizer/MailAddressVisualizer.slnx new file mode 100644 index 0000000..bf5e8b8 --- /dev/null +++ b/MailAddressVisualizer/MailAddressVisualizer.slnx @@ -0,0 +1,4 @@ + + + + diff --git a/MailAddressVisualizer/MailAddressVisualizerUserControl .cs b/MailAddressVisualizer/MailAddressVisualizerUserControl .cs new file mode 100644 index 0000000..537036d --- /dev/null +++ b/MailAddressVisualizer/MailAddressVisualizerUserControl .cs @@ -0,0 +1,11 @@ +using MailAddressVisualizerSource; +using Microsoft.VisualStudio.Extensibility.UI; + +namespace MailAddressVisualizer; + +internal class MailAddressVisualizerUserControl : RemoteUserControl +{ + public MailAddressVisualizerUserControl(MailAddressModel? model) : base(model) + { + } +} \ No newline at end of file diff --git a/MailAddressVisualizer/MailAddressVisualizerUserControl.xaml b/MailAddressVisualizer/MailAddressVisualizerUserControl.xaml new file mode 100644 index 0000000..0eb7838 --- /dev/null +++ b/MailAddressVisualizer/MailAddressVisualizerUserControl.xaml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MailAddressVisualizerSource/MailAddressModel.cs b/MailAddressVisualizerSource/MailAddressModel.cs new file mode 100644 index 0000000..1f82adc --- /dev/null +++ b/MailAddressVisualizerSource/MailAddressModel.cs @@ -0,0 +1,13 @@ +using System.Runtime.Serialization; +namespace MailAddressVisualizerSource; + +[DataContract] +public class MailAddressModel +{ + [DataMember] + public string DisplayName { get; set; } = ""; + + [DataMember] + public string Email { get; set; } = ""; +} + diff --git a/MailAddressVisualizerSource/MailAddressObjectSource .cs b/MailAddressVisualizerSource/MailAddressObjectSource .cs new file mode 100644 index 0000000..4ab2ad0 --- /dev/null +++ b/MailAddressVisualizerSource/MailAddressObjectSource .cs @@ -0,0 +1,20 @@ +using Microsoft.VisualStudio.DebuggerVisualizers; +using System.Net.Mail; + +namespace MailAddressVisualizerSource; + +public class MailAddressObjectSource : VisualizerObjectSource +{ + public override void GetData(object target, Stream outgoingData) + { + if (target is MailAddress mail) + { + var result = new MailAddressModel + { + DisplayName = mail.DisplayName, + Email = mail.Address, + }; + SerializeAsJson(outgoingData, result); + } + } +} \ No newline at end of file diff --git a/MailAddressVisualizerSource/MailAddressVisualizerSource.csproj b/MailAddressVisualizerSource/MailAddressVisualizerSource.csproj new file mode 100644 index 0000000..75a4d6a --- /dev/null +++ b/MailAddressVisualizerSource/MailAddressVisualizerSource.csproj @@ -0,0 +1,14 @@ + + + + netstandard2.0 + enable + enable + latest + + + + + + + diff --git a/MailAddressVisualizerTest/Program.cs b/MailAddressVisualizerTest/Program.cs new file mode 100644 index 0000000..3dca162 --- /dev/null +++ b/MailAddressVisualizerTest/Program.cs @@ -0,0 +1,7 @@ +// See https://aka.ms/new-console-template for more information +using System.Net.Mail; + +var displayName = "Thomas Ardal"; +var email = "thomas@elmah.io"; +var mailAddress = new MailAddress(email, displayName); +return; \ No newline at end of file diff --git a/MailAddressVisualizerTest/Test.csproj b/MailAddressVisualizerTest/Test.csproj new file mode 100644 index 0000000..d20809e --- /dev/null +++ b/MailAddressVisualizerTest/Test.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/MailAddressVisualizerTest/Test.slnx b/MailAddressVisualizerTest/Test.slnx new file mode 100644 index 0000000..33b33b1 --- /dev/null +++ b/MailAddressVisualizerTest/Test.slnx @@ -0,0 +1,3 @@ + + +