2016-09-04 102 views
1

我想要構建一個簡單的.net核心MVC應用程序,其中包含一個用於數據訪問的類庫,以瞭解如何構建/部署/在Linux上運行Core。並不像我希望的那麼簡單!將帶有類庫的.Net Core MVC應用程序部署到Ubuntu 16.04:

編輯:這裏是解決方案的副本,如果有人有興趣: https://s3.amazonaws.com/kilonova-public/code/CoreCrossPlatform.zip

我扔在一起的VirtualBox虛擬機W/Ubuntu服務器16.04和安裝DOTNET核心按照以下說明:

https://www.microsoft.com/net/core#ubuntu

我在VS 2015的主機(Win10)上安裝了所有最新的必要位,並創建了一個名爲「DataAccess」的MVC應用程序和單個類庫的解決方案。這是EF Core使用他們最新的核心提供商與MySQL交談。當我運行/調試它時,它全部在Win10主機上完美運行。提取數據,看起來不錯。

「DOTNET - 版本」主機和虛擬機上都帶給我:

1.0.0-preview2-003121

然而,當我把它部署到Ubuntu的虛擬機,我得到的類庫依賴以下錯誤:

Project corecrossplatform (.NETCoreApp,Version=v1.0) will be compiled because the version or bitness of the CLI changed since the last build 
Compiling corecrossplatform for .NETCoreApp,Version=v1.0 
/opt/dotnet/corecrossplatform/project.json(24,23): error NU1002: The dependency DataAccess does not support framework .NETCoreApp,Version=v1.0. 

Compilation failed. 
    0 Warning(s) 
    1 Error(s) 

Time elapsed 00:00:00.0187782 

無論我運行「dotnet還原」還是「dotnet運行」,都會發生這種情況。說實話,我甚至不確定我是否正確地部署了這個東西。文檔是斑駁的,我正在做一些猜測。我將項目文件夾「src \ CoreCrossPlatform」(包含bin,Program.cs,appsettings.json等)中的所有內容複製到VM上,這就是我在VM中執行「dotnet」命令的地方。

的數據訪問以.json文件:

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
     "Microsoft.EntityFrameworkCore": "1.0.0", 
     "MySql.Data.Core": "7.0.4-IR-191", 
     "MySql.Data.EntityFrameworkCore": "7.0.4-IR-191", 
     "NETStandard.Library": "1.6.0" 
    }, 

    "frameworks": { 
    "netstandard1.6": { 
     "imports": "dnxcore50" 
    } 
    } 
} 

的MVC project.json:

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.0", 
     "type": "platform" 
    }, 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0", 
    "Microsoft.AspNetCore.Mvc": "1.0.0", 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", 
    "Microsoft.AspNetCore.StaticFiles": "1.0.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Logging": "1.0.0", 
    "Microsoft.Extensions.Logging.Console": "1.0.0", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", 
    "DataAccess": "1.0.0-*" 
    }, 

    "tools": { 
    "BundlerMinifier.Core": "2.0.238", 
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ 
     "dotnet5.6", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "Areas/**/Views", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "prepublish": [ "bower install", "dotnet bundle" ], 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    } 
} 

一些需要注意的:當我使用 「的dotnet新」,恢復運行示例項目,運行VI上面的教程鏈接,它運行良好。

我錯過了什麼?另一個問題:將這種類型的應用發佈到Linux機器上的最佳方式是什麼?我甚至關閉那部分?

非常感謝。

編輯:雖然踢這個死馬整個下午,我比較了一些筆記我在網上找到,與此相關的「NU1002」的錯誤,樣本項目「的dotnet新」的產生。我試圖改變「框架」既project.json文件(MVC和CLASSLIB)以下部分,但沒有成功......同樣的錯誤:

"frameworks": { 
    "netcoreapp1.0": { 
     "dependencies": { 
      "Microsoft.NETCore.App": { 
       "type": "platform", 
       "version": "1.0.0" 
      } 
     }, 
     "imports": [ 
      "dnxcore50", 
      "dotnet5.6", 
      "portable-net45+win8" 
     ] 
    } 
} 

編輯:很多感謝goaty:當他在評論中指出,複製整個解決方案並構建它,導致構建成功。但是,我不能沒有錯誤地運行它。它似乎並沒有恢復MySQL的EF核心的依賴:存在於您的src /目錄以外

Project CoreCrossPlatformFlat (.NETCoreApp,Version=v1.0) will be compiled because the version or bitness of the CLI changed since the last build 
Compiling CoreCrossPlatformFlat for .NETCoreApp,Version=v1.0 
/opt/dotnet/corecrossplatform/src/CoreCrossPlatformFlat/project.json(25,52): error NU1001: The dependency MySql.Data.EntityFrameworkCore >= 7.0.4-IR-191 could not be resolved. 

Compilation failed. 
    0 Warning(s) 
    1 Error(s) 
+0

我剛剛看了一下您的解決方案。它看起來像在你的src/CoreCrossPlatform文件夾中只有web項目。班級圖書館不在嗎? –

+0

@goaty - 真的很奇怪。可能沒有壓縮到根目錄?重新上傳了一份新的副本。謝謝。 –

+0

你的新上傳說拒絕訪問:) –

回答

1

DataAccess庫。因此網絡項目找不到參考。 我建議這個結構

src/ 
|---DataAccess/ 
|---CoreCrossPlatform/ 

希望幫助:)

相關問題