在 ASP.NET Core 项目中添加类库引用。

35 浏览
0 Comments

在 ASP.NET Core 项目中添加类库引用。

我正在使用VS Pro Update 3。\n我一直在按照这里的指南进行操作:https://www.hanselman.com/blog/HowToReferenceAnExistingNETFrameworkProjectInAnASPNETCore10WebApp.aspx。\n我有3个现有的.NET 4.5.1的VB.NET类库,但我认为这应该不重要,因为它们都在CLR上。\n我的ASP.NET Core项目是C#,目标为.NET 4.5.1。\n这是我的project.json文件中的Framework部分:\n \"frameworks\": {\n \"net451\": {\n \"dependencies\": {\n \"WebApp.Api.Services\": {\n \"target\": \"project\"\n }\n }\n }\n },\n\n如果我使用添加现有项目将所有的VB.NET类库添加到我的解决方案中,并尝试将它们添加为项目引用,我会得到以下错误:\n

\n项目XXX类型不受当前项目支持,无法作为引用添加\n

\n我还尝试添加一个C#类库(WebApp.Api.Services),然后将VB.NET引用添加到其中,然后将C#类库作为ASP Core项目的引用添加。\n这样做可以在解决方案资源管理器中显示引用,似乎我可以使用C#类库中的类型,但我无法在代码中使用VB.NET类库的类型。\n我还创建了一个NuGet包,但没有成功。\n我读到可以通过某种方式创建一个“包装”项目,或者Visual Studio可以自动完成这个操作。\n有人尝试过将VB.Net项目添加到ASP Core解决方案吗?

0
0 Comments

问题的原因是ASP.NET Core项目无法添加对VB.NET类库的引用。解决方法是创建一个C#的“Bridge”类库,用于将VB.NET的模型转换为可在ASP.NET Core控制器中返回的模型。

在解决问题之前,作者遇到了一个不同的问题,即“System.BadImageFormatException”错误,这导致他无法将对VB.NET类库的引用添加到ASP.NET Core项目中。他通过这个问题找到了解决方案,解决方法是卸载x94版本的.NET Core,然后安装x86版本。

作者使用了一个C#的“Bridge”类库来解决无法直接引用VB.NET类库的问题。在“Bridge”类库中,作者创建了一个名为“BridgeModelA”的类,该类继承自VB.NET类库中的“ActualModelA”类。作者还创建了一个扩展方法,将“BridgeModelA”转换为“ActualModelA”。

尽管在控制器中无法访问这些模型的基本成员,因为ASP.NET Core项目没有引用VB.NET项目,但控制器仍然可以返回包含所有基本成员的JSON结果。

这种设计非常适合使用轻量级控制器的情况。

0
0 Comments

问题的原因是,一个为.NET Core构建的项目无法使用为.NET Framework构建的类库,它们彼此之间不直接兼容。在提到"My ASP.NET Core project is C#, targeting .NET 4.5.1."时,实际上并不是.NET Core项目。

解决方法是将类库转换为.NET Standard,这样它们可以被广泛使用的兼容框架所使用。也可以使一个类库同时针对多个框架进行目标设置。

实际上,在.NET 4.5.1上可以使用ASP.NET Core,但是使用该功能需要满足以下条件:a)使用VS 2017(或带有nuget的2015)并且b)确定它不使用.NET Core中不可用的任何类型,并且c)使用import或PackageTargetFallback来强制nuget恢复此包,尽管它的目标说明不兼容。然而,这样做非常危险,因为它会允许在.NET Core中使用任何不兼容的net45包,因此不应该使用这个方法,而是将库转换为针对netstandard1.x的PCL。

对于使用VS模板"ASP.NET Core Web App (.NET Framework)"的情况,是一个错误,实际上并不是.NET Core项目。

根据日志中的System.BadImageFormatException异常,初步怀疑是x86与x64之间的问题,需要进行更多的测试。

至于是否有可用的移植工具,文章中未提及。

0