Ran*_*age 34 c# build-automation clickonce version
在我的C#ClickOnce应用程序中,项目 - > 属性 - > 发布选项卡中有一个自动递增的发布版本.我想在我的菜单帮助 - > 关于框中显示该版本,但我正在使用的代码显然访问了程序集版本,这是不同的.
可以在项目 - > 属性 - > 应用程序 - >装配信息对话框中手动更改装配版本.所以现在,每次我发布之前我都会将发布版本复制到汇编版本,所以我的对话框显示了当前版本的应用程序.必须有更好的方法来做到这一点.
我真正想做的就是拥有一个准确的,自动更新的,代码可访问的版本号.
这是我用来访问程序集版本号的代码:
public string AssemblyVersion
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是找到访问发布版本的代码.
Ric*_*lap 22
根据我的经验,sylvanaar的最后一行看起来像是要走的路; 但需要注意的是,它仅适用于已部署的应用程序版本.出于调试目的,您可能需要以下内容:
static internal string GetVersion()
{
if (ApplicationDeployment.IsNetworkDeployed)
{
return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
}
return "Debug";
}
Run Code Online (Sandbox Code Playgroud)
syl*_*aar 10
我修改了我的.csproj文件来更新程序集版本.我为此创建了一个名为"Public Release"的配置,但不需要这样做.
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'">
<MSBuildCommunityTasksPath>$(SolutionDir)Tools\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
</PropertyGroup>
<!-- Required Import to use MSBuild Community Tasks -->
<Import Project="$(SolutionDir)Tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="'$(BuildingInsideVisualStudio)' == 'true'" />
<Target Name="BeforeCompile" Condition="'$(BuildingInsideVisualStudio)|$(Configuration)' == 'true|PublicRelease'">
<FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
<Output TaskParameter="OutputVersion" PropertyName="AssemblyVersionToUse" />
</FormatVersion>
<AssemblyInfo CodeLanguage="CS" OutputFile="$(ProjectDir)Properties\VersionInfo.cs" AssemblyVersion="$(AssemblyVersionToUse)" AssemblyFileVersion="$(AssemblyVersionToUse)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
发布的版本可能是:
ApplicationDeployment.CurrentDeployment.CurrentVersion
Run Code Online (Sandbox Code Playgroud)
我想扩展 Sylvanaar 的回答,因为一些实现细节对我来说并不明显。所以:
手动安装在以下位置找到的社区构建任务:https : //github.com/loresoft/msbuildtasks/releases注意:如果您清理了包,请不要通过 nuget 安装,因为在有机会恢复包之前构建将失败,因为msbuildtasks 被引用为构建文件中的任务。我将这些放在名为 .build 的解决方案文件旁边的文件夹中
将一个完全空的文件添加到名为 VersionInfo.cs 的项目属性文件夹中
3 如果这些行存在于 AssemblyInfo.cs 中,则删除它们
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
Run Code Online (Sandbox Code Playgroud)
4 修改你的 csproj 文件
<!-- Include the build rules for a C# project. -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!--INSERT STARTS HERE-->
<!--note the use of .build directory-->
<PropertyGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'">
<MSBuildCommunityTasksPath>$(SolutionDir)\.build\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
</PropertyGroup>
<!-- Required Import to use MSBuild Community Tasks -->
<Import Project="$(SolutionDir)\.build\MSBuild.Community.Tasks.targets" Condition="'$(BuildingInsideVisualStudio)' == 'true'" />
<Target Name="BeforeCompile" Condition="'$(BuildingInsideVisualStudio)|$(Configuration)' == 'true|Release'">
<FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
<Output TaskParameter="OutputVersion" PropertyName="AssemblyVersionToUse" />
</FormatVersion>
<AssemblyInfo CodeLanguage="CS" OutputFile="$(ProjectDir)Properties\VersionInfo.cs" AssemblyVersion="$(AssemblyVersionToUse)" AssemblyFileVersion="$(AssemblyVersionToUse)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
5 使用如下方法访问版本文本:
public string Version()
{
Version version = null;
if (ApplicationDeployment.IsNetworkDeployed)
{
version = ApplicationDeployment.CurrentDeployment.CurrentVersion;
}
else
{
version = typeof(ThisAddIn).Assembly.GetName().Version;
}
return version.ToString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17764 次 |
| 最近记录: |