本文主要记录在 Windows 上安装 .NET SDK、用 dotnet new webapp 创建 Razor Pages 项目,以及为后续扫描片源信息接入 MediaInfo.DotNetWrapper 与原生 MediaInfo.dll 的步骤。

示例项目名 MediaManager,目标是媒体库管理类应用的脚手架;配置中的电影目录、SMB 盘符请按本机替换。SDK 大版本以当时 LTS 为例(文中为 .NET 10 预览/LTS 记录,安装时以 官网下载页 当前 LTS 为准)。

安装 SDK

从官网安装当前 LTS 的 .NET SDK 后,在 PowerShell 中验证:

dotnet --version

能打印版本号即 CLI 可用。无需把个人安装路径写进文档。

创建 Web 项目

在工作目录执行:

dotnet new webapp -n MediaManager
cd MediaManager
dotnet run

终端会给出监听地址(示例曾为 http://localhost:5187以本次输出为准)。浏览器打开该地址,应看到模板欢迎页。

目录结构(Razor Pages 模板)

MediaManager/
├── appsettings.json
├── MediaManager.csproj
├── Program.cs
├── Pages/
│   ├── Shared/
│   ├── Index.cshtml
│   └── Index.cshtml.cs
└── wwwroot/
    ├── css/
    ├── js/
    └── lib/
路径作用
Program.cs应用入口:服务注册、中间件管道;后续数据库、后台扫描任务等在此挂载
appsettings.json配置(连接串、媒体目录等),避免硬编码
Pages/*.cshtml页面标记
Pages/*.cshtml.cs页面模型与处理逻辑
wwwroot/静态资源;海报等也可经静态文件中间件映射
*.csproj目标框架与 NuGet 包引用

添加媒体目录配置

appsettings.json 增加节点(路径为示例):

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "MediaConfig": {
    "MovieDirectory": "Z:\\testmovies"
  }
}

JSON 中 Windows 路径反斜杠需写成 \\。Linux/NAS 部署时可改为 /mnt/<pool>/movies 一类路径。配置绑定到 C# 选项类的写法可在后续数据库/扫描篇展开。

接入 MediaInfo

安装 NuGet 包装包

在项目目录:

dotnet add package MediaInfo.DotNetWrapper

包装库通常只提供托管 API,运行时仍依赖原生 MediaInfo.dll

放置原生 DLL

  1. 打开 MediaInfo Windows 下载页
  2. 下载 DLL without installer64-bit 包。
  3. 解压后找到 MediaInfo.dll,复制到项目根目录(与 Program.cs*.csproj 同级)。

复制到输出目录

默认根目录松散文件不会进 bin/Debug/...。在 MediaManager.csproj 中增加:

<ItemGroup>
  <None Update="MediaInfo.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

完整示意(包版本以 dotnet add 结果为准):

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="MediaInfo.DotNetWrapper" Version="1.0.7" />
  </ItemGroup>
  <ItemGroup>
    <None Update="MediaInfo.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

重新 dotnet build / dotnet run 后,输出目录中应存在 MediaInfo.dll。若运行时报找不到原生库,优先检查架构(x64)与 CopyToOutputDirectory

验证结果

步骤判断
SDKdotnet --version 有输出
模板站点dotnet run 后浏览器打开本地 URL 正常
配置appsettings.jsonMediaConfig:MovieDirectory 路径存在且可读
MediaInfo输出目录含 MediaInfo.dll;后续用包装 API 读测试片源不因缺 DLL 失败

扫描目录、解析分辨率/音轨/HDR 等业务代码不在本文展开,可接数据库与 EF 相关草稿。

注意事项

  • 目标框架 net10.0 随 SDK 升级可能变为其它 LTS 编号,以本机 SDK 支持为准。
  • 原生 DLL 许可与分发遵循 MediaInfo 许可,发布安装包时勿遗漏。
  • 不要把含密钥的 appsettings.Production.json 提交进公开仓库。
  • 截图资产若上站,应从 vault 相对路径迁到 blog-content/assets/posts/<slug>/

参考资料