diff --git a/Directory.Build.props b/Directory.Build.props
index f40331e7f..9c777ba79 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -2,7 +2,7 @@
Latest
- CA1051;CA1707;CA1711;CA1801;$(NoWarn)
+ CA1051;CA1501;CA1707;CA1711;CA1801;$(NoWarn)
diff --git a/source/Cosmos.Build.Builder/App.xaml.cs b/source/Cosmos.Build.Builder/App.xaml.cs
index 447d80be9..362e3fa44 100644
--- a/source/Cosmos.Build.Builder/App.xaml.cs
+++ b/source/Cosmos.Build.Builder/App.xaml.cs
@@ -90,7 +90,7 @@ namespace Cosmos.Build.Builder
base.OnStartup(e);
}
- private void ShowErrorMessageBox(string message) =>
+ private static void ShowErrorMessageBox(string message) =>
MessageBox.Show(message, "Cosmos Kit Builder", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
diff --git a/source/Cosmos.Build.Builder/BuildTasks/BuildTask.cs b/source/Cosmos.Build.Builder/BuildTasks/BuildTask.cs
index 249d44d03..bc4629d58 100644
--- a/source/Cosmos.Build.Builder/BuildTasks/BuildTask.cs
+++ b/source/Cosmos.Build.Builder/BuildTasks/BuildTask.cs
@@ -17,7 +17,7 @@ namespace Cosmos.Build.Builder.BuildTasks
protected override IReadOnlyDictionary Properties => _properties;
- private Dictionary _properties;
+ private readonly Dictionary _properties;
public BuildTask(
IMSBuildService msBuildService,
@@ -28,9 +28,11 @@ namespace Cosmos.Build.Builder.BuildTasks
{
ProjectFilePath = projectFilePath;
- _properties = new Dictionary();
- _properties.Add("OutputPath", outputPath);
- _properties.Add("VsixOutputPath", vsixOutputPath);
+ _properties = new Dictionary()
+ {
+ ["OutputPath"] = outputPath,
+ ["VsixOutputPath"] = vsixOutputPath
+ };
}
}
}
diff --git a/source/Cosmos.Build.Builder/BuildTasks/CreateSetupTask.cs b/source/Cosmos.Build.Builder/BuildTasks/CreateSetupTask.cs
index f1ac19f7a..96d03533c 100644
--- a/source/Cosmos.Build.Builder/BuildTasks/CreateSetupTask.cs
+++ b/source/Cosmos.Build.Builder/BuildTasks/CreateSetupTask.cs
@@ -10,11 +10,10 @@ namespace Cosmos.Build.Builder.BuildTasks
{
public override string Name => "Create Setup";
- private IInnoSetupService _innoSetupService;
+ private readonly IInnoSetupService _innoSetupService;
- private string _scriptFilePath;
-
- private Dictionary _defines;
+ private readonly string _scriptFilePath;
+ private readonly Dictionary _defines;
public CreateSetupTask(
IInnoSetupService innoSetupService,
@@ -27,10 +26,11 @@ namespace Cosmos.Build.Builder.BuildTasks
_scriptFilePath = scriptFilePath;
- _defines = new Dictionary();
-
- _defines.Add("BuildConfiguration", configuration);
- _defines.Add("ChangeSetVersion", releaseVersion);
+ _defines = new Dictionary()
+ {
+ ["BuildConfiguration"] = configuration,
+ ["ChangeSetVersion"] = releaseVersion
+ };
}
protected override string GetExePath()
diff --git a/source/Cosmos.Build.Builder/BuildTasks/MSBuildTargetBuildTaskBase.cs b/source/Cosmos.Build.Builder/BuildTasks/MSBuildTargetBuildTaskBase.cs
index 926329c63..29d4f98a6 100644
--- a/source/Cosmos.Build.Builder/BuildTasks/MSBuildTargetBuildTaskBase.cs
+++ b/source/Cosmos.Build.Builder/BuildTasks/MSBuildTargetBuildTaskBase.cs
@@ -12,7 +12,7 @@ namespace Cosmos.Build.Builder.BuildTasks
protected abstract IReadOnlyDictionary Properties { get; }
- private IMSBuildService _msBuildService;
+ private readonly IMSBuildService _msBuildService;
protected MSBuildTargetBuildTaskBase(IMSBuildService msBuildService)
: base(true, false)
diff --git a/source/Cosmos.Build.Builder/BuildTasks/PackTask.cs b/source/Cosmos.Build.Builder/BuildTasks/PackTask.cs
index bab999a32..6f620853f 100644
--- a/source/Cosmos.Build.Builder/BuildTasks/PackTask.cs
+++ b/source/Cosmos.Build.Builder/BuildTasks/PackTask.cs
@@ -17,7 +17,7 @@ namespace Cosmos.Build.Builder.BuildTasks
protected override IReadOnlyDictionary Properties => _properties;
- private Dictionary _properties;
+ private readonly Dictionary _properties;
public PackTask(
IMSBuildService msBuildService,
diff --git a/source/Cosmos.Build.Builder/BuildTasks/ProcessBuildTaskBase.cs b/source/Cosmos.Build.Builder/BuildTasks/ProcessBuildTaskBase.cs
index d99bbabbd..781fb2571 100644
--- a/source/Cosmos.Build.Builder/BuildTasks/ProcessBuildTaskBase.cs
+++ b/source/Cosmos.Build.Builder/BuildTasks/ProcessBuildTaskBase.cs
@@ -10,8 +10,8 @@ namespace Cosmos.Build.Builder.BuildTasks
{
public abstract string Name { get; }
- private bool _waitForExit;
- private bool _createWindow;
+ private readonly bool _waitForExit;
+ private readonly bool _createWindow;
protected ProcessBuildTaskBase(bool waitForExit, bool createWindow)
{
@@ -56,7 +56,7 @@ namespace Cosmos.Build.Builder.BuildTasks
protected abstract string GetExePath();
protected abstract string GetArguments();
- private void WaitForExit(Process process)
+ private static void WaitForExit(Process process)
{
process.WaitForExit();
@@ -66,7 +66,7 @@ namespace Cosmos.Build.Builder.BuildTasks
}
}
- private async Task ReadOutputAsync(StreamReader reader, ILogger logger)
+ private static async Task ReadOutputAsync(StreamReader reader, ILogger logger)
{
while (true)
{
diff --git a/source/Cosmos.Build.Builder/BuildTasks/PublishTask.cs b/source/Cosmos.Build.Builder/BuildTasks/PublishTask.cs
index 40d31a2d5..ec7916a12 100644
--- a/source/Cosmos.Build.Builder/BuildTasks/PublishTask.cs
+++ b/source/Cosmos.Build.Builder/BuildTasks/PublishTask.cs
@@ -17,7 +17,7 @@ namespace Cosmos.Build.Builder.BuildTasks
protected override IReadOnlyDictionary Properties => _properties;
- private Dictionary _properties;
+ private readonly Dictionary _properties;
public PublishTask(
IMSBuildService msBuildService,
@@ -27,8 +27,10 @@ namespace Cosmos.Build.Builder.BuildTasks
{
ProjectFilePath = projectFilePath;
- _properties = new Dictionary();
- _properties.Add("PublishDir", publishOutputPath);
+ _properties = new Dictionary()
+ {
+ ["PublishDir"] = publishOutputPath
+ };
}
}
}
diff --git a/source/Cosmos.Build.Builder/BuildTasks/StartProcessTask.cs b/source/Cosmos.Build.Builder/BuildTasks/StartProcessTask.cs
index c8e309987..f9cdce53b 100644
--- a/source/Cosmos.Build.Builder/BuildTasks/StartProcessTask.cs
+++ b/source/Cosmos.Build.Builder/BuildTasks/StartProcessTask.cs
@@ -6,10 +6,10 @@ namespace Cosmos.Build.Builder.BuildTasks
{
public override string Name => $"Run Process - {_processName ?? Path.GetFileNameWithoutExtension(_exePath)}";
- private string _exePath;
- private string _args;
+ private readonly string _exePath;
+ private readonly string _args;
- private string _processName;
+ private readonly string _processName;
public StartProcessTask(
string exePath,
diff --git a/source/Cosmos.Build.Builder/CommandLineBuilderConfiguration.cs b/source/Cosmos.Build.Builder/CommandLineBuilderConfiguration.cs
index 30b48f8cd..c5472a926 100644
--- a/source/Cosmos.Build.Builder/CommandLineBuilderConfiguration.cs
+++ b/source/Cosmos.Build.Builder/CommandLineBuilderConfiguration.cs
@@ -10,7 +10,7 @@ namespace Cosmos.Build.Builder
public bool UserKit => GetSwitch();
public string VsPath => GetOption();
- private Dictionary _args;
+ private readonly Dictionary _args;
public CommandLineBuilderConfiguration(string[] args)
{
diff --git a/source/Cosmos.Build.Builder/CosmosBuildDefinition.cs b/source/Cosmos.Build.Builder/CosmosBuildDefinition.cs
index ad6ce5780..233261565 100644
--- a/source/Cosmos.Build.Builder/CosmosBuildDefinition.cs
+++ b/source/Cosmos.Build.Builder/CosmosBuildDefinition.cs
@@ -12,9 +12,9 @@ namespace Cosmos.Build.Builder
{
internal class CosmosBuildDefinition : IBuildDefinition
{
- private IInnoSetupService _innoSetupService;
- private IMSBuildService _msBuildService;
- private ISetupInstance2 _visualStudioInstance;
+ private readonly IInnoSetupService _innoSetupService;
+ private readonly IMSBuildService _msBuildService;
+ private readonly ISetupInstance2 _visualStudioInstance;
private readonly string _cosmosDir;
diff --git a/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs b/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs
index c1bade0ec..806b605df 100644
--- a/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs
+++ b/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs
@@ -12,9 +12,10 @@ namespace Cosmos.Build.Builder.Dependencies
internal class InnoSetupDependency : IDependency
{
private const string InnoSetupInstallerUrl = "http://www.jrsoftware.org/download.php/is.exe";
+
public string Name => "Inno Setup";
- private IInnoSetupService _innoSetupService;
+ private readonly IInnoSetupService _innoSetupService;
public InnoSetupDependency(IInnoSetupService innoSetupService)
{
@@ -46,7 +47,7 @@ namespace Cosmos.Build.Builder.Dependencies
}
var process = Process.Start(setupFilePath);
- await Task.Run((Action)process.WaitForExit, cancellationToken).ConfigureAwait(false);
+ await Task.Run(process.WaitForExit, cancellationToken).ConfigureAwait(false);
if (process.ExitCode != 0)
{
diff --git a/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs b/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs
index b5212afb2..44bfa9573 100644
--- a/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs
+++ b/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs
@@ -48,12 +48,12 @@ namespace Cosmos.Build.Builder.Dependencies
.Select(r => DownloadRepoAsync(r, usesGit, cancellationToken)));
}
- private async Task DownloadRepoAsync(Repo repo, bool useGit, CancellationToken cancellationToken)
+ private static async Task DownloadRepoAsync(Repo repo, bool useGit, CancellationToken cancellationToken)
{
if (useGit)
{
var process = Process.Start("git", $"clone \"{repo.Url}.git\" \"{repo.LocalPath}\"");
- await Task.Run((Action)process.WaitForExit).ConfigureAwait(false);
+ await Task.Run(process.WaitForExit).ConfigureAwait(false);
if (process.ExitCode != 0)
{
diff --git a/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs b/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs
index 8fb5e28c0..abdfa7968 100644
--- a/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs
+++ b/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs
@@ -12,7 +12,7 @@ namespace Cosmos.Build.Builder.Dependencies
public string Name => $"Visual Studio {MinimumVsVersion.Major}.{MinimumVsVersion.Minor}+";
- private ISetupInstance2 _visualStudioInstance;
+ private readonly ISetupInstance2 _visualStudioInstance;
public VisualStudioDependency(ISetupInstance2 visualStudioInstance)
{
@@ -41,7 +41,7 @@ namespace Cosmos.Build.Builder.Dependencies
var args = $"update --passive --norestart --installPath \"{vsInstancePath}\"";
var process = Process.Start(vsInstallerPath, args);
- await Task.Run((Action)process.WaitForExit, cancellationToken).ConfigureAwait(false);
+ await Task.Run(process.WaitForExit, cancellationToken).ConfigureAwait(false);
if (process.ExitCode != 0)
{
diff --git a/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs b/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs
index 276699b32..42a580674 100644
--- a/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs
+++ b/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs
@@ -20,7 +20,7 @@ namespace Cosmos.Build.Builder.Dependencies
public string Name => "Visual Studio Workloads";
- private ISetupInstance2 _visualStudioInstance;
+ private readonly ISetupInstance2 _visualStudioInstance;
public VisualStudioWorkloadsDependency(ISetupInstance2 visualStudioInstance)
{
@@ -52,7 +52,7 @@ namespace Cosmos.Build.Builder.Dependencies
}
var process = Process.Start(vsInstallerPath, args);
- await Task.Run((Action)process.WaitForExit, cancellationToken).ConfigureAwait(false);
+ await Task.Run(process.WaitForExit, cancellationToken).ConfigureAwait(false);
if (process.ExitCode != 0)
{
diff --git a/source/Cosmos.Build.Builder/Models/Section.cs b/source/Cosmos.Build.Builder/Models/Section.cs
index e784be846..456f5d2cf 100644
--- a/source/Cosmos.Build.Builder/Models/Section.cs
+++ b/source/Cosmos.Build.Builder/Models/Section.cs
@@ -11,7 +11,7 @@ namespace Cosmos.Build.Builder.Models
public string Log => _logBuilder.ToString();
public bool HasLoggedErrors { get; private set; }
- private StringBuilder _logBuilder;
+ private readonly StringBuilder _logBuilder;
public Section(string name)
{
diff --git a/source/Cosmos.Build.Builder/Services/DialogService.cs b/source/Cosmos.Build.Builder/Services/DialogService.cs
index 6353ffb60..6a845e6f8 100644
--- a/source/Cosmos.Build.Builder/Services/DialogService.cs
+++ b/source/Cosmos.Build.Builder/Services/DialogService.cs
@@ -5,8 +5,8 @@ namespace Cosmos.Build.Builder.Services
{
internal class DialogService : IDialogService where TView : Window
{
- private Func _dialogFactory;
- private Window _owner;
+ private readonly Func _dialogFactory;
+ private readonly Window _owner;
public DialogService(Func dialogFactory, Window owner = null)
{
diff --git a/source/Cosmos.Build.Builder/Services/VisualStudioService.cs b/source/Cosmos.Build.Builder/Services/VisualStudioService.cs
index 8b450aa9c..f480bec21 100644
--- a/source/Cosmos.Build.Builder/Services/VisualStudioService.cs
+++ b/source/Cosmos.Build.Builder/Services/VisualStudioService.cs
@@ -8,7 +8,7 @@ namespace Cosmos.Build.Builder.Services
{
internal class VisualStudioService : IVisualStudioService
{
- private Lazy> _instances;
+ private readonly Lazy> _instances;
public VisualStudioService()
{
diff --git a/source/Cosmos.Build.Builder/ViewModels/DependencyInstallationDialogViewModel.cs b/source/Cosmos.Build.Builder/ViewModels/DependencyInstallationDialogViewModel.cs
index b8377c5d4..8c63e41ed 100644
--- a/source/Cosmos.Build.Builder/ViewModels/DependencyInstallationDialogViewModel.cs
+++ b/source/Cosmos.Build.Builder/ViewModels/DependencyInstallationDialogViewModel.cs
@@ -6,7 +6,7 @@ using System.Windows.Input;
namespace Cosmos.Build.Builder.ViewModels
{
- internal class DependencyInstallationDialogViewModel : ViewModelBase
+ internal sealed class DependencyInstallationDialogViewModel : ViewModelBase, IDisposable
{
private const string InstallationSucceededText = "{0} installed successfully!";
private const string InstallationFailedText = "{0} failed to install!";
@@ -68,10 +68,16 @@ namespace Cosmos.Build.Builder.ViewModels
OkCommand = new RelayCommand(p => Close(p as Window, true));
}
+ public void Dispose()
+ {
+ _installTask.Dispose();
+ _installTaskCancellationTokenSource.Dispose();
+ }
+
private void Install(object parameter) => _installTask = InstallAsync();
private void CancelInstallation(object parameter) => _installTaskCancellationTokenSource.Cancel();
- private void Close(Window window, bool? dialogResult)
+ private static void Close(Window window, bool? dialogResult)
{
#if DEBUG
if (window == null)
diff --git a/source/Cosmos.Build.Builder/ViewModels/MainWindowLogger.cs b/source/Cosmos.Build.Builder/ViewModels/MainWindowLogger.cs
index a06c28480..6128130e7 100644
--- a/source/Cosmos.Build.Builder/ViewModels/MainWindowLogger.cs
+++ b/source/Cosmos.Build.Builder/ViewModels/MainWindowLogger.cs
@@ -9,7 +9,7 @@ namespace Cosmos.Build.Builder.ViewModels
{
private static readonly string[] NewLineStringArray = new string[] { Environment.NewLine };
- private MainWindowViewModel _viewModel;
+ private readonly MainWindowViewModel _viewModel;
public MainWindowLogger(MainWindowViewModel viewModel)
{
diff --git a/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs b/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs
index 9c8d66222..05836967d 100644
--- a/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs
+++ b/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs
@@ -12,7 +12,7 @@ using Cosmos.Build.Builder.Services;
namespace Cosmos.Build.Builder.ViewModels
{
- internal class MainWindowViewModel : ViewModelBase
+ internal sealed class MainWindowViewModel : ViewModelBase
{
private const int TailItemCount = 10;
@@ -35,12 +35,12 @@ namespace Cosmos.Build.Builder.ViewModels
set => SetAndRaiseIfChanged(ref _windowState, value);
}
- private ILogger _logger;
+ private readonly ILogger _logger;
- private IDialogService _dependencyInstallationDialogService;
+ private readonly IDialogService _dependencyInstallationDialogService;
- private IBuildDefinition _buildDefinition;
- private Task _buildTask;
+ private readonly IBuildDefinition _buildDefinition;
+ private readonly Task _buildTask;
private bool _closeWhenCompleted;
@@ -109,12 +109,14 @@ namespace Cosmos.Build.Builder.ViewModels
{
_logger.LogMessage($"{dependency.Name} not found.");
- var viewModel = new DependencyInstallationDialogViewModel(dependency);
- _dependencyInstallationDialogService.ShowDialog(viewModel);
-
- if (!viewModel.InstallationSucceeded)
+ using (var viewModel = new DependencyInstallationDialogViewModel(dependency))
{
- throw new Exception($"Dependency installation failed! Dependency name: {dependency.Name}");
+ _dependencyInstallationDialogService.ShowDialog(viewModel);
+
+ if (!viewModel.InstallationSucceeded)
+ {
+ throw new Exception($"Dependency installation failed! Dependency name: {dependency.Name}");
+ }
}
}
}
diff --git a/source/Cosmos.Build.Builder/ViewModels/VisualStudioInstanceDialogViewModel.cs b/source/Cosmos.Build.Builder/ViewModels/VisualStudioInstanceDialogViewModel.cs
index 384639181..1b4a64d83 100644
--- a/source/Cosmos.Build.Builder/ViewModels/VisualStudioInstanceDialogViewModel.cs
+++ b/source/Cosmos.Build.Builder/ViewModels/VisualStudioInstanceDialogViewModel.cs
@@ -9,7 +9,7 @@ using Cosmos.Build.Builder.Services;
namespace Cosmos.Build.Builder.ViewModels
{
- internal class VisualStudioInstanceDialogViewModel : ViewModelBase
+ internal sealed class VisualStudioInstanceDialogViewModel : ViewModelBase
{
public IEnumerable VisualStudioInstances { get; }
@@ -22,7 +22,7 @@ namespace Cosmos.Build.Builder.ViewModels
public ICommand OkCommand { get; }
public ICommand CancelCommand { get; }
- private IVisualStudioService _visualStudioService;
+ private readonly IVisualStudioService _visualStudioService;
private VisualStudioInstance _selectedVisualStudioInstance;
@@ -37,7 +37,7 @@ namespace Cosmos.Build.Builder.ViewModels
CancelCommand = new RelayCommand(p => Close(p as Window, false));
}
- private void Close(Window window, bool? dialogResult)
+ private static void Close(Window window, bool? dialogResult)
{
#if DEBUG
if (window == null)