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


 

 

最近.NET Core升級到2.0后開始慢慢搗鼓的多了起來,但遇到了不少坑,所以特來記錄下。

第一個坑  條件編譯符

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

於是新建了個控制台程序測試了以下,但又發現還是起作用了的如下:

這里就可以 看到 我明明不是Debug環境啊,可是 #if DEBUG的還是正常色,!DEBUG的還是灰色,直接F5運行后 發現結果出乎我意外

結果居然是正常的,如何我又懷疑是我vs 更新后出問題了,於是我又用.net framework 舊格式創建一個了一個項目發現舊的又是好的

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

   使用.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對應的目錄即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM