Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在csproj文件中引用AssemblyFileVersion_C#_.net_Visual Studio 2010 - Fatal编程技术网

C# 在csproj文件中引用AssemblyFileVersion

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

完成nant生成后,我希望使用附加到projects.csproj文件末尾(在Project元素中)的生成后命令重命名生成的.exe文件:

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

可以获得有关已编译程序集的信息。任务输出包含有关版本、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>

可以获取有关符合要求的程序集的信息。任务输出包含有关版本、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的按钮
出于某种原因,在我通过上述方法(使用VisualStudio)输入了所有信息之后,我不知道为什么它会突然起作用!当我第一次使用上述方法打开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>

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

从ISun回答下的注释中可以看出,尽管通过在文本编辑器中手动打开AssemblyInfo.cs将AssemblyFileVersion和AssemblyVersion的版本更改为1.0.0.0,但我始终获得了版本0.0.0。稍后,我阅读了如何从我的Visual Studio编辑AssemblyInfo.cs,以下是如何:

  • 右键单击项目(生成exe文件)
  • 单击属性
  • 打开将要打开的窗口上的应用程序选项卡(左侧第一个选项卡)
  • 您将看到用于设置程序集名称、默认命名空间等的字段,以编辑 AssemblyInfo.cs,只需单击右侧名为Assembly Information的按钮
出于某种原因,在我通过上述方法(使用VisualStudio)输入了所有信息之后,我不知道为什么它会突然起作用!当我第一次使用上述方法打开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>


嘿,谢谢你的回答:)!但是,生成的数字是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