2016-09-29 82 views
2

我有.NET版本ASP.Core

"frameworks": { 
    "net452": {} 
    }, 

一個asp的核心網絡應用和我有同樣的類庫(.NET核心)。

{ 
    "version": "1.0.0-*", 
    "frameworks": { 
    "netstandard1.5": { 
     "dependencies": { 
     "NETStandard.Library": "1.6.0" 
     }, 
     "net452": {} 
    } 
    } 
} 

問題是,我該如何將Web應用程序項目引用添加到類庫?我應該導入一些.net框架還是使用.net標準?

現在我有一個錯誤消息,當我試圖添加對類庫項目的引用。

下列項目不支持作爲參考: 「webprojectname」 有與當前工程 「classlibraryprojectname」

「classlibraryprojectname」 目標不相容的目標框架:.NETCoreApp,版本= V1.0 「webprojectname」: .NETFramework,Version = v4.5.2

+0

您是否創建了一個針對.net框架的aspnet核心項目?在Visual Studio中,您應該使用此模板創建一個新項目:「ASP.NET核心Web應用程序(.NET Core)」而不是「ASP.NET核心Web應用程序(.NET Framework)」 – Thomas

+0

是的,我創建了ASP.NET核心Web應用程序(.NET Framework)。我現在可以改變它嗎,還是應該創建一個新項目? – Cieja

+0

根據[docs](https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md#mapping-the-net-platform-standard-to-platforms) ,'NetStandard 1.0'映射到'net45'。如果你想'net452',增加你的類庫到'1.2'或你的網頁應用到'net45'?或者,在類庫中添加'net45'作爲附加框架並允許它交叉編譯。 (以前的建議更可取) – Smudge202

回答

0

編輯:根據對問題所做的更改進行更新。

所以我不守填充的評論部分,你project.json的應該是這樣的:

Web應用程序(你也會有其他依賴這裏沒有顯示)

"dependencies": { 
    "YourClassLibrary": "1.0.0-*" 
}, 
"frameworks": { 
    "net452": { } 
} 

類庫:

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "NETStandard.Library": "1.6.0" 
    }, 

    "frameworks": { 
    "netstandard1.2": { } 
    } 
} 

注意:如果您的類庫依賴的東西比高,那麼你將不得不增加.Net框架在你的web應用程序,以配合您所使用的NETSTandard(按照以前linked docs),或者你需要交叉編譯類庫,像這樣:

{ 
    "version": "1.0.0-*", 

    "frameworks": { 
    "netstandard1.5": { 
     "dependencies": { 
     "NETStandard.Library": "1.6.0" 
     } 
    }, 
    "net452": { } 
    } 
} 

使用第一個建議,您的應用程序爲您的類庫生成一個程序集,使用第二種方法,您的類庫將被編譯兩次(一個用於netstandard1.5,另一個用於net452)。當您的Web應用程序嘗試解析類庫時,它意識到它不能使用netstandard1.5(其目標爲net462),因此會回退到net452程序集。但請注意,使用第二個選項通常表明某些事情不適合您的項目結構,只有在您知道自己在做什麼以及爲什麼(在我看來)的情況下才能使用。

顯示的NETStandard.Library依賴關係是必不可少的NuGet 捆綁拉下必要的CoreFX包。如果您遇到像「無法找到Microsoft.CSharp」這樣的錯誤,通常是因爲您沒有下拉默認軟件包。你可以改爲只選擇你想要的CoreFX包,如System.Collections,但這是一種更先進的技術。

希望這有助於澄清事情?

+0

現在我得到了一個「myclasslibraryprojectname」錯誤:「1.0.0- *」 - >依賴項「myclasslibraryproject> = 1.0.0- *無法解析 – Cieja

+0

如果你做了很多像我們已經討論過,Visual Studio有時會有點困惑,關閉並重新打開解決方案,如果這樣不能解決問題,請刪除'project.lock.json'文件並讓它們重新生成(刪除類庫鎖文件第一,然後是網絡應用程序鎖定文件)雖然.NET Core是RTM,但工具仍然處於預覽不幸的狀態 – Smudge202

+0

@Cieja我發現你更新了你的問題,我認爲這是我自己的複製粘貼,我注意到我錯過了一個護腕,我現在已經在第三個代碼塊中更正了,你也需要這樣做,我建議不要使用這種方法,直到你理解這些東西如何工作會更好一點(沒有理由我的第一個建議如果您按照有關reo的建議,則該功能無效筆/刪除鎖文件)。 – Smudge202

-1

netstandard1.2替換爲您安裝的net45net461。通過"version": "1.0.1"更新"version": "1.0.0-*"。保存更改。你完成了。

注意:不能通過使用.Net核心類庫定義模型。其他一切都很好!

+0

將庫更改爲'net45' /'net461'會將.Net Core庫更改爲全fat(全fx)庫。另外,一個'net452'項目不能引用'net461'(只是反過來)。不知道你的意思是什麼「筆記」部分? – Smudge202

+0

@ Smudge202然後會發生什麼?任何錯誤? –