diff --git a/src/Snap.Installer.Tests/ProgramTests.cs b/src/Snap.Installer.Tests/ProgramTests.cs index 8828d82d..e4012e1a 100644 --- a/src/Snap.Installer.Tests/ProgramTests.cs +++ b/src/Snap.Installer.Tests/ProgramTests.cs @@ -106,7 +106,7 @@ public async Task TestInstall_Offline_Using_Local_PackageSource() using var genesisPackageContext = await _baseFixturePackaging.BuildPackageAsync(genesisSnapReleaseBuilder, cts.Token); var releasesFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, genesisPackageContext.FullPackageSnapApp.BuildNugetReleasesFilename()); - var snapAppDllFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, SnapConstants.SnapAppDllFilename); + var snapAppDllFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, SnapConstants.SnapAppYamlFilename); var setupNupkgFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, SnapConstants.SetupNupkgFilename); await using var releasePackageMemoryStream = _snapPack.BuildReleasesPackage(genesisSnapApp, snapAppsReleases); @@ -114,8 +114,8 @@ public async Task TestInstall_Offline_Using_Local_PackageSource() await _snapFilesystem.FileWriteAsync(genesisPackageContext.FullPackageMemoryStream, setupNupkgFilename, cts.Token); await _snapFilesystem.FileWriteAsync(releasePackageMemoryStream, releasesFilename, cts.Token); - using var snapAppDllAssemblyDefinition = _snapAppWriter.BuildSnapAppAssembly(genesisSnapApp); - snapAppDllAssemblyDefinition.Write(snapAppDllFilename); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(genesisSnapApp); + await _snapFilesystem.FileWriteAsync(snapAppYamlStream, snapAppDllFilename, default); var (exitCode, installerType) = await Program.MainImplAsync(["--headless"], LogLevel.Info, cts, _snapOsMock.Object, x => { @@ -142,7 +142,7 @@ public async Task TestInstall_Offline_Using_Local_PackageSource() { throw new PlatformNotSupportedException(); } - Assert.EndsWith(SnapConstants.SnapAppDllFilename, files[1]); + Assert.EndsWith(SnapConstants.SnapAppYamlFilename, files[1]); Assert.EndsWith(SnapConstants.SnapDllFilename, files[2]); } @@ -202,12 +202,12 @@ public async Task TestInstall_Web_Using_Local_PackageSource() using var update1PackageContext = await _baseFixturePackaging.BuildPackageAsync(update1SnapReleaseBuilder, cts.Token); using var update2PackageContext = await _baseFixturePackaging.BuildPackageAsync(update2SnapReleaseBuilder, cts.Token); - var snapAppDllFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, SnapConstants.SnapAppDllFilename); + var snapAppDllFilename = _snapFilesystem.PathCombine(snapInstallerIoEnvironment.ThisExeWorkingDirectory, SnapConstants.SnapAppYamlFilename); await using var releasePackageMemoryStream = _snapPack.BuildReleasesPackage(genesisSnapApp, snapAppsReleases); - using var snapAppDllAssemblyDefinition = _snapAppWriter.BuildSnapAppAssembly(genesisSnapApp); - snapAppDllAssemblyDefinition.Write(snapAppDllFilename); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(genesisSnapApp); + await _snapFilesystem.FileWriteAsync(snapAppYamlStream, snapAppDllFilename, cts.Token); await genesisPackageContext.WriteToAsync(packagesDirectory, _snapFilesystem, cts.Token, writeDeltaNupkg: false); await update1PackageContext.WriteToAsync(packagesDirectory, _snapFilesystem, cts.Token, writeFullNupkg: false); @@ -243,7 +243,7 @@ public async Task TestInstall_Web_Using_Local_PackageSource() throw new PlatformNotSupportedException(); } Assert.EndsWith(mainExecutable.BuildRuntimeConfigFilename(_snapFilesystem), files[1]); - Assert.EndsWith(SnapConstants.SnapAppDllFilename, files[2]); + Assert.EndsWith(SnapConstants.SnapAppYamlFilename, files[2]); Assert.EndsWith(SnapConstants.SnapDllFilename, files[3]); Assert.EndsWith("test1.dll", files[4]); Assert.EndsWith("test2.dll", files[5]); @@ -258,4 +258,4 @@ void SetupSnapOsMock([NotNull] ISnapOsSpecialFolders specialFolders) _snapOsMock.Setup(x => x.SpecialFolders).Returns(specialFolders); _snapOsMock.Setup(x => x.ProcessManager).Returns(_snapOsProcessManager); } -} \ No newline at end of file +} diff --git a/src/Snap.Installer/Program.Install.cs b/src/Snap.Installer/Program.Install.cs index 18d94ed1..9d5bcd22 100644 --- a/src/Snap.Installer/Program.Install.cs +++ b/src/Snap.Installer/Program.Install.cs @@ -92,7 +92,7 @@ async Task InstallInBackgroundAsync(IMainWindowViewModel mainWindowViewModel) diskLogger.Debug($"{nameof(environment.Io.WorkingDirectory)}: {environment.Io.WorkingDirectory}"); diskLogger.Debug($"{nameof(environment.Io.ThisExeWorkingDirectory)}: {environment.Io.ThisExeWorkingDirectory}"); - var snapAppDllAbsolutePath = snapFilesystem.PathCombine(environment.Io.ThisExeWorkingDirectory, SnapConstants.SnapAppDllFilename); + var snapAppDllAbsolutePath = snapFilesystem.PathCombine(environment.Io.ThisExeWorkingDirectory, SnapConstants.SnapAppYamlFilename); diskLogger.Debug($"{nameof(snapAppDllAbsolutePath)}: {snapAppDllAbsolutePath}."); if (!snapFilesystem.FileExists(snapAppDllAbsolutePath)) @@ -110,7 +110,7 @@ async Task InstallInBackgroundAsync(IMainWindowViewModel mainWindowViewModel) } catch (Exception ex) { - mainWindowLogger.ErrorException($"Error reading {SnapConstants.SnapAppDllFilename}", ex); + mainWindowLogger.ErrorException($"Error reading {SnapConstants.SnapAppYamlFilename}", ex); goto done; } diff --git a/src/Snap.Shared.Tests/Snap.Shared.Tests.csproj b/src/Snap.Shared.Tests/Snap.Shared.Tests.csproj index 8e09f053..5ee7a60a 100644 --- a/src/Snap.Shared.Tests/Snap.Shared.Tests.csproj +++ b/src/Snap.Shared.Tests/Snap.Shared.Tests.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Snap.Tests/Core/Extensions/SnapExtensionTests.cs b/src/Snap.Tests/Core/Extensions/SnapExtensionTests.cs index 0ccbc1d7..dfa9770a 100644 --- a/src/Snap.Tests/Core/Extensions/SnapExtensionTests.cs +++ b/src/Snap.Tests/Core/Extensions/SnapExtensionTests.cs @@ -606,9 +606,9 @@ public async Task TestGetSnapAppFromDirectory() var snapApp = _baseFixture.BuildSnapApp(); await using var tmpDir = _baseFixture.WithDisposableTempDirectory(_fileSystem); - using var assemblyDefinition = _appWriter.BuildSnapAppAssembly(snapApp); - var snapAppDllAbsolutePath = _fileSystem.PathCombine(tmpDir.WorkingDirectory, assemblyDefinition.BuildRelativeFilename()); - assemblyDefinition.Write(snapAppDllAbsolutePath); + using var snapAppYamlStream = _appWriter.BuildSnapApp(snapApp); + var snapAppDllAbsolutePath = _fileSystem.PathCombine(tmpDir.WorkingDirectory, SnapConstants.SnapAppYamlFilename); + _fileSystem.FileWrite(snapAppYamlStream, snapAppDllAbsolutePath); var appSpecAfter = tmpDir.WorkingDirectory.GetSnapAppFromDirectory(_fileSystem, _appReader); Assert.NotNull(appSpecAfter); @@ -622,9 +622,9 @@ public async Task TestGetSnapAppFromDirectory_Supports_Yaml_Member_Aliases() snapApp.InstallDirectoryName = "mydirectory"; await using var tmpDir = _baseFixture.WithDisposableTempDirectory(_fileSystem); - using var assemblyDefinition = _appWriter.BuildSnapAppAssembly(snapApp); - var snapAppDllAbsolutePath = _fileSystem.PathCombine(tmpDir.WorkingDirectory, assemblyDefinition.BuildRelativeFilename()); - assemblyDefinition.Write(snapAppDllAbsolutePath); + using var snapAppYamlStream = _appWriter.BuildSnapApp(snapApp); + var snapAppDllAbsolutePath = _fileSystem.PathCombine(tmpDir.WorkingDirectory, SnapConstants.SnapAppYamlFilename); + _fileSystem.FileWrite(snapAppYamlStream, snapAppDllAbsolutePath); var appSpecAfter = tmpDir.WorkingDirectory.GetSnapAppFromDirectory(_fileSystem, _appReader); Assert.NotNull(appSpecAfter); @@ -1035,4 +1035,4 @@ static Dictionary BuildExpansionProperties(string value) return properties; } -} \ No newline at end of file +} diff --git a/src/Snap.Tests/Core/SnapAppWriterTests.cs b/src/Snap.Tests/Core/SnapAppWriterTests.cs index 623c4154..0c79e3bf 100644 --- a/src/Snap.Tests/Core/SnapAppWriterTests.cs +++ b/src/Snap.Tests/Core/SnapAppWriterTests.cs @@ -40,7 +40,7 @@ public void TestBuildSnapAppAssembly_Throws_If_Channel_UpdateFeed_Source_Is_Null snapAppBefore.Channels.ForEach(x => { x.UpdateFeed.Source = null; }); Assert.True(snapAppBefore.Channels.Count > 0); - var ex = Assert.Throws(() => _snapAppWriter.BuildSnapAppAssembly(snapAppBefore)); + var ex = Assert.Throws(() => _snapAppWriter.BuildSnapApp(snapAppBefore)); Assert.StartsWith("Update feed Source cannot be null", ex.Message); } @@ -49,8 +49,8 @@ public void TestBuildSnapAppAssembly() { var snapAppBefore = _baseFixture.BuildSnapApp(); - using var assembly = _snapAppWriter.BuildSnapAppAssembly(snapAppBefore); - var snapAppAfter = assembly.GetSnapApp(_snapAppReader); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapAppBefore); + var snapAppAfter = _snapAppReader.BuildSnapAppFromStream(snapAppYamlStream); Assert.NotNull(snapAppAfter); } @@ -75,8 +75,8 @@ public void TestBuildSnapAppAssembly_Prunes_PushFeed_Credentials() } }); - using var assembly = _snapAppWriter.BuildSnapAppAssembly(snapAppBefore); - var snapAppAfter = assembly.GetSnapApp(_snapAppReader); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapAppBefore); + var snapAppAfter = _snapAppReader.BuildSnapAppFromStream(snapAppYamlStream); Assert.NotNull(snapAppAfter); var snapAppAfterChannel = snapAppAfter.GetDefaultChannelOrThrow(); @@ -112,8 +112,8 @@ public void TestBuildSnapAppAssembly_Prunes_UpdateFeed_Credentials_If_Nuget_Org_ }, }); - using var assembly = _snapAppWriter.BuildSnapAppAssembly(snapAppBefore); - var snapAppAfter = assembly.GetSnapApp(_snapAppReader); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapAppBefore); + var snapAppAfter = _snapAppReader.BuildSnapAppFromStream(snapAppYamlStream); Assert.NotNull(snapAppAfter); var snapAppAfterChannel = snapAppAfter.GetDefaultChannelOrThrow(); @@ -163,8 +163,8 @@ public void TestBuildSnapAppAssembly_Prunes_UpdateFeed_ApiKey_But_Allows_Usernam UpdateFeed = updateFeed }); - using var assembly = _snapAppWriter.BuildSnapAppAssembly(snapAppBefore); - var snapAppAfter = assembly.GetSnapApp(_snapAppReader); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapAppBefore); + var snapAppAfter = _snapAppReader.BuildSnapAppFromStream(snapAppYamlStream); Assert.NotNull(snapAppAfter); var snapAppAfterChannel = snapAppAfter.GetDefaultChannelOrThrow(); @@ -201,8 +201,8 @@ public void TestBuildSnapAppAssembly_Include_Persistent_Assets() "somefile.json" ]; - using var assembly = _snapAppWriter.BuildSnapAppAssembly(snapAppBefore); - var snapAppAfter = assembly.GetSnapApp(_snapAppReader); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapAppBefore); + var snapAppAfter = _snapAppReader.BuildSnapAppFromStream(snapAppYamlStream); Assert.NotNull(snapAppAfter); Assert.Equal(snapAppBefore.Target.PersistentAssets, snapAppAfter.Target.PersistentAssets); @@ -219,10 +219,10 @@ public void TestBuildSnapAppAssembly_Include_Shortcuts() SnapShortcutLocation.StartMenu ]; - using var assembly = _snapAppWriter.BuildSnapAppAssembly(snapAppBefore); - var snapAppAfter = assembly.GetSnapApp(_snapAppReader); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapAppBefore); + var snapAppAfter = _snapAppReader.BuildSnapAppFromStream(snapAppYamlStream); Assert.NotNull(snapAppAfter); Assert.Equal(snapAppBefore.Target.PersistentAssets, snapAppAfter.Target.PersistentAssets); } -} \ No newline at end of file +} diff --git a/src/Snap.Tests/Core/SnapPackTests.cs b/src/Snap.Tests/Core/SnapPackTests.cs index 49c97f1a..82303c00 100644 --- a/src/Snap.Tests/Core/SnapPackTests.cs +++ b/src/Snap.Tests/Core/SnapPackTests.cs @@ -70,7 +70,7 @@ public void TestAlwaysRemoveTheseAssemblies() var assemblies = new List { _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, SnapConstants.SnapDllFilename), - _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, SnapConstants.SnapAppDllFilename) + _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, SnapConstants.SnapAppYamlFilename) }.Select(x => x.ForwardSlashesSafe()).ToList(); Assert.Equal(assemblies, _snapPack.AlwaysRemoveTheseAssemblies); @@ -81,7 +81,7 @@ public void TestNeverGenerateBsDiffsTheseAssemblies() { var assemblies = new List { - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename) + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename) }.Select(x => x.ForwardSlashesSafe()).ToList(); Assert.Equal(assemblies, _snapPack.NeverGenerateBsDiffsTheseAssemblies); @@ -200,7 +200,7 @@ public async Task TestBuildPackageAsync_Genesis() genesisSnapReleaseBuilder.AssertSnapReleaseIsGenesis(genesisPackageContext.FullPackageSnapRelease); genesisSnapReleaseBuilder.AssertSnapReleaseFiles(genesisPackageContext.FullPackageSnapRelease, _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -292,7 +292,7 @@ public async Task TestBuildPackageAsync_Removes_Snap_Asset_Assemblies() genesisSnapReleaseBuilder.AssertSnapReleaseIsGenesis(genesisPackageContext.FullPackageSnapRelease); genesisSnapReleaseBuilder.AssertSnapReleaseFiles(genesisPackageContext.FullPackageSnapRelease, _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -334,7 +334,7 @@ public async Task TestBuildPackageAsync_Delta_Only_Contains_Default_Channel() var genesisFiles = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -364,7 +364,7 @@ public async Task TestBuildPackageAsync_Delta_Only_Contains_Default_Channel() update1SnapReleaseBuilder.AssertDeltaChangeset(update1PackageContext.DeltaPackageSnapRelease, modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -412,7 +412,7 @@ public async Task TestBuildPackageAsync_Delta_First_File_Has_Data_Then_Second_Is update1SnapReleaseBuilder.AssertDeltaChangeset(update1PackageContext.DeltaPackageSnapRelease, modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, "empty.dll").ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: @@ -466,7 +466,7 @@ public async Task TestBuildPackageAsync_Delta_First_File_Is_Empty_Second_Is_Empt update1SnapReleaseBuilder.AssertDeltaChangeset(update1PackageContext.DeltaPackageSnapRelease, modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -516,7 +516,7 @@ public async Task TestBuildPackageAsync_Delta_First_File_Is_Empty_Second_Has_Dat update1SnapReleaseBuilder.AssertDeltaChangeset(update1PackageContext.DeltaPackageSnapRelease, modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, "empty.dll").ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: @@ -581,7 +581,7 @@ public async Task TestBuildPackageAsync_Delta_First_File_Has_Data_Second_Is_Empt update2SnapReleaseBuilder.AssertDeltaChangeset(update2PackageContext.DeltaPackageSnapRelease, modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, "empty.dll").ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: @@ -640,7 +640,7 @@ public async Task TestBuildPackageAsync_Delta_New_File_Is_Added() var genesisFiles = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -669,7 +669,7 @@ public async Task TestBuildPackageAsync_Delta_New_File_Is_Added() ], modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -717,7 +717,7 @@ public async Task TestBuildPackageAsync_Delta_Existing_File_Main_Executable_Is_M var genesisFiles = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibPalRelativePath()).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), @@ -743,7 +743,7 @@ public async Task TestBuildPackageAsync_Delta_Existing_File_Main_Executable_Is_M update1SnapReleaseBuilder.AssertDeltaChangeset(update1PackageContext.DeltaPackageSnapRelease, modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -790,7 +790,7 @@ public async Task TestBuildPackageAsync_Delta_Existing_File_Is_Modified() var genesisFiles = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -815,7 +815,7 @@ public async Task TestBuildPackageAsync_Delta_Existing_File_Is_Modified() update1SnapReleaseBuilder.AssertDeltaChangeset(update1PackageContext.DeltaPackageSnapRelease, modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, "test.dll").ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: @@ -863,7 +863,7 @@ public async Task TestBuildPackageAsync_Delta_Existing_File_Is_Deleted() var genesisFiles = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -894,7 +894,7 @@ public async Task TestBuildPackageAsync_Delta_Existing_File_Is_Deleted() ], modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -954,7 +954,7 @@ public async Task TestBuildPackageAsync_Delta_New_File_Per_Release() var genesisFiles = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -986,7 +986,7 @@ public async Task TestBuildPackageAsync_Delta_New_File_Per_Release() ], modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -1014,7 +1014,7 @@ public async Task TestBuildPackageAsync_Delta_New_File_Per_Release() ], modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -1081,7 +1081,7 @@ public async Task TestBuildPackageAsync_Delta_New_Modified_Deleted_New() var update3Files = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -1110,7 +1110,7 @@ public async Task TestBuildPackageAsync_Delta_New_Modified_Deleted_New() update3SnapReleaseBuilder.AssertDeltaChangeset(update3PackageContext.DeltaPackageSnapRelease, [update3Files.Last()], - modifiedNuspecTargetPaths: [_snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + modifiedNuspecTargetPaths: [_snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ @@ -1175,7 +1175,7 @@ public async Task TestRebuildPackageAsync() var update3Files = new[] { _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe(), + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.StubExeFileName).ForwardSlashesSafe(), _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, genesisSnapReleaseBuilder.GetLibBsdiffRelativePath()).ForwardSlashesSafe(), @@ -1208,7 +1208,7 @@ public async Task TestRebuildPackageAsync() ], modifiedNuspecTargetPaths: [ - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() ], unmodifiedNuspecTargetPaths: [ diff --git a/src/Snap/Core/SnapAppReader.cs b/src/Snap/Core/SnapAppReader.cs index 77ccdd2c..0322228f 100644 --- a/src/Snap/Core/SnapAppReader.cs +++ b/src/Snap/Core/SnapAppReader.cs @@ -18,9 +18,9 @@ namespace Snap.Core; internal interface ISnapAppReader { SnapApps BuildSnapAppsFromYamlString(string yamlString); - SnapApp BuildSnapAppFromStream(MemoryStream stream); + SnapApp BuildSnapAppFromStream(Stream stream); SnapApp BuildSnapAppFromYamlString(string yamlString); - ValueTask BuildSnapAppsReleasesFromStreamAsync(MemoryStream stream); + ValueTask BuildSnapAppsReleasesFromStreamAsync(Stream stream); } internal sealed class SnapAppReader : ISnapAppReader @@ -61,16 +61,11 @@ static IDeserializer Build(DeserializerBuilder builder) .Build(); } - public SnapApps BuildSnapAppsFromStream([NotNull] MemoryStream stream) + public SnapApp BuildSnapAppFromStream([NotNull] Stream stream) { - if (stream == null) throw new ArgumentNullException(nameof(stream)); - return BuildSnapAppsFromYamlString(Encoding.UTF8.GetString(stream.ToArray())); - } - - public SnapApp BuildSnapAppFromStream([NotNull] MemoryStream stream) - { - if (stream == null) throw new ArgumentNullException(nameof(stream)); - return BuildSnapAppFromYamlString(Encoding.UTF8.GetString(stream.ToArray())); + ArgumentNullException.ThrowIfNull(stream); + var textReader = new StreamReader(stream, Encoding.UTF8); + return BuildSnapAppFromYamlString(textReader.ReadToEnd()); } public SnapApp BuildSnapAppFromYamlString(string yamlString) @@ -79,7 +74,7 @@ public SnapApp BuildSnapAppFromYamlString(string yamlString) return DeserializerSnapApp.Deserialize(yamlString); } - public ValueTask BuildSnapAppsReleasesFromStreamAsync([NotNull] MemoryStream stream) + public ValueTask BuildSnapAppsReleasesFromStreamAsync([NotNull] Stream stream) { if (stream == null) throw new ArgumentNullException(nameof(stream)); return MessagePackSerializer.DeserializeAsync(stream, MessagePackSerializerOptions.Standard.WithCompression(MessagePackCompression.Lz4BlockArray)); @@ -90,4 +85,4 @@ public SnapApps BuildSnapAppsFromYamlString([NotNull] string yamlString) if (string.IsNullOrWhiteSpace(yamlString)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(yamlString)); return DeserializerSnapApps.Deserialize(yamlString); } -} \ No newline at end of file +} diff --git a/src/Snap/Core/SnapAppWriter.cs b/src/Snap/Core/SnapAppWriter.cs index 9dbde36b..91c84228 100644 --- a/src/Snap/Core/SnapAppWriter.cs +++ b/src/Snap/Core/SnapAppWriter.cs @@ -1,23 +1,20 @@ using System; +using System.IO; using System.Text; using JetBrains.Annotations; using MessagePack; -using Mono.Cecil; -using Snap.Attributes; using Snap.Core.Models; using Snap.Core.Yaml.Emitters; using Snap.Core.Yaml.TypeConverters; -using Snap.Reflection; using YamlDotNet.Serialization; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.NamingConventions; -using EmbeddedResource = Mono.Cecil.EmbeddedResource; namespace Snap.Core; internal interface ISnapAppWriter { - AssemblyDefinition BuildSnapAppAssembly(SnapApp snapsApp); + MemoryStream BuildSnapApp(SnapApp snapsApp); string ToSnapAppYamlString(SnapApp snapApp); string ToSnapAppsYamlString(SnapApps snapApps); byte[] ToSnapAppsReleases(SnapAppsReleases snapAppsApps); @@ -49,7 +46,7 @@ static ISerializer Build(SerializerBuilder serializerBuilder) .Build(); } - public AssemblyDefinition BuildSnapAppAssembly([NotNull] SnapApp snapApp) + public MemoryStream BuildSnapApp([NotNull] SnapApp snapApp) { if (snapApp == null) throw new ArgumentNullException(nameof(snapApp)); @@ -102,22 +99,11 @@ public AssemblyDefinition BuildSnapAppAssembly([NotNull] SnapApp snapApp) } } - var snapAppYamlStr = ToSnapAppYamlString(snapApp); - var currentVersion = snapApp.Version; - - var assembly = AssemblyDefinition.CreateAssembly( - new AssemblyNameDefinition(SnapConstants.SnapAppLibraryName, new Version(currentVersion.Major, - currentVersion.Minor, currentVersion.Patch)), SnapConstants.SnapAppLibraryName, ModuleKind.Dll); - - var assemblyReflector = new CecilAssemblyReflector(assembly); - - var snapAppReleaseDetailsAttributeMethodDefinition = assemblyReflector.MainModule.ImportReference( - typeof(SnapAppReleaseDetailsAttribute).GetConstructor(Type.EmptyTypes)); - - assemblyReflector.AddCustomAttribute(new CustomAttribute(snapAppReleaseDetailsAttributeMethodDefinition)); - assemblyReflector.AddResource(new EmbeddedResource(SnapConstants.SnapAppLibraryName, ManifestResourceAttributes.Public, Encoding.UTF8.GetBytes(snapAppYamlStr))); - - return assembly; + var yaml = ToSnapAppYamlString(snapApp); + var memoryStream = new MemoryStream(); + memoryStream.Write(Encoding.UTF8.GetBytes(yaml)); + memoryStream.Seek(0, SeekOrigin.Begin); + return memoryStream; } public string ToSnapAppYamlString([NotNull] SnapApp snapApp) diff --git a/src/Snap/Core/SnapConstants.cs b/src/Snap/Core/SnapConstants.cs index 495579ea..315829d5 100644 --- a/src/Snap/Core/SnapConstants.cs +++ b/src/Snap/Core/SnapConstants.cs @@ -9,7 +9,7 @@ internal static class SnapConstants { public static readonly string SnapAppLibraryName = "Snap.App"; public static readonly string SnapDllFilename = "Snap.dll"; - public static string SnapAppDllFilename => $"{SnapAppLibraryName}.dll"; + public static string SnapAppYamlFilename => $"{SnapAppLibraryName}.yaml"; public static string SetupNupkgFilename = "Setup.nupkg"; public const string Sha256EmptyFileChecksum = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; @@ -30,4 +30,4 @@ static string BuildSnapNuspecUniqueFolderName() return assemblyGuid.ToString("N"); } -} \ No newline at end of file +} diff --git a/src/Snap/Core/SnapCryptoProvider.cs b/src/Snap/Core/SnapCryptoProvider.cs index a44bfcab..aa459726 100644 --- a/src/Snap/Core/SnapCryptoProvider.cs +++ b/src/Snap/Core/SnapCryptoProvider.cs @@ -6,7 +6,6 @@ using System.Security.Cryptography; using System.Text; using JetBrains.Annotations; -using Mono.Cecil; using NuGet.Packaging; using NuGet.Packaging.Core; using Snap.Core.Models; @@ -19,7 +18,6 @@ internal interface ISnapCryptoProvider string Sha256(byte[] content); string Sha256(Stream content); string Sha256(StringBuilder content, Encoding encoding); - string Sha256(AssemblyDefinition assemblyDefinition); string Sha256(SnapRelease snapRelease, IPackageCoreReader packageCoreReader, ISnapPack snapPack); string Sha256(SnapRelease snapRelease, PackageBuilder packageBuilder); } @@ -62,15 +60,6 @@ public string Sha256([NotNull] StringBuilder content, [NotNull] Encoding encodin return Sha256(encoding.GetBytes(content.ToString())); } - public string Sha256([NotNull] AssemblyDefinition assemblyDefinition) - { - if (assemblyDefinition == null) throw new ArgumentNullException(nameof(assemblyDefinition)); - using var outputStream = new MemoryStream(); - assemblyDefinition.Write(outputStream); - outputStream.Seek(0, SeekOrigin.Begin); - return Sha256(outputStream); - } - public string Sha256(SnapRelease snapRelease, [NotNull] IPackageCoreReader packageCoreReader, [NotNull] ISnapPack snapPack) { if (snapRelease == null) throw new ArgumentNullException(nameof(snapRelease)); @@ -160,4 +149,4 @@ static IEnumerable GetChecksumFilesForSnapRelease(SnapRelea var files = snapRelease.IsDelta ? snapRelease.New.Concat(snapRelease.Modified).ToList() : snapRelease.Files; return files.OrderBy(x => x.NuspecTargetPath, new OrdinalIgnoreCaseComparer()); } -} \ No newline at end of file +} diff --git a/src/Snap/Core/SnapFilesystem.cs b/src/Snap/Core/SnapFilesystem.cs index 8dd7290b..3800ffee 100644 --- a/src/Snap/Core/SnapFilesystem.cs +++ b/src/Snap/Core/SnapFilesystem.cs @@ -7,7 +7,6 @@ using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; -using Mono.Cecil; using Snap.Core.IO; using Snap.Extensions; using Snap.Logging; @@ -50,7 +49,6 @@ internal interface ISnapFilesystem FileStream FileRead(string fileName, int bufferSize = 8196, bool useAsync = true); FileStream FileReadWrite(string fileName, bool overwrite = true); FileStream FileWrite(string fileName, bool overwrite = true); - Task FileReadAssemblyDefinitionAsync(string filename, CancellationToken cancellationToken); bool FileExists(string fileName); void FileExistsThrowIfNotExists(string fileName); FileInfo FileStat(string fileName); @@ -152,19 +150,6 @@ public FileStream FileWrite([NotNull] string fileName, bool overwrite = true) return fileStream; } - public async Task FileReadAssemblyDefinitionAsync([NotNull] string filename, CancellationToken cancellationToken) - { - if (filename == null) throw new ArgumentNullException(nameof(filename)); - - if (!FileExists(filename)) - { - throw new FileNotFoundException(filename); - } - - var srcStream = await FileReadAsync(filename, cancellationToken); - return AssemblyDefinition.ReadAssembly(srcStream); - } - public bool FileExists([NotNull] string fileName) { if (fileName == null) throw new ArgumentNullException(nameof(fileName)); @@ -607,4 +592,4 @@ public string DirectoryGetParent([NotNull] string path) return parentDirectory; } -} \ No newline at end of file +} diff --git a/src/Snap/Core/SnapInstaller.cs b/src/Snap/Core/SnapInstaller.cs index 9cb5963d..9179a7e4 100644 --- a/src/Snap/Core/SnapInstaller.cs +++ b/src/Snap/Core/SnapInstaller.cs @@ -299,15 +299,15 @@ async Task ChmodAsync(string exePath) } } - var snapAppDllAbsolutePath = _snapOs.Filesystem.PathCombine(appDirectory, SnapConstants.SnapAppDllFilename); + var snapAppDllAbsolutePath = _snapOs.Filesystem.PathCombine(appDirectory, SnapConstants.SnapAppYamlFilename); try { logger?.Info($"Updating {snapAppDllAbsolutePath}. Current channel is: {snapChannel.Name}."); - using var snapAppDllAssemblyDefinition = _snapAppWriter.BuildSnapAppAssembly(snapApp); + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapApp); await using var snapAPpDllDestinationStream = _snapOs.Filesystem.FileWrite(snapAppDllAbsolutePath); - snapAppDllAssemblyDefinition.Write(snapAPpDllDestinationStream); + await snapAppYamlStream.CopyToAsync(snapAPpDllDestinationStream, cancellationToken); } catch(Exception e) { diff --git a/src/Snap/Core/SnapPack.cs b/src/Snap/Core/SnapPack.cs index b6009fae..23cdfc90 100644 --- a/src/Snap/Core/SnapPack.cs +++ b/src/Snap/Core/SnapPack.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; using System.Xml.Linq; using JetBrains.Annotations; -using Mono.Cecil; using NuGet.Frameworks; using NuGet.Packaging; using NuGet.Packaging.Core; @@ -19,7 +18,6 @@ using Snap.Core.Models; using Snap.Extensions; using Snap.NuGet; -using Snap.Reflection; namespace Snap.Core; @@ -117,12 +115,12 @@ internal sealed class SnapPack : ISnapPack public IReadOnlyCollection AlwaysRemoveTheseAssemblies => new List { _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, SnapConstants.SnapDllFilename).ForwardSlashesSafe(), - _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecRootTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() }; public IReadOnlyCollection NeverGenerateBsDiffsTheseAssemblies => new List { - _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename).ForwardSlashesSafe() + _snapFilesystem.PathCombine(SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename).ForwardSlashesSafe() }; public SnapPack(ISnapFilesystem snapFilesystem, @@ -366,33 +364,6 @@ await BuildFullPackageAsyncInternal(packageDetails, snapAppChannelReleases, snap } fullSnapRelease.Files.Remove(removeThisAssembly); - - if (!targetPath.EndsWith(SnapConstants.SnapDllFilename)) return; - - using var snapAssemblyDefinition = AssemblyDefinition.ReadAssembly(packageFile.GetStream()); - var cecil = new CecilAssemblyReflector(snapAssemblyDefinition); - var snapAssemblyInformationalVersionAttribute = cecil - .GetAttribute(); - - if (snapAssemblyInformationalVersionAttribute == null) - { - throw new Exception($"Failed to get assembly version from {targetPath}."); - } - - var snapAssemblyInformationVersionValue = snapAssemblyInformationalVersionAttribute.Values.First().Value; - - if (!SemanticVersion.TryParse(snapAssemblyInformationVersionValue, out var snapAssemblyVersion)) - { - throw new Exception($"Failed to parse assembly version: {snapAssemblyInformationVersionValue}. Target path: {targetPath}"); - } - - if (snapAssemblyVersion != _snapDllVersion) - { - throw new Exception( - $"Invalid {SnapConstants.SnapDllFilename} version. " + - $"Expected: {Snapx.Version} but was {snapAssemblyInformationVersionValue}. " + - "You must either upgrade snapx dotnet cli tool or the Snapx.Core nuget package in your csproj."); - } }); await AddSnapAssetsAsync(snapPackageDetails, packageBuilder, fullSnapApp, fullSnapRelease, cancellationToken); @@ -837,7 +808,7 @@ async Task ApplyDeltaPackageAsync(SnapRelease deltaRelease, bool skipChecksum = var snapApp = await GetSnapAppAsync(packageArchiveReader, cancellationToken); if (snapApp == null) { - throw new FileNotFoundException(SnapConstants.SnapAppDllFilename); + throw new FileNotFoundException(SnapConstants.SnapAppYamlFilename); } var packageBuilder = new PackageBuilder(); @@ -909,12 +880,12 @@ async Task AddSnapAssetsAsync([NotNull] ISnapPackageDetails snapNuspecDetails, [ var (stubExeFileStream, stubExeFileName) = snapApp.GetStubExeStream(_snapFilesystem, AppContext.BaseDirectory); AddPackageFile(packageBuilder, stubExeFileStream, SnapConstants.NuspecAssetsTargetPath, stubExeFileName, snapRelease); - // Snap.App.dll - using var snapAppDllAssembly = _snapAppWriter.BuildSnapAppAssembly(snapApp); + // Snap.App.yaml + using var snapAppYamlStream = _snapAppWriter.BuildSnapApp(snapApp); var snapAppMemoryStream = new MemoryStream(); - snapAppDllAssembly.Write(snapAppMemoryStream); + await snapAppYamlStream.CopyToAsync(snapAppMemoryStream, cancellationToken); - AddPackageFile(packageBuilder, snapAppMemoryStream, SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppDllFilename, snapRelease); + AddPackageFile(packageBuilder, snapAppMemoryStream, SnapConstants.NuspecAssetsTargetPath, SnapConstants.SnapAppYamlFilename, snapRelease); } (MemoryStream nuspecStream, List<(string filename, string targetPath)> packageFiles) BuildNuspec([NotNull] MemoryStream nuspecStream, SnapApp snapApp, [NotNull] Func propertyProvider, [NotNull] string baseDirectory) @@ -1149,10 +1120,9 @@ public MemoryStream BuildReleasesPackage(SnapApp snapApp, SnapAppsReleases snapA public async Task GetSnapAppAsync(IAsyncPackageCoreReader asyncPackageCoreReader, CancellationToken cancellationToken = default) { - if (asyncPackageCoreReader == null) throw new ArgumentNullException(nameof(asyncPackageCoreReader)); - await using var assemblyStream = await GetSnapAssetAsync(asyncPackageCoreReader, SnapConstants.SnapAppDllFilename, cancellationToken); - using var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyStream, new ReaderParameters(ReadingMode.Immediate)); - var snapApp = assemblyDefinition.GetSnapApp(_snapAppReader); + ArgumentNullException.ThrowIfNull(asyncPackageCoreReader); + await using var assemblyStream = await GetSnapAssetAsync(asyncPackageCoreReader, SnapConstants.SnapAppYamlFilename, cancellationToken); + var snapApp = _snapAppReader.BuildSnapAppFromStream(assemblyStream); return snapApp; } @@ -1323,4 +1293,4 @@ string NuspecPropertyProvider(string propertyName) return (nuspecProperties, NuspecPropertyProvider); } -} \ No newline at end of file +} diff --git a/src/Snap/Extensions/CecilExtensions.cs b/src/Snap/Extensions/CecilExtensions.cs deleted file mode 100644 index 16680e43..00000000 --- a/src/Snap/Extensions/CecilExtensions.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Linq.Expressions; -using JetBrains.Annotations; -using Mono.Cecil; - -namespace Snap.Extensions; - -internal static class CecilExtensions -{ - const string ExpressionCannotBeNullMessage = "The expression cannot be null"; - const string InvalidExpressionMessage = "Invalid expression"; - - public static byte[] ToByteArray([NotNull] this AssemblyDefinition assemblyDefinition, WriterParameters writerParameters = null) - { - if (assemblyDefinition == null) throw new ArgumentNullException(nameof(assemblyDefinition)); - using var srcStream = new MemoryStream(); - assemblyDefinition.Write(srcStream, writerParameters ?? new WriterParameters()); - return srcStream.ToArray(); - } - - public static string BuildMemberName(this Expression> expression) - { - return BuildMemberName(expression.Body); - } - - public static string BuildPropertyGetterSyntax(this Expression> expression) - { - var propertyName = expression.BuildMemberName(); - return $"get_{propertyName}"; - } - - public static string BuildPropertySetterSyntax(this Expression> expression) - { - var propertyName = expression.BuildMemberName(); - return $"set_{propertyName}"; - } - - public static TypeDefinition ResolveTypeDefinition([NotNull] this AssemblyDefinition assemblyDefinition) - { - return ResolveTypeDefinitionImpl(assemblyDefinition); - } - - public static (TypeDefinition typeDefinition, PropertyDefinition propertyDefinition, string getterName, string setterName) ResolveAutoProperty([NotNull] this AssemblyDefinition assemblyDefinition, [NotNull] Expression> selector) - { - if (assemblyDefinition == null) throw new ArgumentNullException(nameof(assemblyDefinition)); - if (selector == null) throw new ArgumentNullException(nameof(selector)); - - var getter = selector.BuildPropertyGetterSyntax(); - var setter = selector.BuildPropertySetterSyntax(); - - var typeDefinition = assemblyDefinition.ResolveTypeDefinition(); - var propertyDefinition = typeDefinition?.Properties.SingleOrDefault(m => - m.GetMethod?.Name == getter || m.SetMethod?.Name == setter); - - return (typeDefinition, propertyDefinition, getter, setter); - } - - static string BuildMemberName(Expression expression) - { - return expression switch - { - null => throw new ArgumentException(ExpressionCannotBeNullMessage), - MemberExpression memberExpression => - // Reference type property or field - memberExpression.Member.Name, - MethodCallExpression methodCallExpression => - // Reference type method - methodCallExpression.Method.Name, - UnaryExpression unaryExpression => - // Property, field of method returning value type - BuildMemberName(unaryExpression), - _ => throw new ArgumentException(InvalidExpressionMessage) - }; - } - - static string BuildMemberName(UnaryExpression unaryExpression) - { - if (unaryExpression.Operand is MethodCallExpression methodExpression) - { - return methodExpression.Method.Name; - } - - return ((MemberExpression)unaryExpression.Operand).Member.Name; - } - - static TypeDefinition ResolveTypeDefinitionImpl([NotNull] AssemblyDefinition assemblyDefinition) - { - var tSourceFullName = typeof(T).FullName; - var tSource = assemblyDefinition.MainModule.Types.SingleOrDefault(x => x.FullName == tSourceFullName); - return tSource; - } -} \ No newline at end of file diff --git a/src/Snap/Extensions/SnapExtensions.cs b/src/Snap/Extensions/SnapExtensions.cs index 1a927d7e..930948a7 100644 --- a/src/Snap/Extensions/SnapExtensions.cs +++ b/src/Snap/Extensions/SnapExtensions.cs @@ -6,14 +6,11 @@ using System.Runtime.InteropServices; using System.Text.RegularExpressions; using JetBrains.Annotations; -using Mono.Cecil; using NuGet.Configuration; using NuGet.Packaging.Core; -using Snap.Attributes; using Snap.Core; using Snap.Core.Models; using Snap.NuGet; -using Snap.Reflection; namespace Snap.Extensions; @@ -801,48 +798,20 @@ internal static List BuildSnapFeeds([NotNull] this INuGetPackageS return snapFeeds; } - internal static SnapApp GetSnapApp([NotNull] this AssemblyDefinition assemblyDefinition, [NotNull] ISnapAppReader snapAppReader) - { - if (assemblyDefinition == null) throw new ArgumentNullException(nameof(assemblyDefinition)); - if (snapAppReader == null) throw new ArgumentNullException(nameof(snapAppReader)); - - var assemblyReflector = new CecilAssemblyReflector(assemblyDefinition); - - var snapReleaseDetailsAttribute = assemblyReflector.GetAttribute(); - if (snapReleaseDetailsAttribute == null) - { - throw new Exception($"Unable to find {nameof(SnapAppReleaseDetailsAttribute)} in assembly {assemblyReflector.FullName}"); - } - - var snapSpecResource = assemblyReflector.MainModule.Resources.SingleOrDefault(x => x.Name == SnapConstants.SnapAppLibraryName); - if (!(snapSpecResource is EmbeddedResource snapSpecEmbeddedResource)) - { - throw new Exception($"Unable to find resource {SnapConstants.SnapAppLibraryName} in assembly {assemblyReflector.FullName}"); - } - - using var resourceStream = snapSpecEmbeddedResource.GetResourceStream(); - using var snapAppMemoryStream = new MemoryStream(); - resourceStream.CopyTo(snapAppMemoryStream); - snapAppMemoryStream.Seek(0, SeekOrigin.Begin); - - return snapAppReader.BuildSnapAppFromStream(snapAppMemoryStream); - } - internal static SnapApp GetSnapAppFromDirectory([NotNull] this string workingDirectory, [NotNull] ISnapFilesystem filesystem, [NotNull] ISnapAppReader snapAppReader) { - if (workingDirectory == null) throw new ArgumentNullException(nameof(workingDirectory)); - if (filesystem == null) throw new ArgumentNullException(nameof(filesystem)); - if (snapAppReader == null) throw new ArgumentNullException(nameof(snapAppReader)); + ArgumentNullException.ThrowIfNull(workingDirectory); + ArgumentNullException.ThrowIfNull(filesystem); + ArgumentNullException.ThrowIfNull(snapAppReader); - var snapAppDll = filesystem.PathCombine(workingDirectory, SnapConstants.SnapAppDllFilename); + var snapAppDll = filesystem.PathCombine(workingDirectory, SnapConstants.SnapAppYamlFilename); if (!filesystem.FileExists(snapAppDll)) { throw new FileNotFoundException(snapAppDll); } - - using var snapAppDllFileStream = new FileStream(snapAppDll, FileMode.Open, FileAccess.Read, FileShare.Read); - using var snapAppDllAssemblyDefinition = AssemblyDefinition.ReadAssembly(snapAppDllFileStream); - return snapAppDllAssemblyDefinition.GetSnapApp(snapAppReader); + + var yaml = filesystem.FileReadAllText(snapAppDll); + return snapAppReader.BuildSnapAppFromYamlString(yaml); } internal static void GetStubExeFullPath([NotNull] this SnapApp snapApp, [NotNull] ISnapFilesystem snapFilesystem, [NotNull] string baseDirectory, out string stubExeFullPath) diff --git a/src/Snap/Reflection/CecilAssemblyReflector.cs b/src/Snap/Reflection/CecilAssemblyReflector.cs deleted file mode 100644 index 0893ef12..00000000 --- a/src/Snap/Reflection/CecilAssemblyReflector.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using JetBrains.Annotations; -using Mono.Cecil; -using Snap.Extensions; -using Snap.Reflection.Exceptions; - -namespace Snap.Reflection; - -internal interface IAssemblyReflector -{ - string Location { get; } - string FileName { get; } - string FullName { get; } - ModuleDefinition MainModule {get;} - IEnumerable GetAttributes() where T : Attribute; - IAttributeReflector GetAttribute() where T : Attribute; - IEnumerable GetTypes(); - CecilResourceReflector GetResourceReflector(); - void AddResource(EmbeddedResource embeddedResource); - void AddCustomAttribute(CustomAttribute attribute); - void RewriteOrThrow(Expression> selector, Action rewriter); -} - -internal class CecilAssemblyReflector([NotNull] AssemblyDefinition assemblyDefinition) : IAssemblyReflector -{ - readonly AssemblyDefinition _assemblyDefinition = assemblyDefinition ?? throw new ArgumentNullException(nameof(assemblyDefinition)); - - public string Location => _assemblyDefinition.MainModule.FileName; - public string FileName => _assemblyDefinition.MainModule.Name; - public string FullName => _assemblyDefinition.FullName; - public ModuleDefinition MainModule => _assemblyDefinition.MainModule; - - public IEnumerable GetAttributes() where T : Attribute - { - if (!_assemblyDefinition.HasCustomAttributes) - { - return Array.Empty(); - } - - var expectedTypeName = typeof(T).Name; - return _assemblyDefinition.CustomAttributes - .Where(a => a.AttributeType.Name == expectedTypeName) - .Select(a => new CecilAttributeReflector(a)) - .ToList(); - } - - public IAttributeReflector GetAttribute() where T : Attribute - { - return GetAttributes().SingleOrDefault(); - } - - public IEnumerable GetTypes() - { - var result = new List(); - var modules = _assemblyDefinition.Modules; - foreach (var module in modules) - { - var types = module.GetTypes(); - result.AddRange(types.Select(type => new CecilTypeReflector(type))); - } - return result; - } - - public CecilResourceReflector GetResourceReflector() - { - return new(_assemblyDefinition); - } - - public void AddCustomAttribute([NotNull] CustomAttribute attribute) - { - if (attribute == null) throw new ArgumentNullException(nameof(attribute)); - _assemblyDefinition.CustomAttributes.Add(attribute); - } - - public void AddResource([NotNull] EmbeddedResource embeddedResource) - { - if (embeddedResource == null) throw new ArgumentNullException(nameof(embeddedResource)); - _assemblyDefinition.MainModule.Resources.Add(embeddedResource); - } - - public void RewriteOrThrow([NotNull] Expression> selector, - [NotNull] Action rewriter) - { - if (selector == null) throw new ArgumentNullException(nameof(selector)); - if (rewriter == null) throw new ArgumentNullException(nameof(rewriter)); - - var (typeDefinition, autoPropertyDefinition, setterName, getterName) = _assemblyDefinition.ResolveAutoProperty(selector); - if (autoPropertyDefinition == null) - { - throw new CecilAutoPropertyNotFoundException(_assemblyDefinition, selector.BuildMemberName()); - } - - rewriter(typeDefinition, getterName, setterName, autoPropertyDefinition); - } -} \ No newline at end of file diff --git a/src/Snap/Reflection/CecilAttributeReflector.cs b/src/Snap/Reflection/CecilAttributeReflector.cs deleted file mode 100644 index 99314b78..00000000 --- a/src/Snap/Reflection/CecilAttributeReflector.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using Mono.Cecil; - -namespace Snap.Reflection; - -internal interface IAttributeReflector -{ - IDictionary Values { get; } -} - -internal class CecilAttributeReflector([NotNull] CustomAttribute attribute) : IAttributeReflector -{ - readonly CustomAttribute _attribute = attribute ?? throw new ArgumentNullException(nameof(attribute)); - IDictionary _values; - - public IDictionary Values - { - get - { - if (_values != null) - { - return _values; - } - - _values = new Dictionary(); - var constructorArguments = _attribute.Constructor.Resolve().Parameters.Select(p => p.Name).ToList(); - var constructorParameters = _attribute.ConstructorArguments.Select(a => a.Value.ToString()).ToList(); - for (var i = 0; i < constructorArguments.Count; i++) - { - _values.Add(constructorArguments[i], constructorParameters[i]); - } - - foreach (var prop in _attribute.Properties) - { - _values.Add(prop.Name, prop.Argument.Value.ToString()); - } - - return _values; - } - } -} \ No newline at end of file diff --git a/src/Snap/Reflection/CecilResourceReflector.cs b/src/Snap/Reflection/CecilResourceReflector.cs deleted file mode 100644 index 3b13bc21..00000000 --- a/src/Snap/Reflection/CecilResourceReflector.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using Mono.Cecil; -using Snap.Reflection.Exceptions; - -namespace Snap.Reflection; - -internal interface IResourceReflector -{ - IEnumerable GetResources(); - void RemoveOrThrow([NotNull] string name); - void RemoveAllOrThrow(string @namespace); -} - -internal class CecilResourceReflector([NotNull] AssemblyDefinition assemblyDefinition) : IResourceReflector -{ - readonly AssemblyDefinition _assemblyDefinition = assemblyDefinition ?? throw new ArgumentNullException(nameof(assemblyDefinition)); - - public IEnumerable GetResources() - { - return _assemblyDefinition.MainModule.Resources; - } - - public void RemoveOrThrow(string name) - { - if (name == null) throw new ArgumentNullException(nameof(name)); - var resource = GetResources().SingleOrDefault(x => x.Name == name); - if (resource == null) - { - throw new CecilResourceNotFoundException(_assemblyDefinition, name); - } - - _assemblyDefinition.MainModule.Resources.Remove(resource); - } - - public void RemoveAllOrThrow(string @namespace) - { - var resourcesRemoved = 0; - foreach (var resource in GetResources().Where(x => @namespace == null || x.Name.StartsWith(@namespace)).ToList()) - { - RemoveOrThrow(resource.Name); - resourcesRemoved++; - } - - if (resourcesRemoved <= 0) - { - throw new Exception($"Failed to remove any resources from assembly: {_assemblyDefinition.FullName}"); - } - } -} \ No newline at end of file diff --git a/src/Snap/Reflection/CecilTypeReflector.cs b/src/Snap/Reflection/CecilTypeReflector.cs deleted file mode 100644 index 8d458423..00000000 --- a/src/Snap/Reflection/CecilTypeReflector.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using Mono.Cecil; - -namespace Snap.Reflection; - -internal interface ITypeReflector -{ - IEnumerable GetAttributes() where T : Attribute; - string FullName { get; } - string Name { get; } -} - -internal class CecilTypeReflector([NotNull] TypeDefinition type) : ITypeReflector -{ - readonly TypeDefinition _type = type ?? throw new ArgumentNullException(nameof(type)); - - public string FullName => _type.FullName; - public string Name => _type.Name; - - public IEnumerable GetAttributes() where T : Attribute - { - if (!_type.HasCustomAttributes) - { - return Array.Empty(); - } - - var expectedTypeName = typeof(T).Name; - return _type.CustomAttributes - .Where(a => a.AttributeType.Name == expectedTypeName) - .Select(a => new CecilAttributeReflector(a)) - .ToList(); - } - -} \ No newline at end of file diff --git a/src/Snap/Reflection/Exceptions/CecilAutoPropertyNotFoundException.cs b/src/Snap/Reflection/Exceptions/CecilAutoPropertyNotFoundException.cs deleted file mode 100644 index 203b812b..00000000 --- a/src/Snap/Reflection/Exceptions/CecilAutoPropertyNotFoundException.cs +++ /dev/null @@ -1,7 +0,0 @@ -using JetBrains.Annotations; -using Mono.Cecil; - -namespace Snap.Reflection.Exceptions; - -internal class CecilAutoPropertyNotFoundException([NotNull] AssemblyDefinition assemblyDefinition, string propertyName) - : CecilReflectorException(assemblyDefinition, $"Unable to find auto property: {propertyName}"); \ No newline at end of file diff --git a/src/Snap/Reflection/Exceptions/CecilReflectorException.cs b/src/Snap/Reflection/Exceptions/CecilReflectorException.cs deleted file mode 100644 index bc123d3e..00000000 --- a/src/Snap/Reflection/Exceptions/CecilReflectorException.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using JetBrains.Annotations; -using Mono.Cecil; - -namespace Snap.Reflection.Exceptions; - -internal abstract class CecilReflectorException : Exception -{ - public AssemblyDefinition AssemblyDefinition { [UsedImplicitly] get; } - - protected CecilReflectorException([NotNull] AssemblyDefinition assemblyDefinition, [NotNull] string message) : base($"{message}. Assembly: {assemblyDefinition.FullName}.") - { - if (message == null) throw new ArgumentNullException(nameof(message)); - AssemblyDefinition = assemblyDefinition ?? throw new ArgumentNullException(nameof(assemblyDefinition)); - } -} \ No newline at end of file diff --git a/src/Snap/Reflection/Exceptions/CecilResourceNotFoundException.cs b/src/Snap/Reflection/Exceptions/CecilResourceNotFoundException.cs deleted file mode 100644 index e7308595..00000000 --- a/src/Snap/Reflection/Exceptions/CecilResourceNotFoundException.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Mono.Cecil; - -namespace Snap.Reflection.Exceptions; - -internal class CecilResourceNotFoundException(AssemblyDefinition assemblyDefinition, string resourceName) - : CecilReflectorException(assemblyDefinition, - $"Unable to find resource with name: {resourceName}. Assembly: {assemblyDefinition.FullName}"); \ No newline at end of file diff --git a/src/Snap/Snap.Deps.targets b/src/Snap/Snap.Deps.targets index e62bf510..545c82c4 100644 --- a/src/Snap/Snap.Deps.targets +++ b/src/Snap/Snap.Deps.targets @@ -1,7 +1,6 @@ - diff --git a/src/Snapx/Program.cs b/src/Snapx/Program.cs index 299d26a9..f43c56d4 100644 --- a/src/Snapx/Program.cs +++ b/src/Snapx/Program.cs @@ -771,16 +771,16 @@ async Task BuildOfflineInstallerAsync(Stream installerZipStream, Stream warpPack { if (fullNupkgAbsolutePath == null) throw new ArgumentNullException(nameof(fullNupkgAbsolutePath)); - var repackageDirSnapAppDllAbsolutePath = snapOs.Filesystem.PathCombine(repackageTempDir, SnapConstants.SnapAppDllFilename); + var repackageDirSnapAppDllAbsolutePath = snapOs.Filesystem.PathCombine(repackageTempDir, SnapConstants.SnapAppYamlFilename); var repackageDirFullNupkgAbsolutePath = snapOs.Filesystem.PathCombine(repackageTempDir, "Setup.nupkg"); var repackageDirReleasesNupkgAbsolutePath = snapOs.Filesystem.PathCombine(repackageTempDir, snapOs.Filesystem.PathGetFileName(releasesNupkgAbsolutePath)); - using var snapAppAssemblyDefinition = snapAppWriter.BuildSnapAppAssembly(snapApp); + using var snapAppYamlStream = snapAppWriter.BuildSnapApp(snapApp); await using var snapAppDllDstMemoryStream = snapOs.Filesystem.FileWrite(repackageDirSnapAppDllAbsolutePath); await using var warpPackerDstStream = snapOs.Filesystem.FileWrite(rootTempDirWarpPackerAbsolutePath); using var installerZipArchive = new ZipArchive(installerZipStream, ZipArchiveMode.Read); - snapAppAssemblyDefinition.Write(snapAppDllDstMemoryStream); + await snapAppYamlStream.CopyToAsync(snapAppDllDstMemoryStream, cancellationToken); progressSource.Raise(10); @@ -817,13 +817,13 @@ await Task.WhenAll( async Task BuildWebInstallerAsync(Stream installerZipStream, FileStream warpPackerStream) { - var repackageDirSnapAppDllAbsolutePath = snapOs.Filesystem.PathCombine(repackageTempDir, SnapConstants.SnapAppDllFilename); + var repackageDirSnapAppDllAbsolutePath = snapOs.Filesystem.PathCombine(repackageTempDir, SnapConstants.SnapAppYamlFilename); await using var warpPackerDstStream = snapOs.Filesystem.FileWrite(rootTempDirWarpPackerAbsolutePath); using var zipArchive = new ZipArchive(installerZipStream, ZipArchiveMode.Read); - using var snapAppAssemblyDefinition = snapAppWriter.BuildSnapAppAssembly(snapApp); + using var snapAppYamlStream = snapAppWriter.BuildSnapApp(snapApp); await using var snapAppDllDstMemoryStream = snapOs.Filesystem.FileWrite(repackageDirSnapAppDllAbsolutePath); - snapAppAssemblyDefinition.Write(snapAppDllDstMemoryStream); + await snapAppYamlStream.CopyToAsync(snapAppDllDstMemoryStream, cancellationToken); progressSource.Raise(10);