FROM mcr.microsoft.com/dotnet/sdk:6.0.400-1-focal-arm64v8 AS build WORKDIR /src COPY ["Name.csproj", "."] RUN dotnet restore "./Name.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "Name.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "Name.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone ENTRYPOINT ["dotnet", "Name.dll"]

在 .NET 平台常见的获取当成程序主机路径的方法主要从

.NET 控制台程序,通过依赖注入获取 IHostEnvironment hostEnvironment

.NET Web程序,通过依赖注入获取 IWebHostEnvironment webHostEnvironment

hostEnvironment.ContentRootPath
webHostEnvironment.ContentRootPath

ContentRootPath 指的是应用程序内容文件的目录的绝对路径;

webHostEnvironment.WebRootPath

WebRootPath 指的是用于存放静态资源的那个 wwwroot 目录的绝对路径,ASP.NET Core MVC 项目的 css、 js、 img 等静态资源一般都是存放在 wwwroot 目录中,ASP.NET Core WebAPI 项目有需要也可以开启这个 wwwroot 的选项,只要在项目启动的时候 app.UseStaticFiles(); 启用静态文件模块即可。

由于Windows平台文件路径是用 \ 分隔的,但是Linux 和 Mac 平台无法识别 \ 分割凭借的文件路径,因为这两个平台是采用 / 做为文件路径分割符的,Windows 平台其实也是可以兼容 / 作为文件路径分割符号的。

在 .NET 6.0 及以前的版本中

webHostEnvironment.ContentRootPath;
webHostEnvironment.WebRootPath;
hostEnvironment.ContentRootPath;

三个变量的末尾都是带有一个分隔符的,但是.Net 7.0 中尾部的分割符号不见了,如果路径采用拼接的话就会出现问题,所以推荐拼接路径采用微软自带的方法 Path.Combine ,可以生成符合各个平台要求的路径。

本条目发布于 。属于 DotNet 分类。 作者是

以前的EF Core Model 中,string属性默认映射为Nullable,添加属性【Required】才会映射为NotNull,但是在升级到.Net 6.0后发生改变。

.Net 6.0启用了Nullable Context,csproj中多了<Nullable>enable</Nullable>以支持C#8.0 推出的Nullable Reference Type 概念,启用后,若string没声明为string?在为null时则会发生异常,如果要明确声明为null,则需要在后面加上 Null-Forgving Operator,例如 string x = null!;如果不想启用新特性设置为disable,Compiler恢复为C# 7.3前的规则。

数据库Sql Schema 也会受到Nullabel Context的影响,当<Nullable>enable</Nullable>,即使没有加属性【Required】Model的字符串属性仍然会视为不可为null,在生成Sql脚本时CREATE TABLE也会加上NOT NULL

本条目发布于 。属于 DotNet 分类。 作者是

MVC5中的BundleConfig已经被废弃了,这使用第三方库 Karambolo.AspNetCore.Bundling.NUglify

引用nuget包

Karambolo.AspNetCore.Bundling.NUglify或 Karambolo.AspNetCore.Bundling.WebMarkupMin
// 如果你还需要做less或scss等css预处理的操作
Karambolo.AspNetCore.Bundling.Less或Karambolo.AspNetCore.Bundling.Sass
// 如果需要对ES6语法做处理
Karambolo.AspNetCore.Bundling.EcmaScript

Program.cs中注入

builder.services.AddBundling().UseDefaults(builder.Environment) // 必需的,告诉中间件当前的处理环境路径相关
.UseNUglify() // 或者 .UseWebMarkupMin() 都可以实现静态资源捆绑压缩
.AddLess() // 启用less预处理
.AddSass() // 启用sass预处理
.AddEcmaScript() // 启用es6脚本预处理
.EnableMinification().EnableSourceIncludes(false)// 启用压缩及不显示源文件
.EnableCacheHeader(TimeSpan.FromDays(1)); // 启用客户端缓存头
app.UseBundling(bundles =>
bundles.AddCss("/main.css").Include("/css/site.css").Include("/css/site1.css");

_ViewImports 中添加

@using Karambolo.AspNetCore.Bundling.ViewHelpers @addTagHelper *, Karambolo.AspNetCore.Bundling

就可以再View中使用

@await Styles.RenderAsync("~/bundles/main.css") @await Scripts.RenderAsync("~/bundles/main.js")

我们的软件运行时,如果涉及到文件或者数据库操作的时候,可能会提示权限不足。一种比较简单的办法,就是右击以管理员权限运行,但是每次这么操作,又会比较麻烦,有没有什么更好的办法呢?今天跟大家分享一下WinForm程序以管理器权限运行的几种方法。

采用Process.Start方法

思路很简单,就是在Program.cs入口处判断当前是不是管理员权限,如果是,则不做其他处理,如果不是,改成管理员权限。

修改Main方法如下所示:

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//获得当前登录的Windows用户标示
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
//判断当前登录用户是否为管理员
if (principal.IsInRole(WindowsBuiltInRole.Administrator))
//如果是管理员,则直接运行
Application.Run(new FrmMain());
//创建启动对象
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
//设置启动动作,确保以管理员身份运行
startInfo.Verb = "runas";
Process.Start(startInfo);
catch
return;
Application.Exit();

直接修改exe属性

右击exe程序文件,在弹出的属性对话框中,兼容性选项中,勾选“以管理员身份运行此程序”即可。

添加应用程序清单文件

这种方法也是我常用的一种方式。

点击项目,右击添加,新建项,选择应用程序清单列表。

添加完成后,打开app.manifest文件,将:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />