一旦我的nant构建完成,我想使用一个后期构建命令重命名生成的.exe文件,该命令被附加到项目.csproj文件的末尾(在项目元素中):
<Target Name="AfterBuild">
<Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(TargetDir)\MyApplication-$(AssemblyFileVersion).exe" SkipUnchangedFiles="true" />
</Target>正如您在上面看到的,我试图将可执行文件重命名为: MyApplication-$(AssemblyFileVersion).exe,但是,这显然是错误的,因为生成的可执行文件仅命名为: MyApplication-.exe (因此,我试图在文件名末尾添加的版本将丢失)。
我已经在AssemblyInfo.cs文件中定义了如下AssemblyFileInfoVersion:
[assembly: AssemblyFileVersion("1.5.1")]所以问题是:我如何访问同一项目的csproj文件中的AssemblyFileVersion?
发布于 2013-05-29 21:22:37
GetAssemblyIdentity可以获取有关编译后的程序集的信息。任务输出包含有关版本、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>发布于 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,下面是如何编辑:
出于某种原因-我不知道为什么在我通过上面的方法(使用Visual Studio)输入了所有信息后,它突然起作用了!当我第一次使用上面的方法打开AssemblyInfo.cs时,我的所有字段实际上都是空的,尽管它们是在实际的文件中填充的。
现在,我终于让AssemblyInfo.cs正常工作了,我使用ISun的原始代码来实现我的目标。通过在我的项目的.csproj文件的结束标记之前添加以下代码片段:
<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>https://stackoverflow.com/questions/16814600
复制相似问题