From da934995550b3a33b26b37c8a52b935857dc8f2a Mon Sep 17 00:00:00 2001 From: Pim Simons <32359437+pim-simons@users.noreply.github.com> Date: Fri, 4 Feb 2022 16:24:58 +0100 Subject: [PATCH] feat: Provide script to upsert an app setting within an Azure App Service (#268) Co-authored-by: Stijn Moreels <9039753+stijnmoreels@users.noreply.github.com> Co-authored-by: Pim Simons --- docs/preview/01-index.md | 1 + .../powershell/azure-app-service.md | 41 ++++++ .../Arcus.Scripting.AppService.psd1 | 127 ++++++++++++++++++ .../Arcus.Scripting.AppService.psm1 | 40 ++++++ .../Arcus.Scripting.AppService.pssproj | 39 ++++++ .../Scripts/Set-AzAppServiceSetting.ps1 | 50 +++++++ .../Arcus.Scripting.AppService.tests.ps1 | 79 +++++++++++ .../Arcus.Scripting.Tests.Integration.pssproj | 1 + .../appsettings.json | 3 + .../Arcus.Scripting.AppService.tests.ps1 | 112 +++++++++++++++ .../Arcus.Scripting.Tests.Unit.pssproj | 1 + src/Arcus.Scripting.sln | 6 + 12 files changed, 500 insertions(+) create mode 100644 docs/preview/02-Features/powershell/azure-app-service.md create mode 100644 src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psd1 create mode 100644 src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psm1 create mode 100644 src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.pssproj create mode 100644 src/Arcus.Scripting.AppService/Scripts/Set-AzAppServiceSetting.ps1 create mode 100644 src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.AppService.tests.ps1 create mode 100644 src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.AppService.tests.ps1 diff --git a/docs/preview/01-index.md b/docs/preview/01-index.md index cf671dba..e3f564cd 100644 --- a/docs/preview/01-index.md +++ b/docs/preview/01-index.md @@ -19,6 +19,7 @@ For more granular packages we recommend reading the documentation. # Features * Automate Azure API Management tasks ([powershell](features/powershell/azure-api-management)) +* Automate Azure App Service tasks ([powershell](features/powershell/azure-app-service)) * Automate Azure Data Factory tasks ([powershell](features/powershell/azure-data-factory)) * Automate Azure DevOps tasks ([powershell](features/powershell/azure-devops)) * Automate Azure Integration Account tasks ([powershell](features/powershell/azure-integration-account)) diff --git a/docs/preview/02-Features/powershell/azure-app-service.md b/docs/preview/02-Features/powershell/azure-app-service.md new file mode 100644 index 00000000..68877631 --- /dev/null +++ b/docs/preview/02-Features/powershell/azure-app-service.md @@ -0,0 +1,41 @@ +--- +title: "Azure App Service" +layout: default +--- + +# Azure App Service + +This module provides the following capabilities: +- [Set an app setting within an Azure App Service](#set-an-app-setting-within-an-azure-app-service) + +## Installation + +To have access to the following features, you have to import the module: + +```powershell +PS> Install-Module -Name Arcus.Scripting.AppService +``` + +## Set an app setting within an Azure App Service + +Create/update a single application setting within an Azure App Service. + +| Parameter | Mandatory | Description | +| ----------------------------- | ----------- | ----------------------------------------------------------------------------------------------------- | +| `ResourceGroupName` | yes | The name of the Azure resource group where the Azure Integration Account is located. | +| `AppServiceName` | yes | The name of the Azure App Service where the application setting will be created/updated. | +| `AppServiceSettingName` | yes | The name of the application setting that will be created/updated. | +| `AppServiceSettingValue` | yes | The value of the application setting that will be created/updated. | +| `PrintSettingValuesIfVerbose` | no | Indicator (switch) whether the values of the application settings will be written to the verbose log. | + +**Example** + +Setting an application setting within an Azure App Service. +```powershell +PS> Set-AzAppServiceSetting -ResourceGroupName 'my-resource-group' -AppServiceName 'my-app-service' -AppServiceSettingName 'my-app-setting' -AppServiceSettingValue 'my-value' +# Checking if the App Service with name 'my-app-service' can be found in the resource group 'my-resource-group' +# App service has been found +# Extracting the existing application settings +# Setting the application setting 'my-app-setting' +# Successfully set the application setting 'my-app-setting' of the App Service 'my-app-service' within resource group 'my-resource-group' +``` diff --git a/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psd1 b/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psd1 new file mode 100644 index 00000000..b2e2c6cd --- /dev/null +++ b/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psd1 @@ -0,0 +1,127 @@ +# +# Module manifest for module 'module' +# +# Generated by: Arcus +# +# Generated on: 5/29/2020 10:12:26 AM +# + +@{ + +# Script module or binary module file associated with this manifest. +RootModule = 'Arcus.Scripting.AppService.psm1' + +# Version number of this module. +ModuleVersion = '#{Package.Version}#' + +# ID used to uniquely identify this module +GUID = 'ef97d51b-87bb-4daa-b97c-b59f08da8009' + +# Author of this module +Author = 'Arcus' + +# Company or vendor of this module +CompanyName = '' + +# Copyright statement for this module +Copyright = '(c) 2020 Arcus. All rights reserved.' + +# Description of the functionality provided by this module +Description = 'Scripts related to Azure App Service' + +# Minimum version of the Windows PowerShell engine required by this module +PowerShellVersion = '5.1' + +# Name of the Windows PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the Windows PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module +# CLRVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +RequiredModules = @(@{ModuleName='Az.Websites'; ModuleVersion='2.9.0'}) + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +# TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +# NestedModules = @() + +# Functions to export from this module +FunctionsToExport = @( + 'Set-AzAppServiceSetting') + +# Cmdlets to export from this module +CmdletsToExport = '*' + +# Variables to export from this module +VariablesToExport = '*' + +# Aliases to export from this module +AliasesToExport = '*' + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +# FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess +PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + Tags = 'Azure','AppService', 'Arcus' + + # A URL to the license for this module. + LicenseUri = 'https://github.com/arcus-azure/arcus.scripting/blob/master/LICENSE' + + # A URL to the main website for this project. + ProjectUri = 'https://github.com/arcus-azure/arcus.scripting' + + # A URL to an icon representing this module. + IconUri = 'https://raw.githubusercontent.com/arcus-azure/arcus/master/media/arcus.png' + + # ReleaseNotes of this module + ReleaseNotes = 'https://github.com/arcus-azure/arcus.scripting/releases/tag/v#{Package.Version}#' + + # Prerelease string of this module + # Prerelease = '' + + # Flag to indicate whether the module requires explicit user acceptance for install/update/save + # RequireLicenseAcceptance = $false + + # External dependent modules of this module + # ExternalModuleDependencies = @() + + } # End of PSData hashtable + + } # End of PrivateData hashtable + + +# HelpInfo URI of this module +# HelpInfoURI = '' + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} \ No newline at end of file diff --git a/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psm1 b/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psm1 new file mode 100644 index 00000000..324e4bed --- /dev/null +++ b/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.psm1 @@ -0,0 +1,40 @@ +<# + .Synopsis + Sets the value of an application setting within an Azure App Service. + + .Description + The Set-AzAppServiceSetting cmdlet sets the value of an application setting within an Azure App Service. + + .Parameter ResourceGroupName + The name of the of resource group under which the App Service exists. + + .Parameter AppServiceName + The name of the App Service. + + .Parameter AppServiceSettingName + The name of the application setting. + + .Parameter AppServiceSettingValue + The value to be used for the application setting. + + .Parameter PrintSettingValuesIfVerbose + Indicate whether or not to print the values of the current application settings in the verbose logging. +#> +function Set-AzAppServiceSetting { + param( + [Parameter(Mandatory = $true)][string] $ResourceGroupName = $(throw "Resource group name is required"), + [Parameter(Mandatory = $true)][string] $AppServiceName = $(throw = "App Service name is required"), + [Parameter(Mandatory = $true)][string] $AppServiceSettingName = $(throw "App Service setting name is required"), + [Parameter(Mandatory = $true)][string] $AppServiceSettingValue = $(throw "App Service value is required"), + [Parameter(Mandatory = $false)][switch] $PrintSettingValuesIfVerbose = $false + ) + + if($PrintSettingValuesIfVerbose) { + . $PSScriptRoot\Scripts\Set-AzAppServiceSetting.ps1 -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue -PrintSettingValuesIfVerbose + } else { + . $PSScriptRoot\Scripts\Set-AzAppServiceSetting.ps1 -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue + } + +} + +Export-ModuleMember -Function Set-AzAppServiceSetting \ No newline at end of file diff --git a/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.pssproj b/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.pssproj new file mode 100644 index 00000000..04e9a06a --- /dev/null +++ b/src/Arcus.Scripting.AppService/Arcus.Scripting.AppService.pssproj @@ -0,0 +1,39 @@ + + + Debug + 2.0 + {342747e9-6406-4da8-b238-37335adba79c} + Exe + Arcus.Scripting.AppService + Arcus.Scripting.AppService + Arcus.Scripting.AppService + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Arcus.Scripting.AppService/Scripts/Set-AzAppServiceSetting.ps1 b/src/Arcus.Scripting.AppService/Scripts/Set-AzAppServiceSetting.ps1 new file mode 100644 index 00000000..ba03b7d5 --- /dev/null +++ b/src/Arcus.Scripting.AppService/Scripts/Set-AzAppServiceSetting.ps1 @@ -0,0 +1,50 @@ +param( + [Parameter(Mandatory = $true)][string] $ResourceGroupName = $(throw "Resource group name is required"), + [Parameter(Mandatory = $true)][string] $AppServiceName = $(throw "App Service name is required"), + [Parameter(Mandatory = $true)][string] $AppServiceSettingName = $(throw "App Service setting name is required"), + [Parameter(Mandatory = $true)][string] $AppServiceSettingValue = $(throw "App Service value is required"), + [Parameter(Mandatory = $false)][switch] $PrintSettingValuesIfVerbose = $false +) + +Write-Host "Checking if the App Service with name '$AppServiceName' can be found in the resource group '$ResourceGroupName'" +$appService = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $AppServiceName -ErrorAction Ignore + +if ($appService -eq $null) { + throw "No App Service with name '$AppServiceName' could be found in the resource group '$ResourceGroupName'" +} + +Write-Host "Azure App service has been found for name '$AppServiceName' in the resource group '$ResourceGroupName'" +Write-Host "Extracting the existing application settings from Azure App Service" +$appServiceSettings = $appService.SiteConfig.AppSettings + +$existingSettings = @{ } +Write-Verbose "Existing Azure App Service application settings:" +foreach ($setting in $appServiceSettings) { + $existingSettings[$setting.Name] = $setting.value + if ($PrintSettingValuesIfVerbose) { + Write-Verbose "$($setting.Name): $($setting.Value)" + } else { + Write-Verbose "$($setting.Name)" + } +} + +$existingSettings[$AppServiceSettingName] = $AppServiceSettingValue + +Write-Host "Setting the application setting '$AppServiceSettingName'" +try +{ + $updatedAppService = Set-AzWebApp -ResourceGroupName $ResourceGroupName -Name $appServiceName -AppSettings $existingSettings + + Write-Verbose "Updated Azure App Service settings:" + foreach ($setting in $updatedAppService.SiteConfig.AppSettings) { + if ($PrintSettingValuesIfVerbose) { + Write-Verbose "$($setting.Name): $($setting.Value)" + } else { + Write-Verbose "$($setting.Name)" + } + } +} catch { + throw "The Azure App Service settings could not be updated. Details: $($_.Exception.Message)" +} + +Write-Host "Successfully set the application setting '$AppServiceSettingName' of the Azure App Service '$AppServiceName' within Azure resource group '$ResourceGroupName'" \ No newline at end of file diff --git a/src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.AppService.tests.ps1 b/src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.AppService.tests.ps1 new file mode 100644 index 00000000..921b72b8 --- /dev/null +++ b/src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.AppService.tests.ps1 @@ -0,0 +1,79 @@ +Import-Module -Name $PSScriptRoot\..\Arcus.Scripting.AppService -ErrorAction Stop + +InModuleScope Arcus.Scripting.AppService { + Describe "Arcus Azure App Service integration tests" { + BeforeEach { + $config = & $PSScriptRoot\Load-JsonAppsettings.ps1 -fileName "appsettings.json" + & $PSScriptRoot\Connect-AzAccountFromConfig.ps1 -config $config + } + Context "Setting an Azure App Service application setting" { + It "Try to set an application setting to unexisting App Service fails" { + # Arrange + $ResourceGroupName = $config.Arcus.ResourceGroupName + $AppServiceName = "unexisting-appservice" + $AppServiceSettingName = "somesetting" + $AppServiceSettingValue = "somevalue" + + # Act + { Set-AzAppServiceSetting -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue -ErrorAction Stop } | + Should -Throw + } + It "Creating a new application setting and setting its value succeeds" { + # Arrange + $ResourceGroupName = $config.Arcus.ResourceGroupName + $AppServiceName = $config.Arcus.AppService.Name + $AppServiceSettingName = "setting-$([System.Guid]::NewGuid())" + $AppServiceSettingValue = [guid]::NewGuid() + + try { + # Act + Set-AzAppServiceSetting -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue + + # Assert + $actual = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $AppServiceName + $actual | Should -Not -BeNullOrEmpty + + $settings = @{ } + foreach ($setting in $actual.SiteConfig.AppSettings) { + $settings[$setting.Name] = $setting.value + } + + $settings[$AppServiceSettingName] | Should -BeExactly $AppServiceSettingValue + } finally { + $appService = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $AppServiceName + $appServiceSettings = $appService.SiteConfig.AppSettings + + $settingsWithoutTestSetting = @{ } + foreach ($setting in $appServiceSettings) { + if ($setting.Name -ne $AppServiceSettingName) { + $settingsWithoutTestSetting[$setting.Name] = $setting.value + } + } + + Set-AzWebApp -ResourceGroupName $ResourceGroupName -Name $appServiceName -AppSettings $settingsWithoutTestSetting + } + } + It "Update an existing application setting and setting its value succeeds" { + # Arrange + $ResourceGroupName = $config.Arcus.ResourceGroupName + $AppServiceName = $config.Arcus.AppService.Name + $AppServiceSettingName = "existing-setting" + $AppServiceSettingValue = [guid]::NewGuid() + + # Act + Set-AzAppServiceSetting -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue + + # Assert + $actual = Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $AppServiceName + $actual | Should -Not -BeNullOrEmpty + + $settings = @{ } + foreach ($setting in $actual.SiteConfig.AppSettings) { + $settings[$setting.Name] = $setting.value + } + + $settings[$AppServiceSettingName] | Should -BeExactly $AppServiceSettingValue + } + } + } +} \ No newline at end of file diff --git a/src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.Tests.Integration.pssproj b/src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.Tests.Integration.pssproj index e6f2ba1a..cf4b3fc0 100644 --- a/src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.Tests.Integration.pssproj +++ b/src/Arcus.Scripting.Tests.Integration/Arcus.Scripting.Tests.Integration.pssproj @@ -28,6 +28,7 @@ + diff --git a/src/Arcus.Scripting.Tests.Integration/appsettings.json b/src/Arcus.Scripting.Tests.Integration/appsettings.json index 047e9e19..ace0b251 100644 --- a/src/Arcus.Scripting.Tests.Integration/appsettings.json +++ b/src/Arcus.Scripting.Tests.Integration/appsettings.json @@ -18,6 +18,9 @@ "IntegrationAccount": { "Name": "#{Arcus.IntegrationAccount.Name}#" }, + "AppService": { + "Name": "#{Arcus.AppService.Name}#" + }, "Storage": { "StorageAccount": { "Name": "#{Arcus.Storage.StorageAccount.Name}#" diff --git a/src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.AppService.tests.ps1 b/src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.AppService.tests.ps1 new file mode 100644 index 00000000..72ae7ca4 --- /dev/null +++ b/src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.AppService.tests.ps1 @@ -0,0 +1,112 @@ +Import-Module -Name $PSScriptRoot\..\Arcus.Scripting.AppService -ErrorAction Stop + +InModuleScope Arcus.Scripting.AppService { + Describe "Arcus Azure App Service unit tests" { + Context "Setting an Azure App Service application setting" { + It "Providing an App Service Name that does not exist should fail" { + # Arrange + $ResourceGroupName = "rg-infrastructure" + $AppServiceName = "unexisting-appservice" + $AppServiceSettingName = "somesetting" + $AppServiceSettingValue = "somevalue" + + Mock Get-AzWebApp { + return $null + } + + # Act + { + Set-AzAppServiceSetting -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue + } | Should -Throw -ExpectedMessage "No app service with name '$AppServiceName' could be found in the resource group '$ResourceGroupName'" + + # Assert + Assert-VerifiableMock + } + It "Creating a new application setting and setting its value succeeds" { + # Arrange + $SubscriptionId = [guid]::NewGuid() + $ResourceGroupName = "rg-infrastructure" + $AppServiceName = "unexisting-appservice" + $AppServiceResourceId = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Web/sites/$AppServiceName" + $AppServiceSettingName = "newsetting" + $AppServiceSettingValue = "newvalue" + + Mock Get-AzWebApp { + return [pscustomobject]@{ Id = $AppServiceResourceId; Name = $AppServiceName; Type = 'Microsoft.Web/sites'; Location = 'West Europe'; } + } -Verifiable + + Mock Set-AzWebApp { + return [pscustomobject] @{ + Id = $AppServiceResourceId; + Name = $AppServiceName; + Type = 'Microsoft.Web/sites'; + Location = 'West Europe'; + SiteConfig = [pscustomobject] @{ + AppSettings = [pscustomobject] @{ + Name = "somesetting"; + Value = "somevalue"; + } + } + } | ConvertTo-Json -Depth 5; + } -Verifiable + + # Act + { Set-AzAppServiceSetting -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue } | + Should -Not -Throw + + # Assert + Assert-VerifiableMock + Assert-MockCalled Get-AzWebApp -Times 1 + Assert-MockCalled Set-AzWebApp -Times 1 + } + It "Updating an existing application setting and setting its value succeeds" { + # Arrange + $SubscriptionId = [guid]::NewGuid() + $ResourceGroupName = "rg-infrastructure" + $AppServiceName = "unexisting-appservice" + $AppServiceResourceId = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Web/sites/$AppServiceName" + $AppServiceSettingName = "existingsetting" + $AppServiceSettingValue = "newvalue" + + Mock Get-AzWebApp { + return [pscustomobject] @{ + Id = $AppServiceResourceId; + Name = $AppServiceName; + Type = 'Microsoft.Web/sites'; + Location = 'West Europe'; + SiteConfig = [pscustomobject] @{ + AppSettings = [pscustomobject] @{ + Name = "existingsetting"; + Value = "oldvalue"; + } + } + } | ConvertTo-Json -Depth 5; + } -Verifiable + + Mock Set-AzWebApp { + return [pscustomobject] @{ + Id = $AppServiceResourceId; + Name = $AppServiceName; + Type = 'Microsoft.Web/sites'; + Location = 'West Europe'; + SiteConfig = [pscustomobject] @{ + AppSettings = [pscustomobject] @{ + Name = "existingsetting"; + Value = "newvalue"; + } + } + } | ConvertTo-Json -Depth 5; + } -Verifiable + + # Act + { Set-AzAppServiceSetting -ResourceGroupName $ResourceGroupName -AppServiceName $AppServiceName -AppServiceSettingName $AppServiceSettingName -AppServiceSettingValue $AppServiceSettingValue } | + Should -Not -Throw + + # Assert + Assert-VerifiableMock + Assert-MockCalled Get-AzWebApp -Times 1 + Assert-MockCalled Set-AzWebApp -Times 1 + } + } + } +} \ No newline at end of file diff --git a/src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.Tests.Unit.pssproj b/src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.Tests.Unit.pssproj index 204bc212..bc18b99d 100644 --- a/src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.Tests.Unit.pssproj +++ b/src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.Tests.Unit.pssproj @@ -77,6 +77,7 @@ + diff --git a/src/Arcus.Scripting.sln b/src/Arcus.Scripting.sln index a8ffce90..936be809 100644 --- a/src/Arcus.Scripting.sln +++ b/src/Arcus.Scripting.sln @@ -37,6 +37,8 @@ Project("{F5034706-568F-408A-B7B3-4D38C6DB8A32}") = "Arcus.Scripting.All", "Arcu EndProject Project("{F5034706-568F-408A-B7B3-4D38C6DB8A32}") = "Arcus.Scripting.IntegrationAccount", "Arcus.Scripting.IntegrationAccount\Arcus.Scripting.IntegrationAccount.pssproj", "{AFCEA845-372E-4000-85FD-5672D7551527}" EndProject +Project("{F5034706-568F-408A-B7B3-4D38C6DB8A32}") = "Arcus.Scripting.AppService", "Arcus.Scripting.AppService\Arcus.Scripting.AppService.pssproj", "{342747E9-6406-4DA8-B238-37335ADBA79C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -107,6 +109,10 @@ Global {AFCEA845-372E-4000-85FD-5672D7551527}.Debug|Any CPU.Build.0 = Debug|Any CPU {AFCEA845-372E-4000-85FD-5672D7551527}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFCEA845-372E-4000-85FD-5672D7551527}.Release|Any CPU.Build.0 = Release|Any CPU + {342747E9-6406-4DA8-B238-37335ADBA79C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {342747E9-6406-4DA8-B238-37335ADBA79C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {342747E9-6406-4DA8-B238-37335ADBA79C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {342747E9-6406-4DA8-B238-37335ADBA79C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE