【发布时间】:2010-11-18 03:06:58
【问题描述】:
如何读取 AssemblyFileVersion 或其组件 AssemblyFileMajorVersion、AssemblyFileMinorVersion、AssemblyFileBuildNumber、 .csproj 中的 AssemblyFileRevision,在编译之后?
我尝试了以下从构建的程序集中提取信息的方法:
<Target Name="AfterCompile">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output
TaskParameter="Assemblies"
ItemName="MyAssemblyIdentities"/>
</GetAssemblyIdentity>
<Message Text="AssemblyVersion = %(MyAssemblyIdentities.Version)" />
</Target>
但这会检索 AssemblyVersion 而不是 AssemblyFileVersion。后者似乎没有记录在案的元数据条目。我也试过了:
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks" />
<Target Name="AfterCompile">
<MSBuild.ExtensionPack.Framework.Assembly TaskAction="GetInfo" NetAssembly="$(TargetPath)">
<Output TaskParameter="OutputItems" ItemName="Info" />
</MSBuild.ExtensionPack.Framework.Assembly>
<Message Text="AssemblyFileVersion = %(Info.FileVersion)" />
</Target>
不幸的是,虽然这会检索到正确的值,但它也会文件锁定程序集,直到 VS2008 关闭。
坦率地说,这也不是我想要的,因为我宁愿直接从 AssemblyInfo.cs 中读取信息。但是,我无法弄清楚如何做到这一点。我认为 MSBuild Extensions 中的 AssemblyInfo 是一种方式,但它似乎专注于写入 AssemblyInfo 而不是从中检索值。
我怎样才能最好地做到这一点?
【问题讨论】:
-
+1 仅用于询问“我如何阅读它”而不是您总是找到的:如何更新版本信息。
-
自从我问这个问题已经两个月了,唯一可用的答案是我自己的,我将继续接受它。我仍然认为可能有更好的方法。
-
@Yoopergeek:确实,有几种写作方法,但即使经过大量研究,阅读也难以捉摸。但是,我在下面的回答确实很好。
标签: .net msbuild assemblies versioning