Browse Source

Enable nullable on FileProviders and Config.KeyPerFile (#28585)

James Newton-King 5 years ago
parent
commit
09a036f2f3

+ 2 - 2
src/Configuration.KeyPerFile/src/KeyPerFileConfigurationProvider.cs

@@ -11,7 +11,7 @@ namespace Microsoft.Extensions.Configuration.KeyPerFile
     /// </summary>
     public class KeyPerFileConfigurationProvider : ConfigurationProvider, IDisposable
     {
-        private readonly IDisposable _changeTokenRegistration;
+        private readonly IDisposable? _changeTokenRegistration;
 
         KeyPerFileConfigurationSource Source { get; set; }
 
@@ -106,7 +106,7 @@ namespace Microsoft.Extensions.Configuration.KeyPerFile
         /// <summary>
         /// Generates a string representing this provider name and relevant details.
         /// </summary>
-        /// <returns> The configuration name. </returns>
+        /// <returns>The configuration name.</returns>
         public override string ToString()
             => $"{GetType().Name} for files in '{GetDirectoryName()}' ({(Source.Optional ? "Optional" : "Required")})";
 

+ 1 - 1
src/Configuration.KeyPerFile/src/KeyPerFileConfigurationSource.cs

@@ -18,7 +18,7 @@ namespace Microsoft.Extensions.Configuration.KeyPerFile
         /// <summary>
         /// The FileProvider whos root "/" directory files will be used as configuration data.
         /// </summary>
-        public IFileProvider FileProvider { get; set; }
+        public IFileProvider? FileProvider { get; set; }
 
         /// <summary>
         /// Files that start with this prefix will be excluded.

+ 2 - 1
src/Configuration.KeyPerFile/src/Microsoft.Extensions.Configuration.KeyPerFile.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <Description>Configuration provider that uses files in a directory for Microsoft.Extensions.Configuration.</Description>
@@ -8,6 +8,7 @@
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <PackageTags>configuration</PackageTags>
     <NoWarn>$(NoWarn);PKG0001</NoWarn>
+    <Nullable>enable</Nullable>
   </PropertyGroup>
 
   <ItemGroup>

+ 13 - 13
src/Configuration.KeyPerFile/src/PublicAPI.Shipped.txt

@@ -11,16 +11,16 @@ Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.Relo
 Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.ReloadOnChange.set -> void
 Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions
 override Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.Load() -> void
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.KeyPerFileConfigurationProvider(Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource source) -> void
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder builder) -> Microsoft.Extensions.Configuration.IConfigurationProvider
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.set -> void
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.get -> System.Func<string, bool>
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.set -> void
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.get -> string
-~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.set -> void
-~override Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.ToString() -> string
-~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, System.Action<Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource> configureSource) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
-~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, string directoryPath) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
-~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, string directoryPath, bool optional) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
-~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, string directoryPath, bool optional, bool reloadOnChange) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.KeyPerFileConfigurationProvider(Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource! source) -> void
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder! builder) -> Microsoft.Extensions.Configuration.IConfigurationProvider!
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider?
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.set -> void
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.get -> System.Func<string!, bool>!
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.set -> void
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.get -> string!
+Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.set -> void
+override Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.ToString() -> string!
+static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, System.Action<Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource!>! configureSource) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
+static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, string! directoryPath) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
+static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, string! directoryPath, bool optional) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
+static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, string! directoryPath, bool optional, bool reloadOnChange) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!

+ 1 - 1
src/FileProviders/Embedded/src/EmbeddedFileProvider.cs

@@ -41,7 +41,7 @@ namespace Microsoft.Extensions.FileProviders
         /// </summary>
         /// <param name="assembly">The assembly that contains the embedded resources.</param>
         /// <param name="baseNamespace">The base namespace that contains the embedded resources.</param>
-        public EmbeddedFileProvider(Assembly assembly, string baseNamespace)
+        public EmbeddedFileProvider(Assembly assembly, string? baseNamespace)
         {
             if (assembly == null)
             {

+ 16 - 7
src/FileProviders/Embedded/src/EmbeddedResourceFileInfo.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -50,10 +50,8 @@ namespace Microsoft.Extensions.FileProviders.Embedded
             {
                 if (!_length.HasValue)
                 {
-                    using (var stream = _assembly.GetManifestResourceStream(_resourcePath))
-                    {
-                        _length = stream.Length;
-                    }
+                    using var stream = GetManifestResourceStream();
+                    _length = stream.Length;
                 }
                 return _length.Value;
             }
@@ -62,7 +60,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded
         /// <summary>
         /// Always null.
         /// </summary>
-        public string PhysicalPath => null;
+        public string? PhysicalPath => null;
 
         /// <summary>
         /// The name of embedded file
@@ -82,7 +80,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded
         /// <inheritdoc />
         public Stream CreateReadStream()
         {
-            var stream = _assembly.GetManifestResourceStream(_resourcePath);
+            var stream = GetManifestResourceStream();
             if (!_length.HasValue)
             {
                 _length = stream.Length;
@@ -90,5 +88,16 @@ namespace Microsoft.Extensions.FileProviders.Embedded
 
             return stream;
         }
+
+        private Stream GetManifestResourceStream()
+        {
+            var stream = _assembly.GetManifestResourceStream(_resourcePath);
+            if (stream == null)
+            {
+                throw new InvalidOperationException($"Couldn't get resource at '{_resourcePath}'.");
+            }
+
+            return stream;
+        }
     }
 }

+ 2 - 2
src/FileProviders/Embedded/src/Manifest/EmbeddedFilesManifest.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -28,7 +28,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
             _rootDirectory = rootDirectory;
         }
 
-        internal ManifestEntry ResolveEntry(string path)
+        internal ManifestEntry? ResolveEntry(string path)
         {
             if (string.IsNullOrEmpty(path) || HasInvalidPathChars(path))
             {

+ 2 - 2
src/FileProviders/Embedded/src/Manifest/ManifestDirectory.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -31,7 +31,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
 
             if (segment.Equals("..", StringComparison.Ordinal))
             {
-                return Parent;
+                return Parent ?? UnknownPath;
             }
 
             foreach (var child in Children)

+ 2 - 2
src/FileProviders/Embedded/src/Manifest/ManifestDirectoryContents.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -12,7 +12,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
     internal class ManifestDirectoryContents : IDirectoryContents
     {
         private readonly DateTimeOffset _lastModified;
-        private IFileInfo[] _entries;
+        private IFileInfo[]? _entries;
 
         public ManifestDirectoryContents(Assembly assembly, ManifestDirectory directory, DateTimeOffset lastModified)
         {

+ 3 - 3
src/FileProviders/Embedded/src/Manifest/ManifestDirectoryInfo.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -23,9 +23,9 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
 
         public long Length => -1;
 
-        public string PhysicalPath => null;
+        public string? PhysicalPath => null;
 
-        public string Name => Directory.Name;
+        public string? Name => Directory.Name;
 
         public DateTimeOffset LastModified { get; }
 

+ 2 - 2
src/FileProviders/Embedded/src/Manifest/ManifestEntry.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -13,7 +13,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
             Name = name;
         }
 
-        public ManifestEntry Parent { get; private set; }
+        public ManifestEntry? Parent { get; private set; }
 
         public string Name { get; }
 

+ 17 - 8
src/FileProviders/Embedded/src/Manifest/ManifestFileInfo.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -36,9 +36,9 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
 
         public long Length => EnsureLength();
 
-        public string PhysicalPath => null;
+        public string? PhysicalPath => null;
 
-        public string Name => ManifestFile.Name;
+        public string? Name => ManifestFile.Name;
 
         public DateTimeOffset LastModified { get; }
 
@@ -48,10 +48,8 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
         {
             if (_length == null)
             {
-                using (var stream = Assembly.GetManifestResourceStream(ManifestFile.ResourcePath))
-                {
-                    _length = stream.Length;
-                }
+                using var stream = GetManifestResourceStream();
+                _length = stream.Length;
             }
 
             return _length.Value;
@@ -59,7 +57,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
 
         public Stream CreateReadStream()
         {
-            var stream = Assembly.GetManifestResourceStream(ManifestFile.ResourcePath);
+            var stream = GetManifestResourceStream();
             if (!_length.HasValue)
             {
                 _length = stream.Length;
@@ -67,5 +65,16 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
 
             return stream;
         }
+
+        private Stream GetManifestResourceStream()
+        {
+            var stream = Assembly.GetManifestResourceStream(ManifestFile.ResourcePath);
+            if (stream == null)
+            {
+                throw new InvalidOperationException($"Couldn't get resource at '{ManifestFile.ResourcePath}'.");
+            }
+
+            return stream;
+        }
     }
 }

+ 2 - 2
src/FileProviders/Embedded/src/Manifest/ManifestParser.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -146,7 +146,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
             if (element.Elements().Count() == 0 &&
                 !element.IsEmpty &&
                 element.Nodes().Count() == 1 &&
-                element.FirstNode.NodeType == XmlNodeType.Text)
+                element.FirstNode?.NodeType == XmlNodeType.Text)
             {
                 return element.Value;
             }

+ 2 - 2
src/FileProviders/Embedded/src/Manifest/ManifestRootDirectory.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
@@ -6,7 +6,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
     internal class ManifestRootDirectory : ManifestDirectory
     {
         public ManifestRootDirectory(ManifestEntry[] children)
-            : base(name: null, children: children)
+            : base(name: string.Empty, children: children)
         {
             SetParent(ManifestSinkDirectory.Instance);
         }

+ 2 - 2
src/FileProviders/Embedded/src/Manifest/ManifestSinkDirectory.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -9,7 +9,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
     internal class ManifestSinkDirectory : ManifestDirectory
     {
         private ManifestSinkDirectory()
-            : base(name: null, children: Array.Empty<ManifestEntry>())
+            : base(name: string.Empty, children: Array.Empty<ManifestEntry>())
         {
             SetParent(this);
             Children = new[] { this };

+ 2 - 1
src/FileProviders/Embedded/src/Microsoft.Extensions.FileProviders.Embedded.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <RootNamespace>Microsoft.Extensions.FileProviders</RootNamespace>
@@ -11,6 +11,7 @@
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <PackageTags>files;filesystem</PackageTags>
     <NoPackageAnalysis>true</NoPackageAnalysis>
+    <Nullable>enable</Nullable>
   </PropertyGroup>
 
   <ItemGroup>

+ 17 - 17
src/FileProviders/Embedded/src/PublicAPI.Shipped.txt

@@ -6,20 +6,20 @@ Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.LastModifie
 Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.Length.get -> long
 Microsoft.Extensions.FileProviders.EmbeddedFileProvider
 Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider
-~Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.CreateReadStream() -> System.IO.Stream
-~Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.EmbeddedResourceFileInfo(System.Reflection.Assembly assembly, string resourcePath, string name, System.DateTimeOffset lastModified) -> void
-~Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.Name.get -> string
-~Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.PhysicalPath.get -> string
-~Microsoft.Extensions.FileProviders.EmbeddedFileProvider.EmbeddedFileProvider(System.Reflection.Assembly assembly) -> void
-~Microsoft.Extensions.FileProviders.EmbeddedFileProvider.EmbeddedFileProvider(System.Reflection.Assembly assembly, string baseNamespace) -> void
-~Microsoft.Extensions.FileProviders.EmbeddedFileProvider.GetDirectoryContents(string subpath) -> Microsoft.Extensions.FileProviders.IDirectoryContents
-~Microsoft.Extensions.FileProviders.EmbeddedFileProvider.GetFileInfo(string subpath) -> Microsoft.Extensions.FileProviders.IFileInfo
-~Microsoft.Extensions.FileProviders.EmbeddedFileProvider.Watch(string pattern) -> Microsoft.Extensions.Primitives.IChangeToken
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.Assembly.get -> System.Reflection.Assembly
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.GetDirectoryContents(string subpath) -> Microsoft.Extensions.FileProviders.IDirectoryContents
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.GetFileInfo(string subpath) -> Microsoft.Extensions.FileProviders.IFileInfo
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly assembly) -> void
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly assembly, string root) -> void
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly assembly, string root, System.DateTimeOffset lastModified) -> void
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly assembly, string root, string manifestName, System.DateTimeOffset lastModified) -> void
-~Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.Watch(string filter) -> Microsoft.Extensions.Primitives.IChangeToken
+Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.CreateReadStream() -> System.IO.Stream!
+Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.EmbeddedResourceFileInfo(System.Reflection.Assembly! assembly, string! resourcePath, string! name, System.DateTimeOffset lastModified) -> void
+Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.Name.get -> string!
+Microsoft.Extensions.FileProviders.Embedded.EmbeddedResourceFileInfo.PhysicalPath.get -> string?
+Microsoft.Extensions.FileProviders.EmbeddedFileProvider.EmbeddedFileProvider(System.Reflection.Assembly! assembly) -> void
+Microsoft.Extensions.FileProviders.EmbeddedFileProvider.EmbeddedFileProvider(System.Reflection.Assembly! assembly, string? baseNamespace) -> void
+Microsoft.Extensions.FileProviders.EmbeddedFileProvider.GetDirectoryContents(string! subpath) -> Microsoft.Extensions.FileProviders.IDirectoryContents!
+Microsoft.Extensions.FileProviders.EmbeddedFileProvider.GetFileInfo(string! subpath) -> Microsoft.Extensions.FileProviders.IFileInfo!
+Microsoft.Extensions.FileProviders.EmbeddedFileProvider.Watch(string! pattern) -> Microsoft.Extensions.Primitives.IChangeToken!
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.Assembly.get -> System.Reflection.Assembly!
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.GetDirectoryContents(string! subpath) -> Microsoft.Extensions.FileProviders.IDirectoryContents!
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.GetFileInfo(string! subpath) -> Microsoft.Extensions.FileProviders.IFileInfo!
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly! assembly) -> void
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly! assembly, string! root) -> void
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly! assembly, string! root, System.DateTimeOffset lastModified) -> void
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.ManifestEmbeddedFileProvider(System.Reflection.Assembly! assembly, string! root, string! manifestName, System.DateTimeOffset lastModified) -> void
+Microsoft.Extensions.FileProviders.ManifestEmbeddedFileProvider.Watch(string! filter) -> Microsoft.Extensions.Primitives.IChangeToken!

+ 1 - 0
src/FileProviders/Manifest.MSBuildTask/src/Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.csproj

@@ -9,6 +9,7 @@
     <IsPackable>false</IsPackable>
     <IsImplementationProject>false</IsImplementationProject>
     <ExcludeFromSourceBuild>false</ExcludeFromSourceBuild>
+    <Nullable>enable</Nullable>
   </PropertyGroup>
 
   <ItemGroup>