深入浅出Blazor webassembly之以SubDirectory方式部署

本文介绍BlazorWASM在不同环境下如何配置URL,包括非子目录和子目录部署的具体步骤,确保应用名称能被正确地加入到URL中。

blazor wasm 默认开发环境url 为, http://localhost:5000

生产环境多数情况下需要在端口后增加一个名称, 这样能直观知道这个url是属于哪个系统的. 比如 http://localhost:5000/CoolApp

url要增加这个应用名, 自然不应手工改写所有 razor page 的url, 那样就太麻烦了, 也不适合工程化需要. blazor wasm应用本身内置支持这一需求.

====================================

非subdirectory部署的配置

====================================

1. index.html head 下 base tag 为

    <base href="/" />

   这个base tag对于 SPA 框架都很有用, 比如 Angular 框架, 也使用 base tag.

2 服务启动命令为,

   dotnet run --project "c:\blazorapps\demo1\demo1.csproj"

3. 浏览器访问地址为 http://localhost:5000

====================================

以subdirectory部署的配置

====================================

假设应用名定为 CoolApp, 下面步骤可以将 CoolApp 加到 url中

1. index.html head 下 base tag 为

    <base href="CoolApp/" />

   用于 razor路由计算, 以及设定 blazor.webassembly.js 的访问地址

2 服务启动命令为,

   dotnet run --project "c:\blazorapps\demo1\demo1.csproj" --pathbase="/CoolApp"

用于控制css静态资源的base 路径

3. 浏览器访问地址为 http://localhost:5000/CoolApp

 注意 base tag 和 浏览器url都是大小写敏感的, 而启动命令 pathbase 大小写不敏感

<think>根据用户提供的引用内容,用户意图是了解CMake中`add_subdirectory`命令的使用示例。引用[4]详细解释了`add_subdirectory`的参数含义:`source_dir`指定源CMakeLists.txt和代码文件所在的目录,可以是相对路径或绝对路径;`binary_dir`指定输出文件的目录,可选,默认为相对于当前输出目录的相同路径。 我将按照以下结构回答: 1. 解释`add_subdirectory`命令的基本语法和作用 2. 提供一个清晰的使用示例,包括目录结构和CMakeLists.txt内容 3. 说明关键注意事项 4. 生成相关问题 注意:所有行内代码和变量使用`$...$`格式,独立代码块单独成段。</think>### CMake `add_subdirectory` 使用示例 #### 命令说明 `add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])` 用于将子目录的构建添加到当前构建系统中: - `$source_dir$`:子项目的源目录(包含 `$CMakeLists.txt$` 的路径),相对路径基于当前目录 - `$binary_dir$`(可选):子项目的构建输出目录,默认与 `$source_dir$` 同名 - `$EXCLUDE_FROM_ALL$`(可选):若设置,子项目不会包含在默认构建目标中 #### 典型目录结构 ```bash project_root/ ├─ CMakeLists.txt # 根构建文件 ├─ main.cpp # 主程序 ├─ libs/ │ ├─ CMakeLists.txt # 子项目构建文件 │ ├─ math.cpp # 子项目源码 │ └─ include/ │ └─ math.h # 子项目头文件 ``` #### 示例代码 1. **根目录的 `$CMakeLists.txt$`**: ```cmake cmake_minimum_required(VERSION 3.22) project(MainProject) # 添加子目录(libs/ 中的代码将构建到 build/libs/) add_subdirectory(libs) # 创建主可执行文件 add_executable(main_app main.cpp) # 链接子项目生成的库 target_link_libraries(main_app math_lib) ``` 2. **子目录 `$libs/CMakeLists.txt$`**: ```cmake # 定义子项目 project(MathLib VERSION 1.0) # 添加头文件路径(引用[2]类似方法) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) # 创建库文件(引用[5]类似语法) add_library(math_lib STATIC math.cpp) # 设置版本属性(引用[2]扩展) set_target_properties(math_lib PROPERTIES VERSION ${PROJECT_VERSION} DEBUG_POSTFIX "_d" # Debug模式后缀(引用[3]类似) ) ``` #### 关键特性 1. **路径解析**(引用[4]): - 相对路径 `$add_subdirectory(libs)$` 等效于 `$add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs)$` - 可显式指定二进制目录:`$add_subdirectory(libs build/output)$` 2. **作用域影响**: - 子目录中定义的变量默认不向上传递(需用 `$set(... PARENT_SCOPE)$`) - 父目录通过 `$target_link_libraries()$` 链接子目录生成的库 3. **构建控制**: ```cmake # 子项目不包含在默认构建目标中(需显式构建) add_subdirectory(tests EXCLUDE_FROM_ALL) ``` #### 常见错误处理 - **路径不存在时**:CMake 报错 `$add_subdirectory given source "xxx" which is not an existing directory$` - **循环嵌套**:避免子目录再次包含父目录(导致无限递归) - **变量冲突**:使用 `$<PROJECT-NAME>_BINARY_DIR$` 区分不同项目的二进制路径 > 引用[4]说明:当执行 `$add_subdirectory$` 时,子目录的 `$CMakeLists.txt$` **会立即处理**,然后继续执行当前文件的后续命令[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值