diff --git a/src/Common/Common.csproj b/src/Common/Common.csproj
index f64ab181..33352055 100644
--- a/src/Common/Common.csproj
+++ b/src/Common/Common.csproj
@@ -5,6 +5,7 @@
+
diff --git a/src/Common/FileUtilities.cs b/src/Common/FileUtilities.cs
new file mode 100644
index 00000000..cbf31666
--- /dev/null
+++ b/src/Common/FileUtilities.cs
@@ -0,0 +1,36 @@
+using System.IO;
+using System.IO.Abstractions;
+
+namespace Common;
+
+public class FileUtilities : IFileUtilities
+{
+ private readonly IFileSystem _fileSystem;
+
+ public FileUtilities(IFileSystem fileSystem)
+ {
+ _fileSystem = fileSystem;
+ }
+
+ public void DeleteReadOnlyDirectory(string directory)
+ {
+ if (!_fileSystem.Directory.Exists(directory))
+ {
+ return;
+ }
+
+ foreach (var subdirectory in _fileSystem.Directory.EnumerateDirectories(directory))
+ {
+ DeleteReadOnlyDirectory(subdirectory);
+ }
+
+ foreach (var fileName in Directory.EnumerateFiles(directory))
+ {
+ var fileInfo = _fileSystem.FileInfo.FromFileName(fileName);
+ fileInfo.Attributes = FileAttributes.Normal;
+ fileInfo.Delete();
+ }
+
+ _fileSystem.Directory.Delete(directory);
+ }
+}
diff --git a/src/Common/IFileUtilities.cs b/src/Common/IFileUtilities.cs
new file mode 100644
index 00000000..ef5aab55
--- /dev/null
+++ b/src/Common/IFileUtilities.cs
@@ -0,0 +1,6 @@
+namespace Common;
+
+public interface IFileUtilities
+{
+ void DeleteReadOnlyDirectory(string directory);
+}
diff --git a/src/Trash/CompositionRoot.cs b/src/Trash/CompositionRoot.cs
index ba7ec277..673b352c 100644
--- a/src/Trash/CompositionRoot.cs
+++ b/src/Trash/CompositionRoot.cs
@@ -5,6 +5,7 @@ using System.Reflection;
using Autofac;
using Autofac.Core.Activators.Reflection;
using CliFx;
+using Common;
using Serilog;
using Serilog.Core;
using Trash.Command.Helpers;
@@ -79,6 +80,7 @@ public static class CompositionRoot
public static IContainer Setup(ContainerBuilder builder)
{
builder.RegisterType().As();
+ builder.RegisterType().As();
builder.RegisterModule();
builder.RegisterType().As();