如何获取C# Prism 6项目中各DLL版本?是否仅需遍历文件夹?
获取C# Prism 6项目中DLL版本的方法
遍历文件夹确实是常用方法,但绝对不是唯一途径,下面给你整理几个实用的方案:
1. 遍历文件夹读取版本信息
这是最直接的方式,你可以用Directory.GetFiles遍历指定目录下的DLL文件,再通过FileVersionInfo.GetVersionInfo获取版本信息。示例代码如下:
var dllDirectory = @"你的项目输出目录或依赖项目录"; foreach (var dllPath in Directory.GetFiles(dllDirectory, "*.dll")) { var versionInfo = FileVersionInfo.GetVersionInfo(dllPath); Console.WriteLine($"{Path.GetFileName(dllPath)}: {versionInfo.FileVersion}"); }
这种方法能覆盖所有本地存在的DLL,包括自定义DLL和NuGet下载的依赖,通用性很强。
2. 通过NuGet包管理器直接查看
对于NuGet依赖项,完全不用自己写代码读取——打开Visual Studio的NuGet包管理器(右键项目→管理NuGet程序包),切换到「已安装」标签,就能直接看到每个NuGet包的版本号。如果是多模块项目,还可以在解决方案级别的NuGet管理器里统一查看所有项目的依赖版本。
3. 解析项目文件(.csproj)
Prism项目的每个模块都有对应的.csproj文件,里面会记录NuGet包的引用版本,以及自定义DLL的引用路径和版本信息。你可以直接读取这些XML格式的文件,解析<PackageReference>或<Reference>节点来获取版本。比如:
<!-- NuGet包引用示例 --> <PackageReference Include="Prism.Core" Version="6.3.0" /> <!-- 自定义DLL引用示例 --> <Reference Include="MyCustomDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> <HintPath>..\Libs\MyCustomDll.dll</HintPath> </Reference>
这种方法适合在没有编译输出的时候,直接从项目配置里获取版本信息。
4. 利用反射在运行时获取
如果你的项目已经在运行中,可以通过反射加载程序集,读取Assembly.GetName().Version属性。不过要注意,这种方法只能获取当前已加载到应用程序域中的DLL版本,未被加载的依赖无法获取。示例代码:
// 获取当前程序集引用的所有已加载程序集 foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { Console.WriteLine($"{assembly.GetName().Name}: {assembly.GetName().Version}"); }
总结一下,遍历文件夹是靠谱的通用方法,但根据你的场景(比如是编译前查看、运行时获取,还是只关注NuGet包),可以选择更合适的方式。
内容的提问来源于stack exchange,提问作者Bro
相关产品推荐
相关产品推荐

