You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio中引用DLL的Version属性来源及PowerShell读取方法咨询

问题解答

VS引用面板中Version属性的来源

你在Visual Studio引用属性面板看到的Version属性,不是DLL文件本身内置的元数据属性,而是该引用对应的NuGet包的发布版本号。
以你测试的System.Net.Http为例,VS面板显示的4.3.2是NuGet包的官方发布版本,微软为了保证运行时向后兼容,会单独维护三个独立的版本号:

  • NuGet包版本:用于包管理场景,也就是你在VS面板看到的版本,每次包功能更新时迭代
  • 程序集版本(AssemblyVersion):CLR加载程序集时的匹配依据,System.Net.Http的程序集版本长期固定为4.0.0.0,避免旧代码引用时出现不匹配错误
  • 文件版本(FileVersion):对应单DLL的编译迭代号,和.NET Framework的补丁更新同步,也就是你通过VersionInfo读到的4.6.25220.01

PowerShell读取该版本的实现方法

根据你的项目引用格式分两种情况处理:

1. 新版SDK风格项目(使用PackageReference管理包)

直接解析csproj项目文件的XML节点即可:

# 替换为你的csproj文件路径
$csprojPath = "C:\Project\Test.csproj"
$projXml = [xml](Get-Content $csprojPath -Encoding UTF8)
$packageRefs = $projXml.Project.ItemGroup.PackageReference | Where-Object { $_ }

foreach ($ref in $packageRefs) {
    Write-Host "包名:$($ref.Include),VS面板显示版本:$($ref.Version)"
}

2. 旧版.NET Framework项目(使用packages.config管理包)

解析项目目录下的packages.config文件:

# 替换为你的packages.config文件路径
$configPath = "C:\Project\packages.config"
$configXml = [xml](Get-Content $configPath -Encoding UTF8)
$packages = $configXml.packages.package

foreach ($pkg in $packages) {
    Write-Host "包名:$($pkg.id),VS面板显示版本:$($pkg.version)"
}

额外匹配校验

如果需要对应到实际的DLL文件,你可以到项目同级的packages目录下查找,目录名格式为包名.包版本,比如你测试的路径packages\System.Net.Http.4.3.2\中的4.3.2就是和VS面板一致的NuGet包版本。

内容的提问来源于stack exchange,提问作者Simon Elms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:24:03