但這兩天預到的問題實在太多,由Visual Studio本身對.NET Core的兼容性,.NET Core本身的問題,到Project設定,再到Apache等等問題,我都花了不少時間解決。
始終.NET Core還是很新的產品,Google後都很難找到實際解決方法,所以我把預到的問題和解決方法寫下來,希望幫到其他人。
開發環境可以參照我前天所寫的ASP.NET Core + CentOS 7 + Apache安裝攻略
Error 1 - The project has not been restored or restore failed - run `dotnet restore`
一次就出現4個Error Message:
Severity Code Description Project File Line Suppression State
Error 3. You may be trying to publish a library, which is not supported. Use `dotnet pack` to distribute libraries. SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
Error 2. The project does not list one of 'win10-x64, win81-x64, win8-x64, win7-x64' in the 'runtimes' section. SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
Error 1. The project has not been restored or restore failed - run `dotnet restore` SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
Error Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'. Possible causes: SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
幸好這個問題已經在Github上有人報告issue #2442。
解決方法是打開project.json,加上:
"runtimes": { "win10-x64": {}, "win8-x64": {} },之後找出"Microsoft.NETCore.App",修改為
"Microsoft.NETCore.App": { "version": "1.0.1", "type": "platform" }或者你會發現,在dependencies裡同樣都有"Microsoft.NETCore.App": "1.0.1",我自己就把這個刪除,但大家視乎情況而定。
Error 2 - .Net Core CLI建立不到Controller
在CLI執行Command:
dotnet restore dotnet aspnet-codegenerator controller -name SignupformController -m Signupform -dc SkinCVContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries No executable found matching command "dotnet-aspnet-codegenerator"Error Message:
No executable found matching command "dotnet-aspnet-codegenerator"
但有兩個解決辦法應該都是正確的。
Visual Studio 2017 解決方法:
csproj file加上:
Visual Studio 2015 解決方法:
在project.json中的dependencies部份加上:
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.1.0-preview4-final", "type": "build" }, "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { "type": "build", "version": "1.1.0-preview4-final" }在project.json中的tools部份加上:
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.1.0-preview4-final", "imports": [ "portable-net45+win8" ] }與此同時,你會掉進dependency hell!
或者你會想到"為什麼不用Nuget Package Manager安裝呢?"
我自己的情況就是這樣,用Nuget安裝會出Error Message,直接修改project.json就沒問題。
Error Package 'Microsoft.VisualStudio.Web.CodeGeneration.Tools 1.0.1' uses features that are not supported by the current version of NuGet.
To upgrade NuGet, see http://docs.nuget.org/consume/installing-nuget.
這裡我都搞了很久,就如之前所說,.NET Core和相關dependencies版本暫時還算混亂,上述的"CodeGeneration.Tools"和"CodeGeneration.Mvc",
你在Nuget上看就會見到不同版本適用於不同的Microsoft.NETCore.App,你不能隨便找個版本用,一定要符合兩者跟"Microsoft.NETCore.App"的版本要求,而CodeGeneration.*兩者的版本要一致。
附上三個Package Nuget連結自己對一對版本,我試過很多組合,只可以說新不一定好。
- Microsoft.VisualStudio.Web.CodeGeneration.Tools
- Microsoft.VisualStudio.Web.CodeGenerators.Mvc
- Microsoft.NETCore.App
Error 3 - Could not load file or assembly 'Microsoft.DotNet.InternalAbstractions
Error 2的問題相信你搞完一輪,一切準備就緒,拍下Enter鍵。沒錯!又Error!整個.NET Core CLI崩潰!
Error Message:
Unhandled Exception: System.IO.FileNotFoundException:
Could not load file or assembly 'Microsoft.DotNet.InternalAbstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
"Microsoft.DotNet.InternalAbstractions": "1.0.0"
Error 4 - Solution Explorer missing (Add Controller / View) menu item in context menu
這個問題其實跟上述Error 2有關,就是Solution Explorer right-click menu沒有[Add Controller/View]的選項做Scaffolding。
一開始我以為沒有是正常的,所以至會用原始方法(所以才經歷到Error 2)。
但當我搞好Error 2後,我發現與此同時[Add Controller/View]都出現了。
要操作正常之前提到採用的"Microsoft.VisualStudio.Web.CodeGeneration.Tools"和"Microsoft.VisualStudio.Web.CodeGeneration.Mvc"的版本尤關重要。
否則就會出現:
System.NullReferenceException: Object reference not set to an instance of an object.
Error 5 - 中文字於頁面中出現亂碼
因為你的檔案編碼不是UTF-8,你可以試試同時打開"/Views/Home/Index.cshtml"和你出現亂碼的View,再去VS的Menu>File>Advanced Save Options看看檔案編碼就知道問題所在。
這源自.NET Core Tool的錯誤,因為所建立的檔案會跟你的系統一樣,以我為例就是[Traditional Chinese (Big5) - CodePage 950]
所以解決方法是選擇[Unicode (UTF-8 without signature) - Codepage 65001]就OK。
Error 6 - invalid operationexception _ValidationScriptsPartial.cshtml was not found
執行Project時,出現以下錯誤:
InvalidOperationException: The partial view '_ValidationScriptsPartial' was not found. The following locations were searched:
/Views/Movies/_ValidationScriptsPartial.cshtml
/Views/Shared/_ValidationScriptsPartial.cshtml
解決方法:
自行建立"_ValidationScriptsPartial.cshtml",貼上下面的代碼,儲存至"Views/Shared" folder。
Error 7 - No executable found matching command "dotnet-bundle"
Error Message:
dotnet publish -c release -r centos.7-x64
Publishing SkinCV for .NETCoreApp,Version=v1.0/centos.7-x64
No executable found matching command "dotnet-bundle"
在project.json加入:
"BundlerMinifier.Core": "2.0.238",同樣要自行設置版本,若你的"Microsoft.NETCore.App"是1.0.1就用跟我一樣的2.0.238。
Error 8 - No executable found matching command "bower" / "gulp"
Error Message:
dotnet publish -c release -r centos.7-x64
Publishing SkinCV for .NETCoreApp,Version=v1.0/centos.7-x64
No executable found matching command "bower"
在Windows下,打開CMD,執行:
npm install -g bower npm install -g gulp
結果應該如下:
Microsoft Windows [版本 10.0.14393] (c) 2016 Microsoft Corporation. 著作權所有,並保留一切權利。 C:\Users\SamSung>npm install -g bower npm WARN deprecated bower@1.8.0: ..psst! While Bower is maintained, we recommend Yarn and Webpack for *new* front-end projects! Yarn's advantage is security and reliability, and Webpack's is support for both CommonJS and AMD projects. Currently there's no migration path, but please help to create it: https://github.com/bower/bower/issues/2467 C:\Users\SamSung\AppData\Roaming\npm\bower -> C:\Users\SamSung\AppData\Roaming\npm\node_modules\bower\bin\bower bower@1.8.0 C:\Users\SamSung\AppData\Roaming\npm\node_modules\bower C:\Users\SamSung>npm install -g gulp npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue npm WARN deprecated graceful-fs@1.2.3: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree. C:\Users\SamSung\AppData\Roaming\npm\gulp -> C:\Users\SamSung\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js gulp@3.9.1 C:\Users\SamSung\AppData\Roaming\npm\node_modules\gulp ├── interpret@1.0.3 ├── pretty-hrtime@1.0.3 ├── deprecated@0.0.1 ├── archy@1.0.0 ├── tildify@1.2.0 (os-homedir@1.0.2) ├── minimist@1.2.0 ├── v8flags@2.1.1 (user-home@1.1.1) ├── chalk@1.1.3 (supports-color@2.0.0, escape-string-regexp@1.0.5, ansi-styles@2.2.1, has-ansi@2.0.0, strip-ansi@3.0.1) ├── semver@4.3.6 ├── orchestrator@0.3.8 (stream-consume@0.1.0, sequencify@0.0.7, end-of-stream@0.1.5) ├── gulp-util@3.0.8 (array-differ@1.0.0, object-assign@3.0.0, lodash._reinterpolate@3.0.0, lodash._reescape@3.0.0, lodash._reevaluate@3.0.0, array-uniq@1.0.3, beeper@1.1.1, replace-ext@0.0.1, dateformat@2.0.0, has-gulplog@0.1.0, fancy-log@1.3.0, gulplog@1.0.0, vinyl@0.5.3, lodash.template@3.6.2, through2@2.0.3, multipipe@0.1.2) ├── liftoff@2.3.0 (lodash.isstring@4.0.1, lodash.isplainobject@4.0.6, rechoir@0.6.2, flagged-respawn@0.3.2, extend@3.0.1, lodash.mapvalues@4.6.0, resolve@1.3.3, fined@1.1.0, findup-sync@0.4.3) └── vinyl-fs@0.3.14 (strip-bom@1.0.0, graceful-fs@3.0.11, vinyl@0.4.6, defaults@1.0.3, mkdirp@0.5.1, through2@0.6.5, glob-stream@3.1.18, glob-watcher@0.0.6)
其實我遇到的問題還未止於此,Deploy時還有其他問題,在另一個Post再寫。
沒有留言:
發佈留言