当前位置: 首页 > article >正文

asp.net core mvc模块化开发

razor类库

在这里插入图片描述
在这里插入图片描述
新建PluginController

using Microsoft.AspNetCore.Mvc;namespace RazorClassLibrary1.Controllers
{public class PluginController : Controller{public IActionResult Index(){return View();}}
}

Views下Plugin下新建Index.cshtml

@{ViewBag.Title = "插件页面";
}
<h1>我是插件页面</h1>

新建mvc
在这里插入图片描述
在这里插入图片描述
修改program.cs

using Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation;
using Microsoft.Extensions.FileProviders;
using RazorClassLibrary1.Controllers;namespace WebApplication1
{public class Program{public static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);var assembly = typeof(PluginController).Assembly;// Add services to the container.builder.Services.AddControllersWithViews().AddApplicationPart(assembly).AddRazorRuntimeCompilation();builder.Services.Configure<MvcRazorRuntimeCompilationOptions>(options =>{options.FileProviders.Add(new EmbeddedFileProvider(assembly));});var app = builder.Build();// Configure the HTTP request pipeline.if (!app.Environment.IsDevelopment()){app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");app.Run();}}
}

运行项目
在这里插入图片描述
访问Plugin
在这里插入图片描述

普通类库

新建类库项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改csproj

<ItemGroup><FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

Plugin2Controller.cs

using Microsoft.AspNetCore.Mvc;namespace ClassLibrary1.Controllers
{public class Plugin2Controller : Controller{public IActionResult Index(){return View();}}
}

VIews\Plugin2\Index.cshtml

@{ViewBag.Title = "插件2页面";
}
<h1>我是插件2页面</h1>

Index.cshtml设置为嵌入资源
在这里插入图片描述
修改Program.cs

using Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation;
using Microsoft.Extensions.FileProviders;
using RazorClassLibrary1.Controllers;
using ClassLibrary1.Controllers;
using Microsoft.AspNetCore.Mvc.ApplicationParts;namespace WebApplication1
{public class Program{public static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);var assembly = typeof(PluginController).Assembly;var assembly2 = typeof(Plugin2Controller).Assembly;var part1 = new AssemblyPart(assembly);var part2 = new AssemblyPart(assembly2);builder.Services.AddControllersWithViews().ConfigureApplicationPartManager(apm =>{apm.ApplicationParts.Add(part1);apm.ApplicationParts.Add(part2);})//需要安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.AddRazorRuntimeCompilation();builder.Services.Configure<MvcRazorRuntimeCompilationOptions>(options =>{options.FileProviders.Add(new EmbeddedFileProvider(assembly));options.FileProviders.Add(new EmbeddedFileProvider(assembly2));});var app = builder.Build();// Configure the HTTP request pipeline.if (!app.Environment.IsDevelopment()){app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");app.Run();}}
}

访问Plugin2
在这里插入图片描述

如果遇到Cannot find compilation library location for package ‘System.Security.Cryptography.Pkcs‘错误需要升级System.Security.Cryptography.Pkcs

参考

https://www.cnblogs.com/readafterme/p/18470211
https://learn.microsoft.com/zh-cn/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-8.0
https://gitee.com/urselect/urshop
https://blog.csdn.net/u011511086/article/details/144530878

相关文章:

asp.net core mvc模块化开发

razor类库 新建PluginController using Microsoft.AspNetCore.Mvc;namespace RazorClassLibrary1.Controllers {public class PluginController : Controller{public IActionResult Index(){return View();}} }Views下Plugin下新建Index.cshtml {ViewBag.Title "插件页…...

第2.2节 Android Jacoco插件覆盖率采集

JaCoCo&#xff08;Java Code Coverage&#xff09;是一款开源的代码覆盖率分析工具&#xff0c;适用于Java和Android项目。它通过插桩技术统计测试过程中代码的执行情况&#xff0c;生成可视化报告&#xff0c;帮助开发者评估测试用例的有效性。在github上开源的项目&#xff…...

Vue3中router最佳封装落地

文章目录 前言一、拆分路由文件夹&#xff1f;二、main.ts中注册路由总结 前言 router在使用过程中如果我们直接在一个文件的一个数组中配置&#xff0c;最后路由越来越多会导致不易管理&#xff0c;我们可以将一个页面的路由配置在一个数组中最后统一导入&#xff0c;这样就会…...

MySQL Router被HTTP流量击穿

## MySQL Router被HTTP流量击穿 #莫名奇妙的问题&#xff0c;谁让客户把Router放公网呢&#xff1f;除了被挖矿&#xff0c;还能被HTTP流量攻击。 1、日志信息 rootubuntu:/mysql# terminate called after throwing an instance of ‘mysqlrouter: :URIErrorwhat(): inval…...

网络爬虫【爬虫库request】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库&#xff0c;完全满足如今网络爬虫的需求。与Urllib对比&#xff0c;Requests不仅具备Urllib的全部功能&#xff1b;在开发使用上&…...

如何使用jenv工具管理多个JDK版本

一、jenv到底是干啥的&#xff1f; 简单来说&#xff0c;jenv就是专门用来管理多个Java版本的工具。不管是开发、测试&#xff0c;还是生产环境&#xff0c;只要你需要在同一台机器上用不同的Java版本&#xff0c;它都能帮上大忙。比如说&#xff0c;项目A要求JDK 8&#xff0…...

如何彻底解决Docker Desktop中Kubernetes无法启动问题

我们时常会遇到Kubernetes启动提示如下报错信息&#xff1a; {"message":"starting kubernetes: pulling images: pulling from host: pulling tag \"registry.k8s.io/etcd:3.5.16-0\": Error response from daemon: .Log in with your Docker ID or…...

aws(学习笔记第三十四课) dockerized-app with asg-alb

aws(学习笔记第三十四课) dockerized-app with asg-alb 使用cdk生成dockerized-app并使用AutoScalingGroup和ApplicationLoaderBalancer 学习内容&#xff1a; 使用cdk生成dockerized-app并使用AutoScalingGroup和ApplicationLoaderBalancer在AutoScalingGroup中使用efs以及R…...

嵌入式c学习七

c语言指针&#xff1a;程序需要载入内存中运行&#xff0c;在32bit系统中内存地址的范围是&#xff1a;0x0000 0000-0xFFFF FFFF&#xff0c;内存大小为4GB&#xff0c;内存地址指的是内存单元的编号是固定的&#xff0c;本身就是一个整数&#xff0c;对于32bit系统&#xff0c…...

Selenium Web UI自动化测试:从入门到实战

引言 在当今快速迭代的软件开发周期中&#xff0c;自动化测试已成为保障产品质量、提升测试效率的核心手段之一。而针对Web应用的UI自动化测试&#xff0c;Selenium作为最流行的开源工具之一&#xff0c;凭借其跨浏览器、多语言支持&#xff08;Python、Java、C#等&#xff09…...

【实战指南】用MongoDB存储文档和图片等大文件(Java实现)

一、前言 在现代应用开发中,经常需要处理和存储大量的文档、图片等大文件。传统的关系型数据库在处理这类大文件时,往往会面临性能瓶颈、存储成本高等问题。而 MongoDB 作为一款流行的 NoSQL 数据库,提供了 GridFS 规范,能够很好地解决大文件存储的问题。GridFS 可以将大文…...

Jetpack Compose 显示时间

Jetpack Compose 显示时间 介绍主体代码使用 介绍 在软件中实时显示时间 主体代码 import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStat…...

vue3中,通过获取路由上的token直接进入首页,跳过登录页面

1.需求 A系统想快速进入到B系统&#xff0c;但又不想输入账号密码&#xff0c;A系统的token与B系统共用token&#xff0c;因此在访问B系统就会在路径上携带token&#xff08;https://magictool-box.com/login?token《token》&#xff09;&#xff0c;通过token直接进入B系统首…...

软考通关利器:中级软件设计师结构化开发核心考点

简介&#xff1a; 作为国家软考中级认证的核心科目&#xff0c;“软件设计师” 结构化开发能力是职业进阶的黄金敲门砖。本模块聚焦考试大纲高频考点&#xff0c;深度解析需求建模、结构化分析方法&#xff08;SA/SD&#xff09;、模块设计原则、数据流图&#xff08;DFD&#…...

[思考记录]两则:宏观视角、理想化

#宏观视角# 昨天听金老师讲解了他初步整理的大模型宏观概念关系图&#xff0c;受益不少。图上不仅是涵盖了诸多概念&#xff0c;更厉害的应该在于把概念之间的关系进行了描述&#xff0c;更直观展现了概念是如何与其他概念相互作用的。帮助从整体的角度去理解&#xff0c;以及透…...

MySQL 性能优化方向

MySQL 性能优化是一个系统性的工作,涉及数据库设计、查询优化、索引优化、硬件配置等多个方面。以下是 MySQL 性能优化的主要方向和具体优化方案: 一、数据库设计优化 1. 合理设计表结构 规范化设计:避免数据冗余,确保数据一致性。适度反规范化:在查询频繁的场景下,适当…...

3-22 vector的使用详解---STL C++

C中的vector容器展开系统讲解&#xff0c;具体内容如下&#xff1a; 1. vector的定义和特性&#xff08;基础概念&#xff09; 讲解vector作为动态数组的核心特性&#xff1a;自动内存管理、动态扩容机制&#xff08;倍增策略&#xff09;对比普通数组&#xff1a;支持随机访…...

Collectors.toList / list 转 list

前言 略 Collectors.toList List<User> userList ...; List<Long> userIdList userList.stream().map(User::getUserId).collect(Collectors.toList());...

uniapp 和 webview 之间的通信

1.背景 应用使用了uniapp开发跨端应用&#xff0c;在uniapp中内嵌webview页面实现页面热更新效果&#xff0c;不需要用户单独重新安装软件即可实现页面的版本更新。 2.webview通知uniapp 在开发过程中我们难会遇到需要uniapp和webview来实现数据通信的场景&#xff0c;接下来…...

【Linux】Hadoop-3.4.1的伪分布式集群的初步配置

配置步骤 一、检查环境 JDK # 目前还是 JDK8 最适合 Hadoop java -version echo $JAVA_HOME Hadoop hadoop version echo $HADOOP_HOME 二、配置SSH免密登录 Hadoop需要通过SSH管理节点&#xff08;即使在伪分布式模式下&#xff09; sudo apt install openssh-server …...

【Java】深入了解下Java Bitset

【Java】深入了解下Java Bitset 推荐超级课程&#xff1a; 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 目录 【Java】深入了解下Java Bitset引言如果Java Bitset不是布尔数组&#xff0c;那它是什么…...

Linux CentOS7 安装 ffmpeg教程

官网&#xff1a;FFmpeg 操作 先用uname -a 查看内核版本&#xff0c;如果是 3.2.0或者以上就可以按照此办法来安装 cd /tmp wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz# 2. 解压 tar xvf ffmpeg-release-amd64-static.tar.xz# 3. 将…...

楼宇自控系统的结构密码:总线与分布式结构方式的差异与应用

在现代建筑中&#xff0c;为了实现高效、智能的管理&#xff0c;楼宇自控系统变得越来越重要。它就像建筑的 智能管家&#xff0c;可自动控制照明、空调、通风等各种机电设备&#xff0c;让建筑运行更顺畅&#xff0c;还能节省能源成本。而在楼宇自控系统里&#xff0c;有两种关…...

Fourier-Lerobot——把斯坦福人形动作策略iDP3封装进了Lerobot(含我司七月人形研发落地实践)

前言 近期在抠lerobot源码时&#xff0c;看到其封装了ALOHA ACT、diffusion policy、π0时&#xff0c;我就在想&#xff0c;lerobot其实可以再封装下idp3 我甚至考虑是否从我联合带的那十几个具身研究生中选几个同学做下这事&#xff0c;对他们也是很好的历练然当25年3.18日…...

系统架构设计知识体系总结

1.技术选型 1.什么是技术选型&#xff1f; 技术选型是指评估和选择在项目或系统开发中使用的最合适的技术和工具的过程。这涉及考虑基于其能力、特性、与项目需求的兼容性、可扩展性、性能、维护和其他因素的各种可用选项。技术选型的目标是确定与项目目标相符合、能够有效解…...

计划管理工具应该具备的能(甘特图)

在当今快节奏的项目管理环境中&#xff0c;高效地规划和跟踪项目进度是至关重要的。甘特图&#xff0c;作为项目管理领域的经典工具&#xff0c;以其直观的时间轴和任务分配方式&#xff0c;深受项目管理者的青睐。 随着数字化时代的到来&#xff0c;甘特图线上编辑器应运而生&…...

简单实用!百度AI + Raphael AI = 免费生图

简单实用&#xff01;百度AI Raphael AI 免费生图 -- ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b55eda9141d34697b05db0cd60f62b75.png#pic_center) 第一步&#xff1a;下载或截取一些好看的图片当参考图片 第二步&#xff1a;用百度AI描述你想要的图片&…...

2 相交链表

1 常规思路 比较两个链表的长度&#xff0c;然后让较短的链表走二者长度之差&#xff0c;此时两个链表就一样长了&#xff0c;开始用双指针遍历&#xff0c;如果有相等返回&#xff0c;没有返回null&#xff1b; 为了减少冗余代码&#xff0c;我们设置一个minCur和maxCur分别…...

2025-03-22 学习记录--C/C++-C 库函数 - getchar()

C 库函数 - getchar() ⭐️ C 标准库 - <stdio.h> &#xff08;一&#xff09;、函数声明 &#x1f36d; int getchar(void)从标准输入 stdin 获取一个字符&#xff08;一个无符号字符&#xff09;。 参数&#xff1a;&#x1f380; NA 返回值&#xff1a;&#x1f38…...

APM 仿真遥控指南

地面站开发了一段时间了&#xff0c;由于没有硬件&#xff0c;所以一直在 APM 模拟器中验证。我们已经实现了 MAVLink 消息接收和解析&#xff0c;显示无人机状态&#xff0c;给无人机发送消息&#xff0c;实现一键起飞&#xff0c;飞往指定地点&#xff0c;降落&#xff0c;返…...