gpt4 book ai didi

c# - System.TypeLoadException Microsoft.VisualBasic ASP.NET Core 2

转载 作者:行者123 更新时间:2023-11-30 20:27:59 24 4
gpt4 key购买 nike

Microsoft.VisualBasic 程序集与 ASP.NET Core2 不兼容吗?

我有一个 C# 类库,它提供了读取 CSV 文件的方法,我选择使用 Microsoft.VisualBasic.FileIO.TextFieldParser 来读取该文件。在 WPF 应用程序中引用该库方法时效果非常好。然而,在 ASP.NET Core2 Web 服务中,虽然编译没有错误,但在运行时会抛出异常:

Exception System.TypeLoadException Could not load type 'Microsoft.VisualBasic.FileIO.TextFieldParser' from assembly 'Microsoft.VisualBasic, Version=10.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

我怀疑这是因为与核心服务不兼容。我确实尝试将编译器标志从 NETCOREAPP2 更改为 NET461,但 Web 服务仍然抛出异常。

最佳答案

[这并不完全是一个答案,但它是一个可以代替上述程序集的解决方案。]

我构建此类来替换 Microsoft.VisualBasic 中 FileIO.TextFieldParser 提供的功能,并与其 API 兼容。下面仅提供了我需要的功能,因此请根据需要进行扩展。

public class TextFieldParser : StreamReader
{
int iToken = 1;
bool quoted = false;
char[] delimiters;
string curLine;

public TextFieldParser(string path) : base(path) { }

public TextFieldParser(Stream stream) : base(stream) { }

public string[] ReadFields()
{
curLine = ReadLine();

return GetFields();
}

public void SetDelimiters(string delim)
{
delimiters = delim.ToCharArray();
}

public string[] GetFields()
{
if (delimiters == null || delimiters.Length == 0)
throw new Exception($"{GetType().Name} requires delimiters be defined to identify fields.");

if (!hasFieldsEnclosedInQuotes)
{
return curLine.Split(delimiters);
}
else
{
var token = (char)iToken;
var sb = new StringBuilder();

// Go through the string and change delimiters to token
// ignoring them if within quotes if indicated
for (int c = 0; c < curLine.Length; c++)
{
var qc = curLine[c];

if (hasFieldsEnclosedInQuotes && qc == '"')
{
quoted = !quoted;
continue;
}
else if (!quoted)
{
// Replace the delimiters with token
for (int d = 0; d < delimiters.Length; d++)
{
if (qc == delimiters[d])
{
qc = token;
break;
}
}
}

sb.Append(qc);
}

return sb.ToString().Split(token);
}
}

private bool hasFieldsEnclosedInQuotes = false;
public bool HasFieldsEnclosedInQuotes
{
get { return hasFieldsEnclosedInQuotes; }
set { hasFieldsEnclosedInQuotes = value; }
}

public bool EndOfData
{
get { return EndOfStream; }
}

关于c# - System.TypeLoadException Microsoft.VisualBasic ASP.NET Core 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47996708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com