Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Dotnet Core-如何处置RNGCryptoServiceProvider()_C#_Visual Studio_Roslyn Code Analysis - Fatal编程技术网

C# Dotnet Core-如何处置RNGCryptoServiceProvider()

C# Dotnet Core-如何处置RNGCryptoServiceProvider(),c#,visual-studio,roslyn-code-analysis,C#,Visual Studio,Roslyn Code Analysis,我得到警告: Severity Code Description Project File Line Suppression State Warning CA2000 Call System.IDisposable.Dispose on object created by 'new RNGCryptoServiceProvider()' before all references to it are out of scope. JobsLedger.AUTHORISAT

我得到警告:

Severity    Code    Description Project File    Line    Suppression State
Warning CA2000  Call System.IDisposable.Dispose on object created by 'new RNGCryptoServiceProvider()' before all references to it are out of scope. JobsLedger.AUTHORISATION    C:\Users\simon\OneDrive\Documents\1.0 - AURELIA\1.0 - JobsLedgerSPA -ASPNET CORE 3.1\JobsLedger.AUTHORISATION\CryptoService.cs  96  Active
出现此警告的代码位于此行:

new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
其用途如下:

public string EncryptdatabaseName(string text)
        {
            byte[] salt;
            new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);

            using var aesAlg = Aes.Create();
            using var encryptor = aesAlg.CreateEncryptor(salt, aesAlg.IV);
            using var msEncrypt = new MemoryStream();
            using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            using (var swEncrypt = new StreamWriter(csEncrypt))
            {
                swEncrypt.Write(text);
            }

            var iv = aesAlg.IV;

            var decryptedContent = msEncrypt.ToArray();

            var encryptedDatabaseName = new byte[iv.Length + decryptedContent.Length];

            Buffer.BlockCopy(iv, 0, encryptedDatabaseName, 0, iv.Length);
            Buffer.BlockCopy(decryptedContent, 0, encryptedDatabaseName, iv.Length, decryptedContent.Length);

            // Format hash with extra information
            return string.Format(CultureInfo.CurrentCulture, "$DATABASENAME$V1${0}${1}", Convert.ToBase64String(encryptedDatabaseName), salt);
        }
我使用的是Visual Studio 2019,它是Roslyn编译器。。我想摆脱这个警告


如何处理此问题?

CA2000的意思是“在失去作用域之前处理对象”。从中,您可以尝试以下代码:

using(RNGCryptoServiceProvider test = new RNGCryptoServiceProvider())
{
   test.GetBytes(salt = new byte[SaltSize]);
}
如果要直接抑制它,可以使用以下代码,如下所示:

#pragma warning disable CA1062
        new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
#pragma warning restore CA1062

CA2000的意思是“在失去作用域之前处理对象”。从中,您可以尝试以下代码:

using(RNGCryptoServiceProvider test = new RNGCryptoServiceProvider())
{
   test.GetBytes(salt = new byte[SaltSize]);
}
如果要直接抑制它,可以使用以下代码,如下所示:

#pragma warning disable CA1062
        new RNGCryptoServiceProvider().GetBytes(salt = new byte[SaltSize]);
#pragma warning restore CA1062

RNGCryptoServiceProvider
上调用
Dispose()
,或使用
块将其包装在
中。参见文档示例:我尝试重现您使用的代码分析器?在
RNGCryptoServiceProvider
上调用
Dispose()
,或使用
块将其包装在
中。参见文档示例:我试图重现您使用的代码分析器?