Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# 在ASP.net Core 2 API中使用VB.net程序集时发生TypeLoadException_C#_Asp.net_Vb.net_Asp.net Web Api_Asp.net Core 2.0 - Fatal编程技术网

C# 在ASP.net Core 2 API中使用VB.net程序集时发生TypeLoadException

C# 在ASP.net Core 2 API中使用VB.net程序集时发生TypeLoadException,c#,asp.net,vb.net,asp.net-web-api,asp.net-core-2.0,C#,Asp.net,Vb.net,Asp.net Web Api,Asp.net Core 2.0,我正在尝试将传统的ASP.net VB Webforms项目转换为ASP.net Core 2 API项目 不幸的是,有相当多的引用是在VB.net中编写的程序集,我无法访问原始代码。 我可以将引用添加到项目中,但当我尝试调试项目时,它会一直运行,直到我使用程序集中的某个方法并得到错误: TypeLoadException: Could not load type 'Microsoft.VisualBasic.DateAndTime' from assembly 'Microsoft.Visua

我正在尝试将传统的ASP.net VB Webforms项目转换为ASP.net Core 2 API项目

不幸的是,有相当多的引用是在VB.net中编写的程序集,我无法访问原始代码。 我可以将引用添加到项目中,但当我尝试调试项目时,它会一直运行,直到我使用程序集中的某个方法并得到错误:

TypeLoadException: Could not load type 'Microsoft.VisualBasic.DateAndTime' from assembly 'Microsoft.VisualBasic, Version=10.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
传递给它的变量有很多,其中一个是DateTime

DateTime dateIn = new DateTime(2018, 5, 7);
DateTime dateOut = new DateTime(2018, 5, 20);
我已经构建了一个简单的C#Web表单项目,添加了程序集,并以相同的方式引用了代码,它可以正常工作并返回正确的值,只是不喜欢.net core 2环境

我发现了其他类似的问题,但答案似乎并不相关:

从哪里开始

更新1

感谢您的评论,以明确这应该如何工作。 我已经研究了@john提到的将代码从DLL转换回某种形式的源代码的工具。不幸的是,我目前没有必要的时间(或者可能是技能)来重写大量不起作用的代码

新问题/新想法: 是否有某种方法可以将当前DLL编译为某种exe或com对象,并在.NET核心层之外,仅在操作系统层上与之交互?(希望我的解释是正确的。我意识到这会破坏跨平台的兼容性,但它可能会在短期内解决问题,帮助项目走出大门,然后可以花时间重新编写问题集。)

给将来遇到这篇文章的人一个提示

目前,我已经将VB.Net程序集包装在一个基本的WCF服务中。 考虑到这个程序集是一个“黑盒”,它在其中抛出查询并返回答案,因此它适合在WCF服务中工作

我认为这个解决方案对大多数人都不起作用


注意:我还没有在生产中测试这个我会在更新时提供更新。

您是说您正在尝试从.NET核心代码引用.NET Framework程序集吗?你不应该这样做。所以这是一个ASP.NET核心项目,但它的目标是.NET核心还是.NET框架,因为它可以是。如果它是.NET核心,那么Microsoft.VisualBasic命名空间中基本上是VB6保留的内容将不可用,因为它不符合.NET标准。在这种情况下,您需要将该DLL替换为不调用那些遗留函数的.NET核心版本。使用它们是否合适多年来一直是争论的焦点,这里有一个例子说明为什么不合适。它们可能不会经常咬你,但一次还是太频繁了。总有这样的情况,但我认为你还是得重新编译Dll。并不是所有的方法都可用,所以你可能运气不好@约翰-我相信这就是我正在做的。直到我开始使用.NETCore时,我才意识到这个.dll程序集。我的阅读表明,有没有办法将其转换为.Net标准?我只有这个dll,里面有一些业务逻辑,无法访问它的源代码。我可以创建某种包装器并将其编译出来以使用.Net Core/.Net Standard吗?@Charlie.Net Standard用于跨平台代码(类库),这些代码可以从.Net Core和.Net Framework项目中引用。NET Core用于跨平台项目。您不太可能包装这个库,因为这样做需要您引用它,并且会防止代码跨平台。是否有任何方法可以对其进行反向工程(如果许可证允许)并将相关代码放入.NET核心或.NET标准项目中?