배포판 보호 수준 강화 및 single-file 호환 보정
Some checks failed
Release Gate / gate (push) Has been cancelled

배포 스크립트와 앱 Release 설정에 single-file, ReadyToRun, 압축 번들, 최적화 옵션을 추가해 릴리즈 배포 출력의 보호 수준을 한 단계 높였습니다.

WebSearchHandler와 SettingsWindow는 single-file 환경에서 Assembly.Location 경고가 발생하지 않도록 AppContext.BaseDirectory 및 AssemblyInformationalVersionAttribute 기반으로 수정했습니다.

README와 DEVELOPMENT 문서를 갱신했고, dotnet build 검증에서 경고 0 오류 0을 다시 확인했습니다.
This commit is contained in:
2026-04-06 16:09:00 +09:00
parent 8da0a069b7
commit 1ad75b5896
6 changed files with 195 additions and 67 deletions

View File

@@ -40,10 +40,16 @@
<!-- Release 빌드 시 추가 난독화 설정 -->
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<Optimize>true</Optimize>
<!-- 사용하지 않는 멤버 제거 (IL trimming) -->
<PublishTrimmed>false</PublishTrimmed>
<!-- PDB 제거 -->
<CopyOutputSymbolsToPublishDirectory>false</CopyOutputSymbolsToPublishDirectory>
<!-- 배포판 보호 수준 강화 -->
<PublishSingleFile>true</PublishSingleFile>
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
<!-- UseWindowsForms의 암묵적 using(System.Windows.Forms)이 WPF의

View File

@@ -20,7 +20,7 @@ public class WebSearchHandler : IActionHandler
/// <summary>내장 검색 엔진 아이콘 폴더 (Assets\SearchEngines)</summary>
private static readonly string _iconDir = Path.Combine(
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) ?? ".",
AppContext.BaseDirectory,
"Assets", "SearchEngines");
public WebSearchHandler(SettingsService settings) => _settings = settings;

View File

@@ -1446,9 +1446,11 @@ public partial class SettingsWindow : Window
try
{
var asm = System.Reflection.Assembly.GetExecutingAssembly();
// FileVersionInfo 에서 읽어야 csproj <Version> 이 반영됩니다.
var fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(asm.Location);
var ver = fvi.ProductVersion ?? fvi.FileVersion ?? "?";
var infoAttr = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyInformationalVersionAttribute), false)
.OfType<System.Reflection.AssemblyInformationalVersionAttribute>()
.FirstOrDefault();
var info = infoAttr?.InformationalVersion;
var ver = info ?? asm.GetName().Version?.ToString() ?? "?";
// 빌드 메타데이터 제거 (예: "1.0.3+gitabcdef" → "1.0.3")
var plusIdx = ver.IndexOf('+');
if (plusIdx > 0) ver = ver[..plusIdx];