0

我有一個MVC6網站,它必須在完整的網絡框架之上運行,因爲它依賴於各種尚未更新以支持Net Core的庫。NetNET上的ASPNET核心/ EF核心應用程序

我想我可能會錯誤地配置project.json文件。這裏是我有什麼:

{ 
    "dependencies": { 
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0", 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0", 
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0", 
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0", 
    "Microsoft.AspNetCore.Mvc": "1.0.1", 
    "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.1", 
    "Microsoft.AspNetCore.StaticFiles": "1.0.0", 
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1", 
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1", 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.Extensions.Caching.Memory": "1.0.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Configuration.UserSecrets": "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", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Serilog": "2.2.1", 
    "Serilog.Sinks.RollingFile": "3.0.1", 
    "Serilog.Sinks.Literate": "2.0.0", 
    "Serilog.Extensions.Logging": "1.2.0", 
    "AutoMapper": "5.1.1", 
    "WindowsAzure.Storage": "7.2.1", 
    "Microsoft.Azure.WebJobs": "1.1.2", 
    "Microsoft.WindowsAzure.ConfigurationManager": "3.2.1", 
    "UploadFramework": "1.0.0-*", 
    "ConnellDataCore": "1.0.0-*", 
    "ConnellData": "1.0.0-*", 
    "System.IO.Compression": "4.1.0", 
    "BundlerMinifier.Core": "2.2.281" 
}, 

    "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", 
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", 
    "Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview2-final", 
     "imports": [ 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "frameworks": { 
    "net46": { } 
    }, 

    "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%" ] 
    } 
} 

這個所依賴的所有項目都建立在Net46之上。有project.json文件都有類似的條目:

"frameworks": { 
    "net46": { 
     "frameworkAssemblies": { 
     "System.Configuration": "4.0.0.0" 
     } 
    } 
    } 

雖然在這個特殊的例子我併入frameworkAssemblies項,因爲我需要訪問ConfigurationManager中(如果這不是解決問題的正確方法,請指教)。

這是配置ASPNET核心/ EF核心應用程序在Net46之上運行的正確方法嗎?如果不是,我需要改變什麼?

附加信息

我遇到的問題涉及到System.IO.Compression組裝。具體來說,發生的事情是我的解決方案已建成,但每當網站嘗試訪問ZipArchive時,它都會崩潰。由於System.IO.Compression.dll未部署到站點的bin目錄(有趣的是,部署了System.IO.Compression.Zip.dll ,但它對System.IO.Compression.dll沒有用處)。

我通過手動將System.IO.Compression複製到網站的bin文件夾來「解決」了該問題。但是,在網站發佈時,手動複製的DLL不會部署到Azure,因此基於Azure的站點會出現相同的崩潰問題。

在試圖解決這個問題時,我通過所有各種項目挖掘並檢查了System.IO.Compression DLL的文件版本。我發現了一個奇怪的問題:System.IO.Compression DLL被包含在我的子項目(網站所依賴的項目)中,它們是從NetCore程序集緩存中部署的,而不是標準的Net4.6緩存。

我不知道這是什麼意思。但我認爲這可能與我遇到的問題有關。

所以我的目標是,確保>>沒有< <項目從Net Core部署任何程序集。

不幸的是,我不知道該怎麼做。我懷疑這個問題涉及到一些參考資料,可能是ASPNET Core本身,它堅持或默認使用Net Core程序集。但我不知道該如何告訴它。

+0

你爲什麼認爲你誤解了它?有沒有錯誤?它建立和發佈罰款嗎? (我看不出有什麼問題,所有依賴和框架都在正確的位置) –

+0

LOL!我很少發佈類似這樣的配置問題,所以我習慣於顯示哪一行代碼導致錯誤,因爲這些問題與特定的代碼行無關。感謝Thanx的反饋,並且我編輯了我的問題以提供更多的上下文。 –

+0

可能會對您有所幫助:https://blogs.msdn.microsoft.com/cesardelatorre/2016/06/28/running-net-core-apps-on-multiple-frameworks-and-what-the-target-framework -monikers-TFMS-是-約/ – Sampath

回答

0

該dll不被複制與.net核心無關,我不確定這是什麼問題,該dll不復制,因爲沒有在您的代碼中直接引用它。 System.IO.Compression.Zip.dll被複制,因爲您的代碼中的某處您正在實例化對象或從該dll調用靜態方法。

當實體框架6出貨時,他們將SqlServer提供程序移動到一個單獨的dll中,因爲沒有人在代碼中直接引用它,所以沒有部署它。

羅布郎在他的adventures和最終解決一個有趣的閱讀:

var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance; 

部署與本地報告的應用程序時,我也看到simular問題與所有的SqlServer的數據類型的dll,還有我帶一個不同的方法,並直接在web項目中引用dll(有很多),並將它們全部複製到本地true,我相信只要在正在發佈或部署的項目中對dll進行了重新指定,它們也將被複制到輸出文件夾,但是如果它們被正在發佈/部署的項目引用的類庫引用,它們將不會。