在VS生成后事件中获取程序集版本

问题描述 投票:0回答:1

我创建了一个简单的C#WPF程序,该程序通过单击按钮来运行不同程序的各种设置,因此在必须配置PC时它可以自动执行某些任务。

与此同时,我正在开发启动器,它将搜索上述程序的更新。

因此,当我以发布模式构建主应用程序时,在构建事件后的out dir上,我使用程序的当前版本创建一个文本文件,但它始终返回1.0.0.0。这是我当前的构建后事件cmd.exe /c echo $(Version) >> "$(OutDir)\version.txt"

我尝试取消注释AssemblyInfo.cs中的[assembly: AssemblyFileVersion("1.0.0.6")]部分,并使用自动版本自动递增,但是什么也没有。经过大量研究,我什么都没找到。

下面AssemblyInfo:

using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;


[assembly: AssemblyTitle("Program name")]
[assembly: AssemblyDescription("Program info")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Company")]
[assembly: AssemblyProduct("Product name")]
[assembly: AssemblyCopyright("Copyright ©  2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: ComVisible(false)]

//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]      
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]           
//[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.208")]
[assembly: AssemblyFileVersion("1.0.0.6")]

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>

可能是我在事件中使用的变量错误,还是需要对代码进行一些更改?

任何想法?

编辑

目标是在运行启动器时将版本导入文本文件,并且如果版本高于安装的版本,请执行更新

c# wpf visual-studio build post-build-event
1个回答
0
投票

我认为不可能以这种方式,但是您可以使用GetAssemblyIdentity msbuild任务来获取程序集版本,然后使用

<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
</GetAssemblyIdentity>
<Message Text="Build version is %(AssemblyVersion.Version)" />

您可以将其放置在单独的目标中,然后在Build目标之后运行。要将版本写入文件,您可以使用WriteLinesToFile任务,诸如此类

<WriteLinesToFile File="$(OutputPath)\version.txt" Overwrite="true" Lines="%(AssemblyVersion.Version)" />
© www.soinside.com 2019 - 2024. All rights reserved.