最近使用 .NET Core 遇到的一些坑

 

 

最近.NET Core升級到2.0後開始慢慢搗鼓的多了起來,但遇到了很多坑,因此特來記錄下。html

第一個坑  條件編譯符git

  咱們在編寫一些方法的時候一般會爲Debug模式增長一些輸出日誌等以便咱們檢查,也會爲Release模式增長或修改一些特定的參數,但今天我在寫這些的時候就遇到了這個坑
#if !DEBUG  #endif 中間的代碼 不能我怎麼更改配置環境 始終是灰色,這讓我開始懷疑,難道VS 2017 的.NET Core 不支持條件編譯符了? github

因而新建了個控制檯程序測試瞭如下,但又發現仍是起做用了的以下:json

這裏就能夠 看到 我明明不是Debug環境啊,但是 #if DEBUG的仍是正常色,!DEBUG的仍是灰色,直接F5運行後 發現結果出乎我意外mvc

結果竟然是正常的,如何我又懷疑是我vs 更新後出問題了,因而我又用.net framework 舊格式建立一個了一個項目發現舊的又是好的app

第二個坑  .NET Core MVC下的部分文件沒法下載ide

   使用.NET Core MVC建立了一個站點,原本使用的還蠻好的,但後來配備了app 因而就直接把apk 文件放到 網站的wwwroot目錄下了,改了個名字就叫app.apk,而後訪問: http://127.0.0.1/app.apk 返回給我一個404 not find 函數

 

由於搞iis 仍是比較多,因而立刻想到一個是天天添加 mime致使,因而去iis站點裏面增長,發現以及存在了測試

瞬間就懵逼了,因而就從到請求篩選裏面去找找是否是在那被禁止了 但發現也沒用,因而又把文件改爲app.apk.zip試了下,發現zip是能夠下載的網站

 

 

 

 

------------

21號中午更新,

這個問題感謝@蝸牛往前走的指點,因此才記原由爲iis只是一個代理了,因此本身搗鼓了一個解決方案,就是在appsettings.json配置裏面配置

以下

在到設置Startup.cs的添加代碼

 public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<Dictionary<string,string>>(Configuration.GetSection("Mime"));
            services.AddMvc();
            services.AddDbContext<ApplicationDataContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerConnection")));
        }
 public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<Dictionary<string, string>> option)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            // app.UseStaticFiles()  //使用新的配置文件方式使用
            var provider = new FileExtensionContentTypeProvider();
            foreach(string key in option.Value.Keys)
            {
                provider.Mappings.Add(key, option.Value[key]);
            }
            app.UseStaticFiles(new StaticFileOptions() { ContentTypeProvider = provider });
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

 

 由於FileExtensionContentTypeProvider默認的構造函數mime基本已經定死了 而。NET core的網站 不少是不採起iis設置的
FileExtensionContentTypeProvider代碼地址 你們能夠去看看https://github.com/aspnet/StaticFiles/blob/dev/src/Microsoft.AspNetCore.StaticFiles/FileExtensionContentTypeProvider.cs

 

第三個坑  .NET Core  2.0 MVC 的試圖文件

        從2.0開始貌似試圖文件被直接打包成了dll文件,不在像傳統的mvc同樣發佈後仍是shtml文件,而是被編譯成了dll文件 命名規則是 項目名稱.PrecompiledViews.dll

 

 第四個坑  .NET Core  引用DLL問題

        咱們之前開發老是把一些經常使用的某些功能性的單獨作成一個類庫 編譯成dll 後供項目使用,但這樣作好像在.NET Core的項目中行不通

起初我寫了一個公共的類庫,在解決方案裏面又新增了一個類庫,去引用公共類庫的項目,這樣作的時候並無什麼異常,但當我啓動另一個vs建立一個新的解決方案添加項目在去引用公共類庫的dll後 在vs裏面寫代碼都很正常,代碼提示也都有

可是一按F5 調試就出來坑了,報未能找到類型或命名空間

 

解決方案是把公共類庫打包 生成NuGet包

 

而後經過管理NuGet包添加引用,但不少狀況下 一些類庫我並不想都放到nuget.org上面,能夠把生成的nuget包放置Microsoft Visual Studio Offline Packages 離線包裏面

放到Microsoft Visual Studio Offline Packages對應的目錄便可

相關文章
相關標籤/搜索