获取 WPF 的程序集版本

Posted

技术标签:

【中文标题】获取 WPF 的程序集版本【英文标题】:Getting assembly version of WPF 【发布时间】:2020-05-09 10:02:14 【问题描述】:

我有一个程序,我刚刚用 wix 构建了一个安装程序,我现在试图获取我的程序的程序集版本,我在教程中查看了 GetAssemblyIdentity,但我看不到我应该如何为我的app quz 它不是控制台应用程序!我正在查看的教程是https://www.youtube.com/watch?v=6Yf-eDsRrnM,在时间戳 1 小时 28 分钟时,他开始查看程序集版本以及如何为您的安装程序获取它们,但我真的不明白如何使用 wpf 应用程序执行此操作。我到目前为止所尝试的是

<Target Name="BeforeBuild">
<GetAssemblyIdentity AssemblyFiles="..\WPFAPP\bin\$(C)">


</GetAssemblyIdentity>

</Target>
<Target Name="AfterBuild">

WPFAPP 是我的应用的占位符。

【问题讨论】:

【参考方案1】:

第一个解决方案:

您可以使用 $(MSBuildProjectName) 所以,指定

<TargetName>$(ProjectName)</TargetName>

在你的 *.csproj 中

然后您可以使用 $(MSBuildProjectName) 作为程序集名称。 要访问此变量,您应该在 wixproj 中编写

<Target Name="BeforeBuild">
  <PropertyGroup>
    <DefineConstants>ProjectName=%(MSBuildProjectName)</DefineConstants>
  </PropertyGroup>
</Target>

你可以在这里看到的可用变量列表

https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-reserved-and-well-known-properties?view=vs-2019

第二种解决方案:

所以,如果你想使用版本。请参阅此处的示例。

<Target Name="BeforeBuild">
  <GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe">
    <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
  </GetAssemblyIdentity>
  <PropertyGroup>
    <DefineConstants>BuildVersion=%(AssemblyVersion.Version)</DefineConstants>
  </PropertyGroup>
</Target>

你应该指定Assembly文件(dll和exe文件都是.Net的文件,.exe文件也可以在这里指定)。

然后你可以像这里一样使用 BuildVersionVariable:

<Product Id="*" 
         Name="WixProject1" 
         Language="1033" 
         Version="$(var.BuildVersion)" 
         Manufacturer="WixProject1" 
         UpgradeCode="c93e09b9-9e8f-444c-a35b-84beb2c3788f">
...
</Product>

附言您可以结合这些方法并从一条路径获取一些信息并从另一条路径获取一些信息。在项目文件中定义常量然后从 WIX 获取访问的主要 IDEA

【讨论】:

在.wixproj的什么文件中 我改答案 我的 csproj 中的哪个位置重要吗? 应该在 *.wixproj 如果你已经有 然后将它添加到那里。

以上是关于获取 WPF 的程序集版本的主要内容,如果未能解决你的问题,请参考以下文章

如何获取另一个 EXE 的程序集版本(不是文件版本)?

从另一个程序集运行 WPF 应用程序

混合模式程序集是针对运行时的“v2.0.50727”版本构建的

获取另一个项目的程序集版本 (.exe)

使用 ildasm 检测 WPF 程序集之间的标记差异

WPF - PathListBoxUtils 和程序集或替代方案