Power shell 脚本 - 我们可以在构建时设置 dll 产品版本吗?

Power shell script - can we set dll Product Version when we build it?

我是 Power 的新手shell。 我正在使用 power shell 脚本来构建 VB6 dll。

$compiler = "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE".
$vbpPath= "C:\...\Desktop\ProjectFile\ProjectName.vbp"
$Outputpath = "C:\...\Desktop\Destination\ProjectName.dll"

Start-Process -FilePath "`"$compiler `"" -ArgumentList "/out
error.txt /make `"$vbpPath`" `"$Outputpath `""  -PassThru -Wait

在构建的时候可以自己设置产品版本吗? 假设将产品版本设置为 "Mysoftware 5.1 Beta 6"。 提前致谢。

遇到类似问题的任何人,您好,

引用此 link 后: How do I set the version information for an existing .exe, .dll?

我能够更改特定文件夹下的 dll 和 exe 的产品版本。此步骤在构建所有 dll 和 exe 后完成。

  1. 使用Resource Hacker从exes/dlls中提取*.RC文件:

    $ResourceHackerPath = "C:\Tools\resource_hacker\ResourceHacker.EXE"
    $Dllpath = "...\MySoftware\Mydll.dll" 
    $RCpath = "...\MySoftware\Mydll.RC"
    Start-Process -FilePath "`"$ResourceHackerPath`""  -ArgumentList "-extract `"$ProductPath`",`"$RCpath`",versioninfo,," -wait                                                                          
    
  2. 编辑 *.RC 文件中的产品版本:

    $OriProVer = (Get-Item -literalpath $Dllpath ).VersionInfo.ProductVersion
    $NewProVer = "Mysoftware 5.1 Beta 6"
    (Get-Content $Dllpath).Replace($OriProVer, $NewProVer ) | Set-Content $Dllpath
    
  3. 使用GoRC将*.RC文件格式更改为*.RES文件:

    Start-Process -FilePath "`"$GoRCPath`""  -ArgumentList "/r `"$RCpath`"" -wait
    
  4. 再次使用 Resource Hacker 将 *.RES 文件添加到 dll 或 exes

    $RESpath = "...\MySoftware\Mydll.RES"
    Start-Process -FilePath "`"$ResourceHackerPath`""  -ArgumentList "-addoverwrite  `"$Dllpath `",`"$Dllpath `",`"$RESpath`", , ," -wait
    

您的 dll 产品版本应更新为您想要的任何字符串。

额外提示,如果您希望更新大量的dll 和exe 产品版本: 你可以试试这个:

  1. 搜索特定文件夹下的所有dll和exe:

    $directory = "...\Desktop\New Folder"
    $FileNameList = Get-ChildItem -literalpath  $directory -Include *.dll, *.exe  -recurse | foreach-object { "{0}" -f [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileName}
    
  2. 在 for 循环中执行上述所有 4 个步骤:

    for ($i = 0;$i -lt $FileNameList.count;$i++){...}
    

谢谢,祝你有愉快的一天:)