C# 在csproj文件中引用AssemblyFileVersion
完成nant生成后,我希望使用附加到projects.csproj文件末尾(在Project元素中)的生成后命令重命名生成的.exe文件: 所以问题是:如何访问同一项目的csproj文件中的AssemblyFileVersion?可以获得有关已编译程序集的信息。任务输出包含有关版本、PublicKeyToken和区域性的元数据项 我使用C# 在csproj文件中引用AssemblyFileVersion,c#,.net,visual-studio-2010,C#,.net,Visual Studio 2010,完成nant生成后,我希望使用附加到projects.csproj文件末尾(在Project元素中)的生成后命令重命名生成的.exe文件: 所以问题是:如何访问同一项目的csproj文件中的AssemblyFileVersion?可以获得有关已编译程序集的信息。任务输出包含有关版本、PublicKeyToken和区域性的元数据项 我使用$(TargetDir)\$(TargetName.exe作为程序集文件 <ItemGroup> <AssembliesPath Inc
$(TargetDir)\$(TargetName.exe
作为程序集文件
<ItemGroup>
<AssembliesPath Include="$(TargetDir)\$(TargetName).exe" />
</ItemGroup>
<Target Name="GetAssemblyInfo">
<GetAssemblyIdentity AssemblyFiles="@(AssembliesPath)">
<Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
</GetAssemblyIdentity>
</Target>
然后:
<Target Name="AfterBuild">
<GetAssemblyInfo />
<Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-%(AssemblyInfo.Version).exe" SkipUnchangedFiles="true" />
</Target>
可以获取有关符合要求的程序集的信息。任务输出包含有关版本、PublicKeyToken和区域性的元数据项
我使用$(TargetDir)\$(TargetName.exe
作为程序集文件
<ItemGroup>
<AssembliesPath Include="$(TargetDir)\$(TargetName).exe" />
</ItemGroup>
<Target Name="GetAssemblyInfo">
<GetAssemblyIdentity AssemblyFiles="@(AssembliesPath)">
<Output TaskParameter="Assemblies" ItemName="AssemblyInfo"/>
</GetAssemblyIdentity>
</Target>
然后:
<Target Name="AfterBuild">
<GetAssemblyInfo />
<Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-%(AssemblyInfo.Version).exe" SkipUnchangedFiles="true" />
</Target>
以下代码来自ISun的原始答案,这实际上就是我最终如何完成它的,因为我在定义自定义任务时遇到了问题(ms构建引用不断被自动踢出,构建不断失败) 从ISun回答下的注释中可以看出,尽管通过在文本编辑器中手动打开AssemblyInfo.cs将AssemblyFileVersion和AssemblyVersion的版本更改为1.0.0.0,但我始终获得了版本0.0.0。稍后,我阅读了如何从我的Visual Studio编辑AssemblyInfo.cs,以下是如何:
- 右键单击项目(生成exe文件)
- 单击属性
- 打开将要打开的窗口上的应用程序选项卡(左侧第一个选项卡)
- 您将看到用于设置程序集名称、默认命名空间等的字段,以编辑 AssemblyInfo.cs,只需单击右侧名为Assembly Information的按钮
<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>
以下代码来自ISun的原始答案,这实际上就是我最终如何完成它的,因为我在定义自定义任务时遇到了问题(ms构建引用不断被自动踢出,构建不断失败) 从ISun回答下的注释中可以看出,尽管通过在文本编辑器中手动打开AssemblyInfo.cs将AssemblyFileVersion和AssemblyVersion的版本更改为1.0.0.0,但我始终获得了版本0.0.0。稍后,我阅读了如何从我的Visual Studio编辑AssemblyInfo.cs,以下是如何:
- 右键单击项目(生成exe文件)
- 单击属性
- 打开将要打开的窗口上的应用程序选项卡(左侧第一个选项卡)
- 您将看到用于设置程序集名称、默认命名空间等的字段,以编辑 AssemblyInfo.cs,只需单击右侧名为Assembly Information的按钮
<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>
嘿,谢谢你的回答:)!但是,生成的数字是0.0.0.0,而不是1.5.1(请参见上文,了解我问题的更新)-因此,它似乎不是在访问AssemblyFileVersion,而是在访问其他内容。有什么想法吗?@Zainodis,如果你设置[assembly:AssemblyVersion(“1.5.1”)]
你会得到你想要的GetAssemblyIdentity
只读取AssemblyVersion
,而不是AssemblyFileVersion
@LexLi实际上我怀疑这一点,并在发表我的评论之前尝试了它,但即使我更改了该值,它仍然会吐出数字0.0.0 oO-我可能遗漏了什么吗?我稍微更改了我的帖子,所以你可以试着用这种方法。另外,请确保描述该版本的程序集实际上是$(TargetDir)\$(TargetName).exe
。很抱歉回答了这么长时间,非常感谢您更新您的问题。我遵循了您更新的步骤,但奇怪的是,我没有找到GetAssemblyInfo任务。我对这一点还不熟悉,但我从构建输出中收集到的信息是,我还必须实现相应的任务类吗?错误消息还指出,另一个条件是任务要在项目文件中被删除。我将尝试这两种方法,看看是否能解决问题:)嘿,谢谢你的回答:)!但是,生成的数字是0.0.0.0,而不是1.5.1(请参见上文,了解我问题的更新)-因此,它似乎不是在访问AssemblyFileVersion,而是在访问其他内容。有什么想法吗?@Zainodis,如果你设置[assembly:AssemblyVersion(“1.5.1”)]
你会得到你想要的GetAssemblyIdentity
只读取AssemblyVersion
,而不是AssemblyFileVersion
@LexLi事实上我怀疑这一点,并在发布我的评论之前尝试了它,但即使我更改了该值,它仍然会吐出数字0.0.0 oO-我可能遗漏了什么吗?我更改了我的帖子a