• 最近使用 .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对应的目录即可

  • 相关阅读:
    多进程2
    并发编程
    粘包
    socket
    网络编程
    异常与网络编程
    面向对象高级
    多态
    面向对象2
    SQL数据库约束行为---防止数据乱填(即数据规范化)
  • 原文地址:https://www.cnblogs.com/dotnet-org-cn/p/7566724.html
Copyright © 2020-2023  润新知