fix: MySQL 패키지 업데이트 및 코드 최적화

- MySql.Data를 9.4.0으로 업데이트하여 호환성 개선
- 불필요한 MySqlX.XDevAPI.Relational using 구문 제거
- 컴파일러 경고 억제를 위한 NoWarn 설정 추가
- SeleniumHelper.cs 파일 추가
- readonly 키워드 적용으로 코드 품질 향상

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Arin(asus)
2025-08-12 17:21:19 +09:00
parent 5464563aea
commit c3a309092e
8 changed files with 374 additions and 95 deletions

View File

@@ -566,57 +566,7 @@ namespace BokBonCheck
options.AddArgument("--no-sandbox"); options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage"); options.AddArgument("--disable-dev-shm-usage");
options.AddArgument("--remote-debugging-port=0"); options.AddArgument("--remote-debugging-port=0");
options.AddArgument("--disable-extensions");
options.AddArgument("--disable-plugins");
options.AddArgument("--disable-images");
options.AddArgument("--disable-javascript");
options.AddArgument("--disable-java");
options.AddArgument("--disable-flash");
options.AddArgument("--disable-web-security");
options.AddArgument("--allow-running-insecure-content");
// 메모리 및 성능 최적화
options.AddArgument("--memory-pressure-off");
options.AddArgument("--max_old_space_size=4096");
options.AddArgument("--disable-background-timer-throttling");
options.AddArgument("--disable-backgrounding-occluded-windows");
options.AddArgument("--disable-renderer-backgrounding");
options.AddArgument("--disable-features=TranslateUI");
options.AddArgument("--disable-ipc-flooding-protection");
options.AddArgument("--disable-default-apps");
options.AddArgument("--disable-sync");
options.AddArgument("--disable-translate");
options.AddArgument("--disable-logging");
options.AddArgument("--disable-notifications");
options.AddArgument("--disable-popup-blocking");
options.AddArgument("--disable-prompt-on-repost");
options.AddArgument("--disable-hang-monitor");
options.AddArgument("--disable-client-side-phishing-detection");
options.AddArgument("--disable-component-update");
options.AddArgument("--disable-domain-reliability");
// 프로세스 관련 안정성 옵션
options.AddArgument("--single-process");
options.AddArgument("--no-zygote");
options.AddArgument("--disable-background-networking");
// 캐시 및 저장소 비활성화
options.AddArgument("--disable-application-cache");
options.AddArgument("--disable-offline-load-stale-cache");
options.AddArgument("--disk-cache-size=0");
options.AddArgument("--media-cache-size=0");
options.AddArgument("--aggressive-cache-discard");
options.AddArgument("--enable-aggressive-domstorage-flushing");
// 기타 안정성 옵션
options.AddArgument("--enable-low-end-device-mode");
options.AddArgument("--force-fieldtrials=*BackgroundTracing/default/");
// 사용자 데이터 디렉토리 설정 (관리자 권한 없이도 접근 가능)
options.AddArgument($"--user-data-dir={UserDataDir}");
options.AddArgument("--no-first-run");
options.AddArgument("--no-default-browser-check");
return options; return options;
} }

View File

@@ -220,44 +220,6 @@ namespace BokBonCheck
this.No = no; this.No = no;
} }
//public async Task StartDriverAsync(bool showdriver=false)
//{
// if (_driver == null)
// {
// try
// {
// // ChromeDriverManager를 사용하여 안정적으로 드라이버 설정
// var driverPath = await ChromeDriverManager.SetupChromeDriverAsync();
// // ChromeDriver 서비스 생성
// _service = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(driverPath), Path.GetFileName(driverPath));
// _service.HideCommandPromptWindow = true;
// // 안정적인 Chrome 옵션 가져오기 (브라우저 창 숨김)
// var options = ChromeDriverManager.CreateBaseChromeOptions(!showdriver);
// // 추가 보안 및 안정성 옵션
// options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
// options.AddArgument("--disable-blink-features=AutomationControlled");
// options.AddExcludedArgument("enable-automation");
// options.AddAdditionalOption("useAutomationExtension", false);
// // ChromeDriver 생성
// _driver = new ChromeDriver(_service, options);
// // 웹드라이버 감지 방지
// ((IJavaScriptExecutor)_driver).ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
// Console.WriteLine("NamguLibrarySearcher ChromeDriver 초기화 완료");
// }
// catch (Exception ex)
// {
// Console.WriteLine($"ChromeDriver 초기화 실패: {ex.Message}");
// throw new InvalidOperationException($"ChromeDriver 초기화에 실패했습니다: {ex.Message}", ex);
// }
// }
//}
// 기존 StartDriver 메서드를 유지하여 호환성 보장 // 기존 StartDriver 메서드를 유지하여 호환성 보장
public void StartDriver(bool showBrowser) public void StartDriver(bool showBrowser)
{ {

View File

@@ -0,0 +1,330 @@
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Chromium;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Interactions;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WebDriverManager;
using WebDriverManager.DriverConfigs;
using WebDriverManager.DriverConfigs.Impl;
namespace UniMarc.SearchModel
{
public static class SeleniumHelper
{
static ChromiumDriver _driver;
static string pathname_userdata = "WebDriverUserData";
public enum eBrowserType
{
edge,
chrome
}
public static eBrowserType Browser = eBrowserType.edge;
/// <summary>
/// 드라이버파일을 다운로드 하고 완료된 경우 드라이버 실행파일 명을 반환합니다.
/// </summary>
/// <param name="versiontype">MatchingBrowser,Latest</param>
/// <returns></returns>
public static string Download(string versiontype = "MatchingBrowser")
{
var dnpath = new System.IO.DirectoryInfo("WebDriver\\Download");
if (dnpath.Exists == false) dnpath.Create();
var drv = new DriverManager(dnpath.FullName);
IDriverConfig config = null;
if (Browser == eBrowserType.edge) config = new EdgeConfig();
else if (Browser == eBrowserType.chrome) config = new ChromeConfig();
return drv.SetUpDriver(config, versiontype);
}
static string MakeUserDataPath()
{
string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss_fff");
string randomId = Guid.NewGuid().ToString("N").Substring(0, 8);
var userDataDir = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"WebDriver", $"Edge_{timestamp}_{randomId}");
var userpath = new System.IO.DirectoryInfo(userDataDir);
if (userpath.Exists == false) userpath.Create();
return userpath.FullName;
}
public static ChromiumDriver MakeDriver()
{
ChromiumDriver driver = nul;
var options = MakeBaseOption();
if (Browser == eBrowserType.edge)
{
driver = new EdgeDriver((EdgeOptions)options); // Edge 드라이버 초기화
}
else if (Browser == eBrowserType.chrome)
{
driver = new ChromeDriver((ChromeOptions)options); // Edge 드라이버 초기화
}
if( driver != null)
{
// 웹드라이버 감지 방지
((IJavaScriptExecutor)_driver).ExecuteScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
}
return driver;
}
static ChromiumOptions MakeBaseOption()
{
EdgeOptions options = nul;
if (Browser == eBrowserType.edge)
{
options = new EdgeOptions();
//options.AddArgument($"--user-data-dir={userDataDir}");
options.AddArgument("--no-first-run");
options.AddArgument("--no-default-browser-check");
options.AddArgument("--disable-default-apps");
options.AddArgument("--disable-popup-blocking");
options.AddArgument("--disable-translate");
options.AddArgument("--disable-background-timer-throttling");
options.AddArgument("--disable-renderer-backgrounding");
options.AddArgument("--disable-backgrounding-occluded-windows");
options.AddArgument("--disable-client-side-phishing-detection");
options.AddArgument("--disable-sync");
options.AddArgument("--disable-extensions");
options.AddArgument("--disable-component-extensions-with-background-pages");
options.AddArgument("--disable-background-networking");
options.AddArgument("--disable-background-mode");
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage");
options.AddArgument("--disable-blink-features=AutomationControlled");
options.AddArgument("--remote-debugging-port=0"); // 랜덤 포트 사용
}
else if (Browser == eBrowserType.chrome)
{
options = new ChromeOptions();
//options.AddArgument($"--user-data-dir={userDataDir}");
options.AddArgument("--no-first-run");
options.AddArgument("--no-default-browser-check");
options.AddArgument("--disable-default-apps");
options.AddArgument("--disable-popup-blocking");
options.AddArgument("--disable-translate");
options.AddArgument("--disable-background-timer-throttling");
options.AddArgument("--disable-renderer-backgrounding");
options.AddArgument("--disable-backgrounding-occluded-windows");
options.AddArgument("--disable-client-side-phishing-detection");
options.AddArgument("--disable-sync");
options.AddArgument("--disable-extensions");
options.AddArgument("--disable-component-extensions-with-background-pages");
options.AddArgument("--disable-background-networking");
options.AddArgument("--disable-background-mode");
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-dev-shm-usage");
options.AddArgument("--disable-blink-features=AutomationControlled");
options.AddArgument("--remote-debugging-port=0"); // 랜덤 포트 사용
}
options.AddArgument("--window-size=1920,1080");
return options;
}
public static void KillExistingDrivers()
{
string[] processNames = { };
if (Browser == eBrowserType.chrome)
processNames = new string[] { "chromedriver", "chrome" };
else if (Browser == eBrowserType.edge)
processNames = new string[] { "msedgedriver", "msedge", "MicrosoftEdge" };
try
{
foreach (string processName in processNames)
{
Process[] processes = Process.GetProcessesByName(processName);
if (processes.Length > 0)
{
Console.WriteLine($"기존 {processName} 프로세스 {processes.Length}개를 종료하는 중...");
foreach (Process process in processes)
{
try
{
process.Kill();
process.WaitForExit(3000);
}
catch (Exception ex)
{
Console.WriteLine($"{processName} 종료 중 오류: {ex.Message}");
}
}
}
}
// 임시 WebDriver 사용자 데이터 폴더들 정리
CleanupTempUserDataDirectories();
// 프로세스가 완전히 종료될 때까지 대기
Thread.Sleep(2000);
}
catch (Exception ex)
{
Console.WriteLine($"기존 프로세스 종료 중 오류: {ex.Message}");
}
}
static void CleanupTempUserDataDirectories()
{
try
{
var tempPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, pathname_userdata, $"{Browser}");
string[] directories = System.IO.Directory.GetDirectories(tempPath);
if (directories.Length > 0)
{
Console.WriteLine($"기존 임시 사용자 데이터 폴더 {directories.Length}개를 정리하는 중...");
foreach (string dir in directories)
{
try
{
System.IO.Directory.Delete(dir, true);
}
catch (Exception ex)
{
Console.WriteLine($"폴더 삭제 중 오류: {ex.Message}");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"임시 폴더 정리 중 오류: {ex.Message}");
}
}
/// <summary>
/// 현재 설치된 브라우저 버전을 확인합니다.
/// </summary>
/// <returns>브라우저 버전 문자열</returns>
public static string GetBrowserVersion()
{
try
{
if (Browser == eBrowserType.chrome)
{
return GetChromeVersion();
}
else if (Browser == eBrowserType.edge)
{
return GetEdgeVersion();
}
return "Unknown Browser";
}
catch (Exception ex)
{
return $"Version check failed: {ex.Message}";
}
}
/// <summary>
/// Chrome 브라우저 버전을 확인합니다.
/// </summary>
/// <returns>Chrome 버전</returns>
static string GetChromeVersion()
{
try
{
// 레지스트리에서 Chrome 버전 확인
using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Google\Chrome\BLBeacon"))
{
if (key != null)
{
var version = key.GetValue("version")?.ToString();
if (!string.IsNullOrEmpty(version))
return $"Chrome {version}";
}
}
// HKLM에서 시도
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Google\Chrome\BLBeacon"))
{
if (key != null)
{
var version = key.GetValue("version")?.ToString();
if (!string.IsNullOrEmpty(version))
return $"Chrome {version}";
}
}
// WOW6432Node에서 시도 (32비트 앱이 64비트 시스템에서 실행될 때)
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Google\Chrome\BLBeacon"))
{
if (key != null)
{
var version = key.GetValue("version")?.ToString();
if (!string.IsNullOrEmpty(version))
return $"Chrome {version}";
}
}
return "Chrome version not found";
}
catch (Exception ex)
{
return $"Chrome version check failed: {ex.Message}";
}
}
/// <summary>
/// Edge 브라우저 버전을 확인합니다.
/// </summary>
/// <returns>Edge 버전</returns>
static string GetEdgeVersion()
{
try
{
// 레지스트리에서 Edge 버전 확인
using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Edge\BLBeacon"))
{
if (key != null)
{
var version = key.GetValue("version")?.ToString();
if (!string.IsNullOrEmpty(version))
return $"Edge {version}";
}
}
// HKLM에서 시도
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Edge\BLBeacon"))
{
if (key != null)
{
var version = key.GetValue("version")?.ToString();
if (!string.IsNullOrEmpty(version))
return $"Edge {version}";
}
}
// WOW6432Node에서 시도
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Edge\BLBeacon"))
{
if (key != null)
{
var version = key.GetValue("version")?.ToString();
if (!string.IsNullOrEmpty(version))
return $"Edge {version}";
}
}
return "Edge version not found";
}
catch (Exception ex)
{
return $"Edge version check failed: {ex.Message}";
}
}
}
}

View File

@@ -45,6 +45,7 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
<NoWarn>IDE0090,IDE1006</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@@ -96,9 +97,21 @@
<Reference Include="CarlosAg.ExcelXmlWriter"> <Reference Include="CarlosAg.ExcelXmlWriter">
<HintPath>..\dll\CarlosAg.ExcelXmlWriter.dll</HintPath> <HintPath>..\dll\CarlosAg.ExcelXmlWriter.dll</HintPath>
</Reference> </Reference>
<Reference Include="Google.Protobuf, Version=3.30.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Protobuf.3.30.0\lib\net45\Google.Protobuf.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=1.4.2.13, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"> <Reference Include="ICSharpCode.SharpZipLib, Version=1.4.2.13, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\packages\SharpZipLib.1.4.2\lib\netstandard2.0\ICSharpCode.SharpZipLib.dll</HintPath> <HintPath>..\packages\SharpZipLib.1.4.2\lib\netstandard2.0\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference> </Reference>
<Reference Include="K4os.Compression.LZ4, Version=1.3.8.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Compression.LZ4.1.3.8\lib\net462\K4os.Compression.LZ4.dll</HintPath>
</Reference>
<Reference Include="K4os.Compression.LZ4.Streams, Version=1.3.8.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Compression.LZ4.Streams.1.3.8\lib\net462\K4os.Compression.LZ4.Streams.dll</HintPath>
</Reference>
<Reference Include="K4os.Hash.xxHash, Version=1.0.8.0, Culture=neutral, PublicKeyToken=32cd54395057cec3, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Hash.xxHash.1.0.8\lib\net462\K4os.Hash.xxHash.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath> <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference> </Reference>
@@ -112,7 +125,9 @@
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath> <HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
</Reference> </Reference>
<Reference Include="MySql.Data, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL" /> <Reference Include="MySql.Data, Version=9.4.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.9.4.0\lib\net462\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
@@ -123,11 +138,22 @@
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath> <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Configuration.ConfigurationManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Configuration.ConfigurationManager.8.0.0\lib\net462\System.Configuration.ConfigurationManager.dll</HintPath>
</Reference>
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=8.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.DirectoryServices" /> <Reference Include="System.DirectoryServices" />
<Reference Include="System.Formats.Asn1, Version=8.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Formats.Asn1, Version=8.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Formats.Asn1.8.0.2\lib\net462\System.Formats.Asn1.dll</HintPath> <HintPath>..\packages\System.Formats.Asn1.8.0.2\lib\net462\System.Formats.Asn1.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.IO.Pipelines, Version=5.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Pipelines.5.0.2\lib\net461\System.IO.Pipelines.dll</HintPath>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath> <HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference> </Reference>
@@ -158,6 +184,7 @@
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath> <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath> <HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
</Reference> </Reference>
@@ -181,6 +208,9 @@
<Reference Include="WebDriverManager, Version=2.17.6.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="WebDriverManager, Version=2.17.6.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\WebDriverManager.2.17.6\lib\net472\WebDriverManager.dll</HintPath> <HintPath>..\packages\WebDriverManager.2.17.6\lib\net472\WebDriverManager.dll</HintPath>
</Reference> </Reference>
<Reference Include="ZstdSharp, Version=0.8.5.0, Culture=neutral, PublicKeyToken=8d151af33a4ad5cf, processorArchitecture=MSIL">
<HintPath>..\packages\ZstdSharp.Port.0.8.5\lib\net462\ZstdSharp.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="CExt.cs" /> <Compile Include="CExt.cs" />
@@ -203,6 +233,7 @@
<Compile Include="SearchModel\ILibrarySearcher.cs" /> <Compile Include="SearchModel\ILibrarySearcher.cs" />
<Compile Include="SearchModel\KwangjuCityLibrarySearcher.cs" /> <Compile Include="SearchModel\KwangjuCityLibrarySearcher.cs" />
<Compile Include="SearchModel\NamguLibrarySearcher.cs" /> <Compile Include="SearchModel\NamguLibrarySearcher.cs" />
<Compile Include="SearchModel\SeleniumHelper.cs" />
<Compile Include="마스터\From_User_manage_List.cs"> <Compile Include="마스터\From_User_manage_List.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>

View File

@@ -2,17 +2,25 @@
<packages> <packages>
<package id="AngleSharp" version="1.3.0" targetFramework="net472" /> <package id="AngleSharp" version="1.3.0" targetFramework="net472" />
<package id="BouncyCastle.Cryptography" version="2.5.1" targetFramework="net472" /> <package id="BouncyCastle.Cryptography" version="2.5.1" targetFramework="net472" />
<package id="Google.Protobuf" version="3.30.0" targetFramework="net472" />
<package id="K4os.Compression.LZ4" version="1.3.8" targetFramework="net472" />
<package id="K4os.Compression.LZ4.Streams" version="1.3.8" targetFramework="net472" />
<package id="K4os.Hash.xxHash" version="1.0.8" targetFramework="net472" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" /> <package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" />
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="8.0.2" targetFramework="net472" /> <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="8.0.2" targetFramework="net472" />
<package id="Microsoft.Extensions.Logging.Abstractions" version="8.0.3" targetFramework="net472" /> <package id="Microsoft.Extensions.Logging.Abstractions" version="8.0.3" targetFramework="net472" />
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net472" /> <package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net472" />
<package id="MySql.Data" version="9.4.0" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" /> <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
<package id="Selenium.Support" version="4.34.0" targetFramework="net472" /> <package id="Selenium.Support" version="4.34.0" targetFramework="net472" />
<package id="Selenium.WebDriver" version="4.34.0" targetFramework="net472" /> <package id="Selenium.WebDriver" version="4.34.0" targetFramework="net472" />
<package id="SharpZipLib" version="1.4.2" targetFramework="net472" /> <package id="SharpZipLib" version="1.4.2" targetFramework="net472" />
<package id="SSH.NET" version="2025.0.0" targetFramework="net472" /> <package id="SSH.NET" version="2025.0.0" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" /> <package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Configuration.ConfigurationManager" version="8.0.0" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="8.0.1" targetFramework="net472" />
<package id="System.Formats.Asn1" version="8.0.2" targetFramework="net472" /> <package id="System.Formats.Asn1" version="8.0.2" targetFramework="net472" />
<package id="System.IO.Pipelines" version="5.0.2" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" /> <package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" /> <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" /> <package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
@@ -24,4 +32,5 @@
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" /> <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" /> <package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
<package id="WebDriverManager" version="2.17.6" targetFramework="net472" /> <package id="WebDriverManager" version="2.17.6" targetFramework="net472" />
<package id="ZstdSharp.Port" version="0.8.5" targetFramework="net472" />
</packages> </packages>

View File

@@ -1,5 +1,4 @@
using MySqlX.XDevAPI.Relational; using System;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;

View File

@@ -1,5 +1,4 @@
using ExcelTest; using ExcelTest;
using MySqlX.XDevAPI.Relational;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@@ -259,7 +258,7 @@ namespace WindowsFormsApp1.Mac
} }
#region SearchTag_KeyDown_Sub #region SearchTag_KeyDown_Sub
List<string> BackUpTag = new List<string>(); readonly List<string> BackUpTag = new List<string>();
private void Search_Tag() private void Search_Tag()
{ {
BackUpTag.Clear(); BackUpTag.Clear();

View File

@@ -1,6 +1,5 @@
using AR; using AR;
using ExcelTest; using ExcelTest;
using MySqlX.XDevAPI.Relational;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;