2017-04-03 52 views
1

我使用VS Pro的更新3添加类库引用ASP.NET核心项目

我已经引导来过这里以下:https://www.hanselman.com/blog/HowToReferenceAnExistingNETFrameworkProjectInAnASPNETCore10WebApp.aspx

我有3个现有的.NET 4.5.1类库,写在VB.NET中,但我不认为这应该很重要,因为它都在CLR上。
我的ASP.NET Core项目是C#,面向.NET 4.5.1。
这里是我project.json的框架部分:

"frameworks": { 
    "net451": { 
     "dependencies": { 
     "WebApp.Api.Services": { 
      "target": "project" 
     } 
     } 
    } 
    }, 

如果我添加使用添加现有项目到我的解决方案,并尝试将其添加为项目引用我所有的VB.NET类库,我出现以下错误:

Project XXX type is unsupported by current project and cannot be added as a reference

我也尝试添加一个C#类库(WebApp.Api.Services),添加VB.NET引用到,然后添加C#类图书馆的ASP核心项目的引用
做t他显示了解决方案资源管理器中的引用,好像我可以使用C#类库中的类型,但是我不能在我的代码中使用VB.NET库的类型。

我也创建了一个NuGet包,但没有运气
我读过,你可以创建一个'包装'项目,或者Visual Studio可以自动执行此操作。

有没有人曾经尝试将VB.Net项目添加到ASP核心解决方案?

+0

你说得对,语言应该不重要。你使用的是什么版本的Visual Studio? –

+0

我正在使用VS Pro 2015更新3 –

+1

如果您升级到VS 2017并从project.json迁移到csproj,您将获得“项目引用”功能,该功能可让您在没有任何解决方法的情况下执行所需操作。 –

回答

1

我设法解决了我的问题。

该指南here是正确的,我有另一个不同的问题,我没有意识到。
我发现了一个System.BadImageFormatException错误,导致我出现以下问题Start an asp.net core project as x86 under visual studio 2015
我卸载了.NET Core的x94版本,并安装了x86版本。

我仍然无法将对VB.NET库的引用添加到ASP Core项目中,所以我的C#服务'Bridge'库至关重要。

在我的“桥”库我有我可以从我的ASP控制器返回型号:

Public BridgeModelA : VB.NETLibrary.ActualModelA 
{ 
… 
} 

然后扩展

Public static VB.NETLibrary.ActualModelA ToModel(this BridgeModelA) 
{ 
… 
} 

虽然这些模型的基础构件不能在访问控制器,由于ASP proj没有引用VB projs,它们由控制器返回,并且包含所有基本成员的JSON结果。
这实际上很棒,因为它符合瘦控制器的设计。

1

为.NET Core构建的项目无法使用为.NET Framework构建的类库。它们并不直接相互兼容。事实上我很困惑,当你说:

My ASP.NET Core project is C#, targeting .NET 4.5.1.

如果它的目标是.NET 4.5.1,那么它实际上并不是一个.NET Core项目。

您应该将您的类库移植到.NET Standard;这样他们可以被广泛使用compatible frameworks。也可以有一个类库target multiple frameworks

+0

实际上可以在.NET 4.5.1上使用ASP.NET Core:http://stackoverflow.com/a/38166777/3191599 –

+1

@NateBarbettini:Gigi可能指的是被标记为[tag:.net所以在这个前提下:简短的答案是:它不可能使用类库,因为类库总是隐含着完整的.NET Framework目标。只有新型或旧式的PCL可以与.NET Core一起使用,如果它们针对特定的配置文件(即'portable-net45 + win8'或类似的) – Tseng

+0

长的答案是:它**可能是**,如果你使用a)使用vs 2017(或2015 with nuget)**和** b)110%确定它不使用.NET Core **中没有的任何类型**并且c)使用'import'或'PackageTargetFallback'强制nuget恢复这个包,尽管它的目标是说它不兼容。这是**非常危险的**虽然你也可以在.NET Core中使用任何net45包,即使它不兼容,所以一个**不应该使用**这个路径,而是将库转换为PCL定位'netstandard1.x' – Tseng

相关问题