diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index badb3b8..ab5e26f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -150,11 +150,10 @@ jobs:
uses: actions/upload-artifact@v4
# https://github.com/marketplace/actions/upload-a-build-artifact
with:
- name: PackageReferenceVersionToAttributeExtension-${{ env.VERSION }} ${{matrix.Configuration}}
+ name: PackageReferenceVersionToAttribute-${{ env.VERSION }} ${{matrix.Configuration}}
path: |
.\src\PackageReferenceVersionToAttributeExtension\bin\${{matrix.Configuration}}\PackageReferenceVersionToAttributeExtension.vsix
.\src\PackageReferenceVersionToAttributeTool\bin\${{matrix.Configuration}}\PackageReferenceVersionToAttribute.Tool.${{ env.SEM_VERSION }}.nupkg
- if-no-files-found: error
- name: Publish GitHub Release
if: ${{ matrix.Configuration == 'Release' && github.event.inputs.publishVsix == 'true' }}
@@ -174,7 +173,7 @@ jobs:
run: dotnet nuget push .\src\PackageReferenceVersionToAttributeTool\bin\${{matrix.Configuration}}\PackageReferenceVersionToAttribute.Tool.${{ env.SEM_VERSION }}.nupkg --api-key ${{ secrets.NUGET_KEY }} --source https://api.nuget.org/v3/index.json
- name: Publish to Open VSIX
- if: ${{ matrix.Configuration == 'Release' && github.event_name != 'pull_request' && (github.event.inputs.skipPublishNupkg == '' || github.event.inputs.skipPublishNupkg == 'false') }}
+ if: ${{ matrix.Configuration == 'Release' && github.event_name != 'pull_request' && (github.event.inputs.publishVsix == 'true') }}
run: |
[Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null
$vsixFile = ".\src\PackageReferenceVersionToAttributeExtension\bin\${{matrix.Configuration}}\PackageReferenceVersionToAttributeExtension.vsix"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef9d8d2..39ef514 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Change Log
+## v1.0.1108.39 (November 8th, 2024)
+
+- Fixed issue where the extension would create multiple output window panes
+- Fixed issue where exceptions were not being written to the output window pane
+- Fixed issue when trying to get the file name of unloaded projects
+
## v1.0.1105.37 (November 5th, 2024)
- Added support for converting projects within sln files on the command line
diff --git a/src/PackageReferenceVersionToAttributeExtension/Logging/CustomLoggerProvider.cs b/src/PackageReferenceVersionToAttributeExtension/Logging/CustomLoggerProvider.cs
index dba2aef..93eae6b 100644
--- a/src/PackageReferenceVersionToAttributeExtension/Logging/CustomLoggerProvider.cs
+++ b/src/PackageReferenceVersionToAttributeExtension/Logging/CustomLoggerProvider.cs
@@ -5,6 +5,7 @@
namespace PackageReferenceVersionToAttributeExtension.Logging
{
using System;
+ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PackageReferenceVersionToAttributeExtension.Services;
@@ -13,9 +14,20 @@ namespace PackageReferenceVersionToAttributeExtension.Logging
///
internal sealed class CustomLoggerProvider : ILoggerProvider, IDisposable
{
+ private readonly IServiceProvider serviceProvider;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The service provider.
+ public CustomLoggerProvider(IServiceProvider serviceProvider)
+ {
+ this.serviceProvider = serviceProvider;
+ }
+
///
public ILogger CreateLogger(string categoryName)
- => new OutputWindowLogger();
+ => this.serviceProvider.GetRequiredService();
///
public void Dispose()
diff --git a/src/PackageReferenceVersionToAttributeExtension/Logging/OutputWindowLogger.cs b/src/PackageReferenceVersionToAttributeExtension/Logging/OutputWindowLogger.cs
index 66b5a78..854f977 100644
--- a/src/PackageReferenceVersionToAttributeExtension/Logging/OutputWindowLogger.cs
+++ b/src/PackageReferenceVersionToAttributeExtension/Logging/OutputWindowLogger.cs
@@ -35,6 +35,10 @@ public void Log(
if (formatter != null)
{
var message = formatter(state, exception);
+ if (exception != null)
+ {
+ message += " " + exception.ToString();
+ }
try
{
diff --git a/src/PackageReferenceVersionToAttributeExtension/Package.cs b/src/PackageReferenceVersionToAttributeExtension/Package.cs
index 69fce77..728f65d 100644
--- a/src/PackageReferenceVersionToAttributeExtension/Package.cs
+++ b/src/PackageReferenceVersionToAttributeExtension/Package.cs
@@ -65,6 +65,7 @@ protected override void InitializeServices(IServiceCollection services)
.AddSingleton()
.AddSingleton()
.AddSingleton()
+ .AddSingleton()
.AddLogging(configure =>
{
configure.ClearProviders();
diff --git a/src/PackageReferenceVersionToAttributeExtension/Services/ProjectService.cs b/src/PackageReferenceVersionToAttributeExtension/Services/ProjectService.cs
index fdc6a39..352f628 100644
--- a/src/PackageReferenceVersionToAttributeExtension/Services/ProjectService.cs
+++ b/src/PackageReferenceVersionToAttributeExtension/Services/ProjectService.cs
@@ -4,6 +4,7 @@
namespace PackageReferenceVersionToAttributeExtension.Services
{
+ using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -42,7 +43,18 @@ public async Task CheckOutFileAsync(string filePath)
&& (!this.dte.Solution.Projects.Cast().Any(x =>
{
ThreadHelper.ThrowIfNotOnUIThread();
- return x.FileName == filePath;
+
+ try
+ {
+ return x.FileName == filePath;
+ }
+ catch (NotImplementedException ex)
+ {
+ // ex. an unloaded project has type DteGenericProject
+ // ex. Exception thrown: 'System.NotImplementedException' in Microsoft.VisualStudio.CommonIDE.dll
+ this.logger.LogWarning(ex, $"Failed to get file name for project '{x.Name}'.");
+ return false;
+ }
}))))
{
return;