티스토리 뷰
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
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)
'WPF .NET' 카테고리의 다른 글
대용량 데이터처리시 발생되는 UI Freeze 문제 해결 part1 (0) | 2022.04.11 |
---|---|
Async/Await를 사용해서 UI Freeze 해결하기 (0) | 2022.04.04 |
[기초] ComboBox, ListBox 중요 프로퍼티 사용법 part3 (0) | 2022.03.21 |
[기초] ComboBox, ListBox 중요 프로퍼티 사용법 part2 (0) | 2022.03.15 |
[기초] ComboBox, ListBox 중요 프로퍼티 사용법 part1 (2) | 2022.03.14 |
- Total
- Today
- Yesterday
- uno platform
- uno-platform
- #Windows Template Studio
- Microsoft
- ef core
- ComboBox
- Always Encrypted
- LINQ
- C#
- .net
- Bot Framework
- kiosk
- Cross-platform
- #uwp
- IOT
- PRISM
- #MVVM
- Behavior
- XAML
- Build 2016
- UWP
- MVVM
- WPF
- .net 5.0
- dotNETconf
- windows 11
- Windows 10
- Visual Studio 2022
- #prism
- visual studio 2019
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |