티스토리 뷰

반응형

WPF .Net 5 프로젝트를 생성한 후 ClickOnce로 배포 패키지를 만들면, ClickOnce 버전은 생성되지만, 그 버전 넘버를 애플리케이션에서 불러와서 사용하는 방법은 현재 존재 하지 않습니다. 이 기능은 .Net 6에서 구현될 것이라고 생각했는데, .Net 7 preview에서도 현재까지는 구현되어있지 않는것 같습니다.

 

이 부분에 대한 자세한 사항은 여기를 참고하시기 바랍니다.

그래서, 검색해보니 비슷한 기능을 할 수 있는 2가지 방법이 있는데, 우선 WpfSettings라는 오픈소스를 이용하는 방법으로 시도를 해보지 않아, 링크만 남겨 놓도록 하겠습니다. 두번째 방법은 빌드 일시를 애플리케이션에 강제로 입력해서 빌드하는 방법으로, 사용하기가 좋아서 이 방법을 이용하시면 쉽게 구현이 가능하실 것 같습니다.

 

1. WpfSettings

For those people who want to use ClickOnce on .NET 5 and want silently update, I wrote a small wrapper that implements some of the ApplicationDeployment properties:
CurrentVersion
ServerVersion
UpdateAvailable
Update
IsNetworkDeployment
DataDir
Hope this helps someone: https://github.com/derskythe/WpfSettings

2. 빌드 일시를 등록해서 사용하는 방법

c# - Displaying the build date - Stack Overflow

 

Displaying the build date

I currently have an app displaying the build number in its title window. That's well and good except it means nothing to most of the users, who want to know if they have the latest build - they te...

stackoverflow.com

Visual Studo 2019와 Visual Studio 2022가 약간 차이가 있습니다. 사용시 주의가 필요합니다.

우선 아래 내용을 프로젝트 파일에 등록해야합니다.

CreateBuildDate.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows</TargetFramework>
    <Nullable>disable</Nullable>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

  <Target Name="Date" BeforeTargets="BeforeBuild">
    <WriteLinesToFile File="$(IntermediateOutputPath)gen.cs"
      Lines="static partial class Builtin { public static long CompileTime = $([System.DateTime]::UtcNow.Ticks) %3B }" Overwrite="true" />
	  <!--Visual Studio 2019-->
      <!--<ItemGroup>
        <Compile Include="$(IntermediateOutputPath)gen.cs" />
	  </ItemGroup>-->
  </Target>
  <!--Visual Studio 2022-->
  <ItemGroup>
    <Compile Include="$(IntermediateOutputPath)gen.cs" />
  </ItemGroup>
</Project>

빌드를 하기전에 gen.cs라는 파일을 만들고, 파일 내용에 현재 일시를 Tick으로 남겨 놓습니다.

gen.cs 파일을 포함해서 빌드를 진행합니다.

폴더로 이동하면, (\WpfTest\CreateBuildDate\obj\Debug\net5.0-windows) gen.cs 파일이 생성된 것을 확인할 수 있으며 내용은 아래와 같습니다.

static partial class Builtin { public static long CompileTime = 637836843977731032 ; }

생성된 클래스 사용

using System;
using System.Windows;

namespace CreateBuildDate
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var buildDate = $"ver. {new DateTime(Builtin.CompileTime, DateTimeKind.Utc).ToString("yyyy-MM-dd-HHmm")}";
            BuildDate.Text = buildDate;
        }
    }
}

Visual Studio 2019에서 Builtin 클래스를 찾지 못해 에러가 발생한다면 아래 클래스를 추가해 줍니다.

사용하실 때 주석은 풀어주시기 바랍니다.

namespace CreateBuildDate
{
    ///// <summary>
    ///// 프로그램에서 사용하기 위해 partial class를 미리 만들어 놓음 
    ///// Visual Studio 2019에서 Builtin을 찾지 못해 에러가 발생하면 추가해서 사용
    ///// </summary>
    //public static partial class Builtin
    //{
    //    public static long CompileTime { get; }
    //}
}

실행 결과

소스

WpfTest/CreateBuildDate at master · kaki104/WpfTest (github.com)

 

GitHub - kaki104/WpfTest

Contribute to kaki104/WpfTest development by creating an account on GitHub.

github.com

 

반응형
댓글