![](/img/trans.png)
[英]Referencing Framework 4.6 Library in in .NET Core App 1.0.0 project
[英]Reference a .NET Core Library in a .NET 4.6 project
也許我對“.NET核心庫”的含義缺乏了解,但是當我嘗試使用Visual Studio 2015在.NET 4.6程序集中添加.NET核心庫時,我收到錯誤:
無法添加對“...”的引用。
我明白了什么問題嗎?
這是我在.NET Core程序集的project.json中配置的
"frameworks": {
"net451": { },
"dotnet5.4": {
"dependencies": {
"Microsoft.CSharp": "4.0.1-beta-23516",
"System.Collections": "4.0.11-beta-23516",
"System.Linq": "4.0.1-beta-23516",
"System.Runtime": "4.0.21-beta-23516",
"System.Threading": "4.0.11-beta-23516"
}
}
現在可以使用.Net Core RC2完成此操作。 方法如下:
project.json
配置為包含相關的.net框架。 例如,本節引用.Net 4.51,該版本可以由任何與此版本相同或更高的框架引用: 例:
"frameworks": {
"net451": { },
"netstandard1.5": {
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-24027"
},
"imports": [
"portable-net45+wp80+win8+wpa81+dnxcore50",
"portable-net451+win8"
]
}
},
將RC2應用程序打包為Nuget包。 我還沒有看到如何從Visual Studio中執行此操作,但可以從命令行執行以下操作:
dotnet pack -oe:\\packages
如果要在每個構建時更新它,可以將以下內容添加到project.json文件中,該文件會自動將包更新到父目錄中:
"scripts": {
"postcompile": [
"dotnet pack --no-build --configuration Debug -o ..//..//..//packages"
]}
將Nuget包添加到.net 4.6應用程序中。 這可以通過幾種方式完成。 一種簡單的方法是將保存包的位置添加為packaage源引用。
每次構建時增加project.json
文件中的版本號,以確保其他應用程序看到更新。
答案顯示在演示文稿中
僅使用尚未發布的ASP.NET Core RC 2,將添加對csproj中引用xproj的支持。
我找到了一個非常簡單的解決方案,如果您不介意對Debug或Release的引用進行硬編碼。 您只需在csproj文件中手動添加對xproj的引用。 這是你如何做到的:
在csproj項目文件中找到您引用nuget包的部分。 啊......這是一個:
<Reference Include="Microsoft.CodeAnalysis, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\\packages\\Microsoft.CodeAnalysis.Common.1.3.0\\lib\\net45\\Microsoft.CodeAnalysis.dll</HintPath> <Private>True</Private> </Reference>
復制它並修改它以引用xproj項目生成的DLL,如下所示:
<Reference Include="HighFive.Server.Web"> <HintPath>..\\HighFive.Server.Web\\bin\\Debug\\net461\\HighFive.Server.Web.dll</HintPath> <Private>True</Private> </Reference>
關於硬編碼調試或發布參考:對於單元測試項目,這不是問題,因為您通常在調試模式下執行單元測試。 我相信使用MSBuild參數可以更聰明地避免硬編碼,但我還不需要這樣做。
我一直在努力解決這個問題,但是找到了比繁瑣的nuget包解決方案更好的解決方案。 我在Stackify上找到了這個。 這篇文章只討論了一個單獨的解決方案,但只使用一個解決方案很容易。
這個選項需要使用.NET核心和.NET 4.xx為每個項目提供兩個解決方案文件和兩個項目文件。首先創建一個新的空白解決方案。 接下來創建一個新的Windows“類庫”(你的名字在這一點上並不重要)。 從解決方案中刪除它,以便您可以編輯.csproj文件。 打開.csproj文件,並將AssemblyName
XML元素更改為.NET核心項目程序集名稱。 您現在應該對項目進行任何其他名稱相關的更改。 關閉.csproj並將其重命名為.xproj文件。 將其復制到.xproj文件所在的文件夾中。
既然你的新閃亮的.csproj文件准備好了,這就是魔術發生的地方。 創建一個名為ProjectName.project.json
的文件並將其添加到其中(根據需要修改.net框架)
{ "runtimes": { "win": {} }, "frameworks": { "net461": {} }}
在.NET 4.xx解決方案中,重新加載此修改后的.csproj,您可以添加源文件。 我發現最簡單的方法是按“顯示所有文件”,然后在每個文件/文件夾的右鍵單擊上下文菜單中單擊“包括在項目中”。 現在嘗試構建.csproj,它應該構建良好。 如果這不能正確構建,請嘗試重新加載項目,或重新啟動visual studio。
這與前一個相同,但有一些關鍵的區別。 .csproj文件的名稱必須與.xproj的名稱不同(我剛添加了一個后綴,如MyProjectName.win.csproj
和MyProjectName.win.project.json
)。 這些可以添加到同一解決方案中,而不會發生名稱沖突。 您甚至可以使.csproj中的AssemblyName
元素與.NET核心程序集名稱相同,因為輸出文件夾會根據.NET版本而更改
我發現這個解決方案比nu-get包選項好得多。 要考慮的唯一小問題是必須對任何引用,nu-get包或任何新文件的所有修改都添加到兩個項目中; 不過,這是一個很小的代價,以避免可怕的nu-get包選項。 讓我們交叉一下,希望VS團隊能夠盡快獲得.cspoj文件中的.xproj引用。
我知道我不應該發布鏈接,但是我想在它到期的地方給予信任。 http://stackify.com/using-both-xproj-and-csproj-with-net-core/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.