首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在csproj文件中引用AssemblyFileVersion

在csproj文件中引用AssemblyFileVersion
EN

Stack Overflow用户
提问于 2013-05-29 20:59:52
回答 2查看 3K关注 0票数 2

一旦我的nant构建完成,我想使用一个后期构建命令重命名生成的.exe文件,该命令被附加到项目.csproj文件的末尾(在项目元素中):

代码语言:javascript
复制
<Target Name="AfterBuild">
  <Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-$(AssemblyFileVersion).exe" SkipUnchangedFiles="true" />
</Target>

正如您在上面看到的,我试图将可执行文件重命名为: MyApplication-$(AssemblyFileVersion).exe,但是,这显然是错误的,因为生成的可执行文件仅命名为: MyApplication-.exe (因此,我试图在文件名末尾添加的版本将丢失)。

我已经在AssemblyInfo.cs文件中定义了如下AssemblyFileInfoVersion:

代码语言:javascript
复制
[assembly: AssemblyFileVersion("1.5.1")]

所以问题是:我如何访问同一项目的csproj文件中的AssemblyFileVersion?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-29 21:22:37

GetAssemblyIdentity可以获取有关编译后的程序集的信息。任务输出包含有关版本、PublicKeyToken和区域性的元数据条目。

我使用$(TargetDir)\$(TargetName).exe作为程序集文件。

代码语言:javascript
复制
<ItemGroup>
    <AssembliesPath Include="$(TargetDir)\$(TargetName).exe" />
</ItemGroup>

<Target Name="GetAssemblyInfo">
    <GetAssemblyIdentity AssemblyFiles="@(AssembliesPath)">
        <Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
    </GetAssemblyIdentity>
</Target>

然后:

代码语言:javascript
复制
<Target Name="AfterBuild">
    <GetAssemblyInfo />
    <Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-%(AssemblyInfo.Version).exe" SkipUnchangedFiles="true" />
</Target>
票数 3
EN

Stack Overflow用户

发布于 2013-06-07 18:12:05

以下代码来自ISun的原始答案,这实际上是我最终如何完成它的原因,因为我在定义自定义任务时遇到了问题(ms构建引用不断被自动踢出,构建不断失败)。

正如你可以从ISun的答案下面的评论中看到的那样,我总是得到0.0.0.0版本-尽管通过在文本编辑器中手动打开AssemblyInfo.cs将AssemblyFileVersion和AssemblyVersion的版本更改为1.0.0.0。我后来阅读了如何在我的Visual Studio中编辑AssemblyInfo.cs,下面是如何编辑:

  • 右键单击您的项目(生成exe文件)
  • 单击将打开的窗口上的应用程序选项卡(左侧的第一个选项卡)您将看到用于设置程序集名称、默认命名空间等的字段。但是,要编辑
  • ,只需单击右侧名为程序集信息的按钮<代码>E213<代码>H214<代码>F215

出于某种原因-我不知道为什么在我通过上面的方法(使用Visual Studio)输入了所有信息后,它突然起作用了!当我第一次使用上面的方法打开AssemblyInfo.cs时,我的所有字段实际上都是空的,尽管它们是在实际的文件中填充的。

现在,我终于让AssemblyInfo.cs正常工作了,我使用ISun的原始代码来实现我的目标。通过在我的项目的.csproj文件的结束标记之前添加以下代码片段:

代码语言:javascript
复制
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

<Target Name="AfterBuild">
    <GetAssemblyIdentity AssemblyFiles="$(TargetDir)\$(TargetName).exe">
        <Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
    </GetAssemblyIdentity>
    <Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-%(AssemblyInfo.Version).exe" SkipUnchangedFiles="true" />
</Target>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16814600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档