StreamReader.ReadLineAsync() 在发布模式下返回 string.empty,但在调试模式下不返



使用以下代码片段中的 Blazor wasm 应用程序(NET 标准 2.1(和 BlazorFileReader(缩短,在我的应用程序中它分为 .razor 文件和 .razor.cs 文件,但为了简单起见,此处缩短并放在一起(:

@inject Blazor.FileReader.IFileReaderService fileReaderService
@using Blazor.FileReader;
<div class="ml-2">
<input type="file" @ref="InputElement" @onchange="FilesSelected" multiple accept=".txt,.csv" />
</div>
@code {
ElementReference InputElement;
[Parameter] public List<string> FileContent { get; set; }
async Task FilesSelected()
{
foreach (var file in await fileReaderService.CreateReference(InputElement).EnumerateFilesAsync())
{
using (Stream stream = await file.OpenReadAsync())
{
FileContent = await ReadLinesAsync(stream, Encoding.UTF8);
}
}
}
public async Task<List<string>> ReadLinesAsync(Stream stream, Encoding encoding)
{
using (var reader = new StreamReader(stream, encoding))
{
string line;
var result = new List<string>();
while ((line = await reader.ReadLineAsync()) != null)
{
result.Add(line);
}
return result;
}
}
}

在调试模式(Visual Studio 2019 v 16.6 预览版(下运行此代码可以很好地读取任何文本文件。但是当在发布模式下运行时,StreamReader.ReadLineAsync(( 返回空字符串。

有谁知道为什么ReadLineAsync((这样做?我看过这个...

这是 Blazor 当前实现中的一个 bug。

在解决之前,这里有一个解决方法(代码或多或少是等效的......但有效!

public async Task<List<string>> ReadLinesAsync(Stream stream, Encoding encoding)
{
using (var reader = new StreamReader(stream, encoding))
{
var result = new List<string>();
string line = await reader.ReadLineAsync();
while (line != null)
{
result.Add(line);
line = await reader.ReadLineAsync();
}
return result;
}
}

编辑:该错误似乎在优化器中。关闭"优化"(在发布中编译时默认打开(是一种替代解决方法。

最新更新