diff --git a/release_notes.md b/release_notes.md index 8224fe7ddc..2aea6ea9aa 100644 --- a/release_notes.md +++ b/release_notes.md @@ -10,3 +10,4 @@ - [Added net9 prelaunch app.](https://github.com/Azure/azure-functions-dotnet-worker/pull/2898) - Update the `DefaultHttpProxyService` to better handle client disconnect scenarios (#10688) - Replaced `InvalidOperationException` with `HttpForwardingException` when there is a ForwarderError +- Updated `WebJobs.Script` to target .NET 8 (instead of .NET Standard 2.1) diff --git a/src/WebJobs.Script/Binding/Http/RawScriptResult.cs b/src/WebJobs.Script/Binding/Http/RawScriptResult.cs index 3f7e3e5b84..f72474bd85 100644 --- a/src/WebJobs.Script/Binding/Http/RawScriptResult.cs +++ b/src/WebJobs.Script/Binding/Http/RawScriptResult.cs @@ -62,7 +62,7 @@ public async Task ExecuteResultAsync(ActionContext context) } else { - response.Headers.Add(header.Key, header.Value.ToString() ?? string.Empty); + response.Headers.Append(header.Key, header.Value.ToString() ?? string.Empty); } } } diff --git a/src/WebJobs.Script/Binding/Http/ScriptObjectResult.cs b/src/WebJobs.Script/Binding/Http/ScriptObjectResult.cs index bef5fd3251..d2e8cfe1ec 100644 --- a/src/WebJobs.Script/Binding/Http/ScriptObjectResult.cs +++ b/src/WebJobs.Script/Binding/Http/ScriptObjectResult.cs @@ -39,7 +39,7 @@ internal void AddResponseHeaders(HttpContext context) } else { - response.Headers.Add(header.Key, header.Value.ToString() ?? string.Empty); + response.Headers.Append(header.Key, header.Value.ToString() ?? string.Empty); } } } diff --git a/src/WebJobs.Script/Description/Compilation/CompilationServiceException.cs b/src/WebJobs.Script/Description/Compilation/CompilationServiceException.cs index 4999fc6486..e99a0fb69d 100644 --- a/src/WebJobs.Script/Description/Compilation/CompilationServiceException.cs +++ b/src/WebJobs.Script/Description/Compilation/CompilationServiceException.cs @@ -11,7 +11,6 @@ namespace Microsoft.Azure.WebJobs.Script.Description { - [Serializable] public sealed class CompilationServiceException : Exception { public CompilationServiceException() @@ -25,9 +24,5 @@ public CompilationServiceException(string message) : base(message) public CompilationServiceException(string message, Exception innerException) : base(message, innerException) { } - - private CompilationServiceException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } } } diff --git a/src/WebJobs.Script/Extensions/AssemblyExtensions.cs b/src/WebJobs.Script/Extensions/AssemblyExtensions.cs index 37d8c75321..17a5f58847 100644 --- a/src/WebJobs.Script/Extensions/AssemblyExtensions.cs +++ b/src/WebJobs.Script/Extensions/AssemblyExtensions.cs @@ -25,7 +25,9 @@ public static string GetCodeBase(this Assembly assembly) return codeBase; } +#pragma warning disable SYSLIB0012 // Type or member is obsolete return assembly.CodeBase; +#pragma warning restore SYSLIB0012 // Type or member is obsolete } } } diff --git a/src/WebJobs.Script/ExternalStartupException.cs b/src/WebJobs.Script/ExternalStartupException.cs index e38d99df62..614f76995a 100644 --- a/src/WebJobs.Script/ExternalStartupException.cs +++ b/src/WebJobs.Script/ExternalStartupException.cs @@ -9,7 +9,6 @@ namespace Microsoft.Azure.WebJobs.Script /// An exception that indicates an issue calling into an external Startup class. This will /// prevent the host from starting. /// - [Serializable] public class ExternalStartupException : Exception { public ExternalStartupException() { } @@ -17,9 +16,5 @@ public ExternalStartupException() { } public ExternalStartupException(string message) : base(message) { } public ExternalStartupException(string message, Exception inner) : base(message, inner) { } - - protected ExternalStartupException( - System.Runtime.Serialization.SerializationInfo info, - System.Runtime.Serialization.StreamingContext context) : base(info, context) { } } } diff --git a/src/WebJobs.Script/FunctionConfigurationException.cs b/src/WebJobs.Script/FunctionConfigurationException.cs index 19163937c9..3f22add71d 100644 --- a/src/WebJobs.Script/FunctionConfigurationException.cs +++ b/src/WebJobs.Script/FunctionConfigurationException.cs @@ -9,7 +9,6 @@ namespace Microsoft.Azure.WebJobs.Script /// An exception that indicates an issue with a function. These exceptions will be caught and /// logged, but not cause a host to restart. /// - [Serializable] public class FunctionConfigurationException : Exception { public FunctionConfigurationException() { } @@ -17,9 +16,5 @@ public FunctionConfigurationException() { } public FunctionConfigurationException(string message) : base(message) { } public FunctionConfigurationException(string message, Exception inner) : base(message, inner) { } - - protected FunctionConfigurationException( - System.Runtime.Serialization.SerializationInfo info, - System.Runtime.Serialization.StreamingContext context) : base(info, context) { } } } diff --git a/src/WebJobs.Script/Host/ProxyFunctionProvider.cs b/src/WebJobs.Script/Host/ProxyFunctionProvider.cs index aaedcd5643..01cdc36720 100644 --- a/src/WebJobs.Script/Host/ProxyFunctionProvider.cs +++ b/src/WebJobs.Script/Host/ProxyFunctionProvider.cs @@ -100,7 +100,7 @@ private ImmutableArray LoadFunctionMetadata() var functionErrors = new Dictionary>(); Collection proxies = ReadProxyMetadata(_scriptOptions.Value.RootScriptPath, _logger, functionErrors); - ImmutableArray metadata; + ImmutableArray metadata = ImmutableArray.Empty; if (proxies != null && proxies.Any()) { metadata = proxies.ToImmutableArray(); diff --git a/src/WebJobs.Script/HostConfigurationException.cs b/src/WebJobs.Script/HostConfigurationException.cs index a637c098b2..9be4d39121 100644 --- a/src/WebJobs.Script/HostConfigurationException.cs +++ b/src/WebJobs.Script/HostConfigurationException.cs @@ -9,7 +9,6 @@ namespace Microsoft.Azure.WebJobs.Script /// An exception that indicates an issue configuring a ScriptHost. This will /// prevent the host from starting. /// - [Serializable] public class HostConfigurationException : Exception { public HostConfigurationException() { } @@ -17,9 +16,5 @@ public HostConfigurationException() { } public HostConfigurationException(string message) : base(message) { } public HostConfigurationException(string message, Exception inner) : base(message, inner) { } - - protected HostConfigurationException( - System.Runtime.Serialization.SerializationInfo info, - System.Runtime.Serialization.StreamingContext context) : base(info, context) { } } } diff --git a/src/WebJobs.Script/HostDisposedException.cs b/src/WebJobs.Script/HostDisposedException.cs index 4ccfc005db..637007224d 100644 --- a/src/WebJobs.Script/HostDisposedException.cs +++ b/src/WebJobs.Script/HostDisposedException.cs @@ -11,7 +11,6 @@ namespace Microsoft.Azure.WebJobs.Script /// /// An exception that indicates that a service was used on a disposed host. /// - [Serializable] public class HostDisposedException : ObjectDisposedException { // For this exception, we want a full stack trace to pinpoint the method @@ -24,17 +23,6 @@ public HostDisposedException(string disposedObjectName, Exception inner) _stackTraceString = GetStackTraceString(); } - protected HostDisposedException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - if (info == null) - { - throw new ArgumentNullException(nameof(info)); - } - - _stackTraceString = info.GetString("FullStackTraceString"); - } - public override string StackTrace => _stackTraceString; public string GetStackTraceString() @@ -42,13 +30,6 @@ public string GetStackTraceString() return new StackTrace(true).ToString(); } - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - base.GetObjectData(info, context); - - info.AddValue("FullStackTraceString", _stackTraceString); - } - private static string GetDefaultMessage(string disposedObjectName) { string message = $"The host is disposed and cannot be used. Disposed object: '{disposedObjectName}'"; diff --git a/src/WebJobs.Script/HostInitializationException.cs b/src/WebJobs.Script/HostInitializationException.cs index 7297633b28..d4e870198a 100644 --- a/src/WebJobs.Script/HostInitializationException.cs +++ b/src/WebJobs.Script/HostInitializationException.cs @@ -8,7 +8,6 @@ namespace Microsoft.Azure.WebJobs.Script /// /// An exception that indicates an issue initializing a ScriptHost. /// - [Serializable] public class HostInitializationException : Exception { public HostInitializationException() { } @@ -16,9 +15,5 @@ public HostInitializationException() { } public HostInitializationException(string message) : base(message) { } public HostInitializationException(string message, Exception inner) : base(message, inner) { } - - protected HostInitializationException( - System.Runtime.Serialization.SerializationInfo info, - System.Runtime.Serialization.StreamingContext context) : base(info, context) { } } } diff --git a/src/WebJobs.Script/InvalidHostServicesException.cs b/src/WebJobs.Script/InvalidHostServicesException.cs index 6d41d63a4f..1ad26cc771 100644 --- a/src/WebJobs.Script/InvalidHostServicesException.cs +++ b/src/WebJobs.Script/InvalidHostServicesException.cs @@ -10,7 +10,6 @@ namespace Microsoft.Azure.WebJobs.Script /// An exception that indicates an issue with the registerd services for a ScriptHost. This will /// prevent the host from starting. /// - [Serializable] public class InvalidHostServicesException : Exception { public InvalidHostServicesException() { } @@ -18,8 +17,5 @@ public InvalidHostServicesException() { } public InvalidHostServicesException(string message) : base(message) { } public InvalidHostServicesException(string message, Exception inner) : base(message, inner) { } - - protected InvalidHostServicesException(SerializationInfo info, StreamingContext context) - : base(info, context) { } } } diff --git a/src/WebJobs.Script/WebJobs.Script.csproj b/src/WebJobs.Script/WebJobs.Script.csproj index 79038f1e08..8d85fef7d6 100644 --- a/src/WebJobs.Script/WebJobs.Script.csproj +++ b/src/WebJobs.Script/WebJobs.Script.csproj @@ -1,6 +1,6 @@ - netstandard2.1 + net8.0 Microsoft.Azure.WebJobs.Script Microsoft.Azure.WebJobs.Script Microsoft.Azure.WebJobs.Script diff --git a/src/WebJobs.Script/Workers/Rpc/Configuration/RpcWorkerConfigFactory.cs b/src/WebJobs.Script/Workers/Rpc/Configuration/RpcWorkerConfigFactory.cs index dbfc1e8be8..5632c44b8c 100644 --- a/src/WebJobs.Script/Workers/Rpc/Configuration/RpcWorkerConfigFactory.cs +++ b/src/WebJobs.Script/Workers/Rpc/Configuration/RpcWorkerConfigFactory.cs @@ -64,7 +64,9 @@ public IList GetConfigs() internal static string GetDefaultWorkersDirectory(Func directoryExists) { +#pragma warning disable SYSLIB0012 // Type or member is obsolete string assemblyLocalPath = Path.GetDirectoryName(new Uri(typeof(RpcWorkerConfigFactory).Assembly.CodeBase).LocalPath); +#pragma warning restore SYSLIB0012 // Type or member is obsolete string workersDirPath = Path.Combine(assemblyLocalPath, RpcWorkerConstants.DefaultWorkersDirectoryName); if (!directoryExists(workersDirPath)) { diff --git a/src/WebJobs.Script/Workers/SharedMemoryDataTransfer/MemoryMappedFileAccessorWindows.cs b/src/WebJobs.Script/Workers/SharedMemoryDataTransfer/MemoryMappedFileAccessorWindows.cs index 0bbf567e00..091a869635 100644 --- a/src/WebJobs.Script/Workers/SharedMemoryDataTransfer/MemoryMappedFileAccessorWindows.cs +++ b/src/WebJobs.Script/Workers/SharedMemoryDataTransfer/MemoryMappedFileAccessorWindows.cs @@ -60,6 +60,11 @@ public override bool TryCreate(string mapName, long size, out MemoryMappedFile m public override bool TryOpen(string mapName, out MemoryMappedFile mmf) { + if (!OperatingSystem.IsWindows()) + { + throw new PlatformNotSupportedException($"{nameof(TryOpen)} is not supported on the current platform."); + } + mmf = null; try diff --git a/test/WebJobs.Script.Tests.Integration/WebHostEndToEnd/HostDisposedExceptionTests.cs b/test/WebJobs.Script.Tests.Integration/WebHostEndToEnd/HostDisposedExceptionTests.cs index c8be6f188f..9b9eed3f8f 100644 --- a/test/WebJobs.Script.Tests.Integration/WebHostEndToEnd/HostDisposedExceptionTests.cs +++ b/test/WebJobs.Script.Tests.Integration/WebHostEndToEnd/HostDisposedExceptionTests.cs @@ -75,27 +75,6 @@ public async Task DisposedScriptLoggerFactory_UsesFullStackTrace() // Assert.Contains("CustomListener.RunAsync", ex.StackTrace); //} - [Fact] - public void Serialization() - { - HostDisposedException originalEx = new HostDisposedException("someObject", new ObjectDisposedException("someObject")); - HostDisposedException deserializedEx; - -#pragma warning disable SYSLIB0011 // Type or member is obsolete - BinaryFormatter bf = new BinaryFormatter(); -#pragma warning restore SYSLIB0011 // Type or member is obsolete - using (MemoryStream ms = new MemoryStream()) - { -#pragma warning disable SYSLIB0011 // Type or member is obsolete - bf.Serialize(ms, originalEx); - ms.Seek(0, 0); - deserializedEx = (HostDisposedException)bf.Deserialize(ms); -#pragma warning restore SYSLIB0011 // Type or member is obsolete - } - - Assert.Equal(originalEx.ToString(), deserializedEx.ToString()); - } - private class TestScriptLoggerFactory : ScriptLoggerFactory { public static bool ShouldWait { get; set; } = false;