2017-04-03 51 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

相關問題