You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
7.6 KiB
144 lines
7.6 KiB
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<OutputType>WinExe</OutputType>
|
|
<TargetFramework>net9.0-windows</TargetFramework>
|
|
<Nullable>disable</Nullable>
|
|
<UseWPF>true</UseWPF>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
|
<Deterministic>true</Deterministic>
|
|
<PlatformTarget>x86</PlatformTarget>
|
|
<Platforms>AnyCPU;x86</Platforms>
|
|
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
|
|
|
<!-- 단일 파일 배포 및 정제 설정 -->
|
|
<PublishSingleFile>true</PublishSingleFile>
|
|
<!-- SelfContained=true: 대상 PC의 .NET 런타임 설치 여부와 무관하게 실행 가능 -->
|
|
<SelfContained>true</SelfContained>
|
|
<!-- 네이티브 DLL들도 단일 EXE 안에 내장하여 추출 방식으로 처리 -->
|
|
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
|
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="Microsoft.VisualStudio.Setup.Configuration.Interop" Version="3.14.2075">
|
|
<EmbedInteropTypes>true</EmbedInteropTypes>
|
|
</PackageReference>
|
|
<PackageReference Include="System.IO.Ports" Version="9.0.0" />
|
|
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.2" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<None Update="Database.ini">
|
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="Sensor.ini">
|
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="PCI-Dask.dll">
|
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="LoginOptions.json">
|
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
</None>
|
|
</ItemGroup>
|
|
|
|
<!-- 빌드 후 Native DLL을 libs 하위 폴더로 복사 (XCopy 플랫폼 의존성 배제) -->
|
|
<Target Name="CopyDllToLibs" AfterTargets="Build">
|
|
<ItemGroup>
|
|
<NativeDlls Include="$(TargetDir)PCI-Dask.dll" />
|
|
</ItemGroup>
|
|
<MakeDir Directories="$(TargetDir)libs" Condition="!Exists('$(TargetDir)libs')" />
|
|
<Copy SourceFiles="@(NativeDlls)" DestinationFolder="$(TargetDir)libs\" SkipUnchangedFiles="true" />
|
|
</Target>
|
|
|
|
<!-- Publish 단계 완료 후 Native DLL을 libs 하위 폴더로 복사 -->
|
|
<Target Name="CopyDllToPublish" AfterTargets="Publish">
|
|
<ItemGroup>
|
|
<PublishNativeDlls Include="$(MSBuildProjectDirectory)\PCI-Dask.dll" />
|
|
</ItemGroup>
|
|
<MakeDir Directories="$(PublishDir)libs" Condition="!Exists('$(PublishDir)libs')" />
|
|
<Copy SourceFiles="@(PublishNativeDlls)" DestinationFolder="$(PublishDir)libs\" SkipUnchangedFiles="true" />
|
|
</Target>
|
|
|
|
<!-- C:\LeakTest\ 설치 전용 Target (Publish에 의존하며, PublishDir로부터 복사 실행) -->
|
|
<Target Name="FolderPublish" DependsOnTargets="Publish" AfterTargets="Publish">
|
|
<PropertyGroup>
|
|
<DeployTargetFolder>C:\LeakTest\</DeployTargetFolder>
|
|
<PublishBackupDir>$(MSBuildProjectDirectory)\bin\Release\net9.0-windows\win-x86\publish_backup\</PublishBackupDir>
|
|
</PropertyGroup>
|
|
<Message Text="Deploying clean publish output to $(DeployTargetFolder)..." Importance="high" />
|
|
<!-- 기존 대상 디렉토리 클린업 및 재생성 (지저분한 기존 dll 파일들 소거) -->
|
|
<RemoveDir Directories="$(DeployTargetFolder)" />
|
|
<MakeDir Directories="$(DeployTargetFolder)" />
|
|
<MakeDir Directories="$(DeployTargetFolder)Logs" />
|
|
|
|
<!-- 실행 파일, 런타임 구성 파일 복사 -->
|
|
<Copy SourceFiles="$(PublishDir)leak_test_project.exe" DestinationFolder="$(DeployTargetFolder)" />
|
|
<Copy SourceFiles="$(TargetDir)leak_test_project.dll.config" DestinationFolder="$(DeployTargetFolder)" />
|
|
|
|
<!-- 설정 파일 복사 (프로젝트 소스에서 직접 이관) -->
|
|
<Copy SourceFiles="$(MSBuildProjectDirectory)\Database.ini" DestinationFolder="$(DeployTargetFolder)" />
|
|
<Copy SourceFiles="$(MSBuildProjectDirectory)\LoginOptions.json" DestinationFolder="$(DeployTargetFolder)" />
|
|
<Copy SourceFiles="$(MSBuildProjectDirectory)\Sensor.ini" DestinationFolder="$(DeployTargetFolder)" Condition="Exists('$(MSBuildProjectDirectory)\Sensor.ini')" />
|
|
|
|
<!-- Native DLLs 복사: [DllImport("PCI-Dask.dll")] 검색 경로는 EXE 실행 폴더(루트)이므로 루트에 배치 -->
|
|
<Copy SourceFiles="$(MSBuildProjectDirectory)\PCI-Dask.dll" DestinationFolder="$(DeployTargetFolder)" />
|
|
<Copy SourceFiles="$(TargetDir)Microsoft.Data.SqlClient.SNI.dll" DestinationFolder="$(DeployTargetFolder)" />
|
|
|
|
<!-- [WiX Toolset 단일 MSI 설치 파일 자동 빌드 스텝] -->
|
|
<Message Text="Compiling single installer MSI via WiX Toolset..." Importance="high" />
|
|
<Exec Command="wix build "$(MSBuildProjectDirectory)\..\leak_test_project.Setup\Product.wxs" -o "$(DeployTargetFolder)LeakTestSetup.msi"" WorkingDirectory="$(MSBuildProjectDirectory)" />
|
|
|
|
<!-- [WiX Toolset 단일 EXE 설치 파일 자동 빌드 스텝] -->
|
|
<Message Text="Compiling single installer EXE via WiX Toolset Bundle..." Importance="high" />
|
|
<Exec Command="wix build "$(MSBuildProjectDirectory)\..\leak_test_project.Setup\Bundle.wxs" -o "$(DeployTargetFolder)LeakTestSetup.exe" -ext WixToolset.BootstrapperApplications.wixext/5.0.2" WorkingDirectory="$(MSBuildProjectDirectory)" />
|
|
|
|
<!-- 빌드 중간 산출물 .wixpdb 및 MSI 파일 정리 (C:\LeakTest 폴더 깔끔화) -->
|
|
<Delete Files="$(DeployTargetFolder)LeakTestSetup.wixpdb" />
|
|
<Delete Files="$(DeployTargetFolder)LeakTestSetup.msi" />
|
|
|
|
<!-- 비주얼 스튜디오 게시 출력 폴더(PublishDir) 정화 작업 -->
|
|
<Message Text="Purging publish output directory and leaving only LeakTestSetup.exe..." Importance="high" />
|
|
|
|
<!-- 1. LeakTestSetup.exe 파일을 임시 대피 경로로 복사 -->
|
|
<RemoveDir Directories="$(PublishBackupDir)" />
|
|
<MakeDir Directories="$(PublishBackupDir)" />
|
|
<Copy SourceFiles="$(DeployTargetFolder)LeakTestSetup.exe" DestinationFolder="$(PublishBackupDir)" />
|
|
|
|
<!-- 2. 게시 폴더(PublishDir) 하위의 모든 자원 삭제 (dll, config, json, exe, libs 폴더 등) -->
|
|
<ItemGroup>
|
|
<FilesToClean Include="$(PublishDir)*.dll" />
|
|
<FilesToClean Include="$(PublishDir)*.exe" />
|
|
<FilesToClean Include="$(PublishDir)*.config" />
|
|
<FilesToClean Include="$(PublishDir)*.json" />
|
|
<FilesToClean Include="$(PublishDir)*.pdb" />
|
|
<FilesToClean Include="$(PublishDir)*.ini" />
|
|
</ItemGroup>
|
|
<Delete Files="@(FilesToClean)" />
|
|
<RemoveDir Directories="$(PublishDir)libs" />
|
|
<RemoveDir Directories="$(PublishDir)cs" />
|
|
<RemoveDir Directories="$(PublishDir)de" />
|
|
<RemoveDir Directories="$(PublishDir)es" />
|
|
<RemoveDir Directories="$(PublishDir)fr" />
|
|
<RemoveDir Directories="$(PublishDir)it" />
|
|
<RemoveDir Directories="$(PublishDir)ja" />
|
|
<RemoveDir Directories="$(PublishDir)ko" />
|
|
<RemoveDir Directories="$(PublishDir)pl" />
|
|
<RemoveDir Directories="$(PublishDir)pt-BR" />
|
|
<RemoveDir Directories="$(PublishDir)ru" />
|
|
<RemoveDir Directories="$(PublishDir)tr" />
|
|
<RemoveDir Directories="$(PublishDir)zh-Hans" />
|
|
<RemoveDir Directories="$(PublishDir)zh-Hant" />
|
|
|
|
<!-- 3. 대피시켰던 단일 설치 EXE 파일만 다시 게시 폴더(PublishDir)로 원복 이관 -->
|
|
<Copy SourceFiles="$(PublishBackupDir)LeakTestSetup.exe" DestinationFolder="$(PublishDir)" />
|
|
|
|
<!-- 4. 대피 임시 폴더 삭제 정리 -->
|
|
<RemoveDir Directories="$(PublishBackupDir)" />
|
|
|
|
<Message Text="Single Installer successfully compiled at both C:\LeakTest\LeakTestSetup.exe and $(PublishDir)LeakTestSetup.exe" Importance="high" />
|
|
</Target>
|
|
|
|
</Project>
|
|
|