CHAT.GPT에게 질문) 1. windows c# 코드에서 SendMessage 사용할떄에, 파라미터에 담겨진 내용을 1000번 보냈을떄에, 받는부분이 없다면, 어디로 저장되나요? 아니면 없어지나요?
2. PostMessage 를 사용하더라도 PostMessage를 사용한 프로세스가 종료되면, 보낸메세지는 사라지나요? 프로세스가 종료될때에 SendMessage와 PostMessage의 상황을 설명해주세요
3. 송신프로세스 종료에 대해서 설명해주세요
CHAT.GPT 답)
SendMessage 함수는 Windows API에서 메시지를 다른 윈도우에 전달할 때 사용됩니다. 이 함수는 기본적으로 메시지를 지정된 윈도우의 프로시저로 보내며, 수신자가 없다면 메시지는 처리되지 않습니다.
질문에서 말한 **"1000번 보냈을 때 받는 부분이 없다면, 어디로 저장되나요?"**에 대한 답을 설명하겠습니다:
메시지가 수신되지 않으면: SendMessage 함수는 메시지가 처리될 때까지 호출한 스레드를 블록(block)합니다. 수신자가 없다면 메시지는 처리되지 않지만, 수신자에게 전달될 장소나 큐에 메시지가 저장되는 것은 아닙니다.
메시지가 손실되는 경우: 만약 SendMessage로 보낸 메시지가 처리되지 않거나, 수신자가 메시지를 받지 못한다면, 해당 메시지는 "사라지게" 됩니다. Windows 메시지 시스템은 수신자 없이 메시지를 저장하는 방식으로 동작하지 않기 때문에, 수신자가 없을 경우 메시지는 내부 큐에 쌓이지 않고, 처리되지 않습니다.
메시지 큐: Windows 메시지 시스템에서 메시지는 일반적으로 프로세스의 메시지 큐에 저장됩니다. 하지만, SendMessage 함수는 메시지를동기식으로 처리하며 수신자가 없거나 응답하지 않으면 메시지는 큐에 보관되지 않고버려지게됩니다. 이는 PostMessage와 차별되는 점으로, PostMessage는 비동기 방식으로 큐에 메시지를 보내지만, 수신자가 없어도 큐에 남게 되며, 이후에 처리될 수 있습니다.
따라서1000번의 메시지를 보내고 수신자가 없다면, 이 메시지들은 저장되지 않고 모두 사라지게 됩니다.
대안: 만약 메시지가 수신되지 않거나 처리되지 않았을 때 저장되기를 원한다면, 큐를 관리하거나 다른 방법(예: 파일 저장, 데이터베이스 등)을 통해 메시지를 로그로 기록하는 방법을 고려할 수 있습니다.
PostMessage와 SendMessage는 모두 Windows 메시지 시스템에서 메시지를 다른 윈도우로 보내는 데 사용되지만, 메시지가 처리되는 방식과 관련된 동작에 차이가 있습니다. 이들 두 방식이 각각 프로세스 종료 시 어떤 영향을 받는지에 대해 설명하겠습니다.
1. PostMessage와 메시지 큐
PostMessage는 메시지를 보내는 비동기 방식입니다. 이 방식은 메시지를 호출한 프로세스와 수신 윈도우의 메시지 큐에 넣어주고, 수신 윈도우는 이 메시지를 나중에 처리할 수 있습니다.
메시지 큐: 메시지가 수신 윈도우의 메시지 큐에 저장됩니다.
프로세스 종료 시:
만약 메시지를 보낸 프로세스가 종료되더라도 메시지는 수신 윈도우의 큐에 남아있습니다.
수신 프로세스가 메시지 큐에서 메시지를 처리하지 않으면, 수신 프로세스가 종료되기 전까지 큐에 남을 수 있습니다.
수신 윈도우가 종료되면, 해당 메시지는 큐에서 사라집니다. 즉, 메시지 큐는 수신 윈도우의 존재와 연관이 있기 때문에, 수신 윈도우가 종료되면 그 메시지는 더 이상 유효하지 않습니다.
따라서 PostMessage를 사용하여 메시지를 보낸 후, 메시지를 보내는 프로세스가 종료되면 그 메시지가 수신자에게 도달할 수 있는지는 수신 윈도우의 상태에 따라 달라집니다. 수신 윈도우가 여전히 실행 중이고 메시지 큐가 남아 있다면, 메시지는 처리됩니다. 그러나 수신 윈도우가 종료되면 그 메시지는 더 이상 처리되지 않습니다.
2. SendMessage와 메시지 전달
SendMessage는 메시지를 보내는 동기 방식입니다. 이 방식은 메시지를 호출한 프로세스가 수신 윈도우의 프로시저에서 메시지를 처리할 때까지 대기하는 방식입니다.
메시지 처리: SendMessage는 메시지가 수신 윈도우에 의해 처리될 때까지 호출한 프로세스가 대기합니다.
프로세스 종료 시:
메시지가 전송된 후 수신 프로세스가 종료되면, SendMessage는 메시지를 처리하지 못하게 됩니다.
수신 윈도우가 종료되면 SendMessage는 메시지를 보냈으나 처리할 수 없게 되며, 대기 중인 호출은 중단되고, 메시지는 소실됩니다. 즉, SendMessage는 수신 프로세스가 종료되면 더 이상 그 메시지를 전달할 수 없으며, 메시지 처리가 이루어지지 않습니다.
요약: 프로세스 종료 시 상황
PostMessage:
메시지는 수신 윈도우의 메시지 큐에 저장되며, 수신 윈도우가 실행 중이면 메시지를 처리합니다.
수신 윈도우가 종료되면, 큐에 남아있던 메시지는 사라집니다.
메시지를 보낸 프로세스가 종료되면, 해당 메시지가 수신자의 큐에 영향을 미치지 않습니다.
SendMessage:
메시지는 수신 프로세스가 메시지를 처리할 때까지 대기합니다.
수신 프로세스가 종료되면, 메시지는 소실되며 처리되지 않습니다.
메시지를 보낸 프로세스가 종료되면 대기 중이던 호출이 중단되고, 메시지는 더 이상 전달되지 않습니다.
따라서, **PostMessage**를 사용하면 수신 프로세스가 종료되기 전까지 큐에 남아 있을 수 있으나, **SendMessage**는 수신 프로세스가 종료되면 메시지가 처리되지 않고 소실됩니다.
송신 프로세스가 종료될 때 PostMessage와 SendMessage의 동작 차이에 대해서도 중요한 점들이 있습니다. 각각의 방식이 송신 프로세스 종료와 관련해서 어떻게 동작하는지 설명하겠습니다.
1. SendMessage와 송신 프로세스 종료
SendMessage는 동기식 메시지 전달 방식입니다. 즉, 메시지를 보내고 나서 수신 프로세스가 해당 메시지를 처리할 때까지 송신 프로세스는 대기합니다.
송신 프로세스 종료 시:
SendMessage를 호출한 프로세스가 메시지를 보내고, 그 후 메시지가 수신 프로세스에 의해 처리되기를 기다립니다.
송신 프로세스가 종료되면, 송신 프로세스가 대기 중인 상태에서 갑자기 종료되면, 해당 메시지는 더 이상 처리되지 않습니다.
송신 프로세스가 종료되면 메시지를 받기 위해 대기하던 쓰레드가 종료되기 때문에, 그 메시지는 전달되지 않거나 소실됩니다.
송신 프로세스가 종료되면, 해당 프로세스의 메시지 큐가 제거되거나 정리되므로, 메시지 처리도 이루어지지 않게 됩니다.
따라서 송신 프로세스가 종료되면 SendMessage를 통해 보낸 메시지는 사라지게 됩니다.
2. PostMessage와 송신 프로세스 종료
PostMessage는 비동기식 메시지 전달 방식으로, 송신 프로세스가 메시지를 큐에 넣고 난 후, 송신 프로세스는 즉시 반환됩니다. 메시지는 수신 프로세스의 큐에 저장되며, 그 큐에서 메시지를 나중에 수신 프로세스가 처리합니다.
송신 프로세스 종료 시:
PostMessage는 메시지를 보내고 나서 송신 프로세스가 종료되어도 상관없습니다.
PostMessage는 비동기적으로 메시지를 큐에 넣고, 송신 프로세스는 해당 메시지의 처리와 관계없이 즉시 반환되므로, 송신 프로세스의 종료가 메시지 전송에 영향을 미치지 않습니다.
수신 프로세스가 계속 실행 중이라면, 메시지는 수신 프로세스의 메시지 큐에 저장되고 나중에 처리됩니다.
송신 프로세스가 종료되더라도, 메시지는 수신 프로세스가 처리할 때까지 큐에 남아있습니다.
단, 수신 프로세스가 종료되면 큐에서 메시지가 제거되므로, 메시지는 더 이상 처리되지 않습니다.
요약: 송신 프로세스 종료 시 동작 차이
SendMessage:
송신 프로세스가 종료되면, 대기 중인 메시지는 처리되지 않고 사라집니다.
송신 프로세스가 종료되면서 메시지 전송 대기가 중단되기 때문에, 해당 메시지가 수신 프로세스에 전달될 수 없습니다.
PostMessage:
송신 프로세스가 종료되더라도, 메시지는 수신 프로세스의 큐에 남아 있을 수 있습니다.
송신 프로세스의 종료는 메시지 큐에 이미 저장된 메시지에 영향을 미치지 않으며, 수신 프로세스가 실행 중이라면 메시지를 계속 처리할 수 있습니다.
결론
**SendMessage**는 송신 프로세스의 종료가 메시지 처리에 큰 영향을 미칩니다. 송신 프로세스가 종료되면 메시지가 더 이상 전달되지 않거나 처리되지 않습니다.
반면 **PostMessage**는 송신 프로세스가 종료되어도 메시지 처리에 영향을 주지 않으며, 수신 프로세스가 실행 중이라면 메시지를 처리할 수 있습니다.
C#에서 비동기 메서드를 동기적으로 호출하는 구조를 포함하고 있습니다. 주로 Task.Run과 await 키워드를 사용하여 비동기 메서드를 처리하는 방식입니다. 이 코드를 더 잘 이해하기 위해 각 부분을 세분화해서 설명드리겠습니다.
1. Main 메서드와 STAThread 속성
Main 메서드는 C# 애플리케이션의 진입점(entry point) 입니다.
STAThread 속성은 Windows Forms 또는 WPF 애플리케이션에서 메인 스레드가 단일 스레드 아파트(Single-Threaded Apartment, STA) 모드로 실행되도록 지정합니다. 이는 주로 COM 상호 운용성(Interoperability)과 관련이 있습니다. Windows Forms 및 WPF에서 UI 스레드는 STA 모드로 실행되어야 합니다.
// FetchComplexDetailsClass:주로 크롤링작업이 이루어지는 프로그램작업일떄에 쓰이는 호출방법 //FetchComplexDetailsClass:주로 크롤링작업이 이루어지는 프로그램작업일떄에 쓰이는 호출방법
[STAThread]
staticvoidMain()
{
// 비동기 메서드를 호출하는 부분
Task.Run(async () =>
{
FetchComplexDetailsClass frm = new FetchComplexDetailsClass();
await frm.RUN();
}).GetAwaiter().GetResult(); // 비동기 작업이 완료될 때까지 대기
}
2. Task.Run(async () => { ... })
Task.Run은 주어진 델리게이트 또는 메서드를 비동기적으로 실행하기 위해 새로운 태스크를 생성합니다.
async () => { ... }는 비동기 메서드를 정의하는 람다 표현식입니다. 이 람다 안에서 비동기 작업을 수행할 수 있습니다.
이 부분은 백그라운드 스레드에서 비동기 작업을 수행하게 합니다. 이 경우 frm.RUN() 메서드를 비동기적으로 호출하려고 합니다.
3. await frm.RUN()
await는 비동기 메서드를 기다리게 하며, 메서드가 완료될 때까지 나머지 코드를 실행하지 않습니다.
이 메서드가 완료될 때까지 현재 작업(스레드)이 대기 상태에 들어갑니다. RUN 메서드 내부에서 비동기 작업(예: 파일 I/O, 네트워크 호출 등)을 처리하고 그 결과를 반환할 때까지 기다리게 됩니다.
4. .GetAwaiter().GetResult()
.GetAwaiter().GetResult()는 비동기 작업이 완료될 때까지 기다리면서, 비동기 결과를 동기적으로 처리하는 방법입니다.
GetAwaiter()는 Task에서 비동기 작업의 상태를 가져옵니다.
GetResult()는 비동기 작업이 완료될 때까지 기다리고, 그 결과를 동기적으로 반환합니다. 이 부분에서 예외가 발생하면 AggregateException을 발생시킬 수 있습니다.
5. 전체 흐름 설명
Main 메서드 실행: 프로그램이 시작되면 Main 메서드가 호출됩니다. 여기서는 STAThread 속성 덕분에 단일 스레드 아파트에서 실행됩니다.
Task.Run 실행: Task.Run은 새로운 비동기 작업을 시작합니다. 이 작업은 백그라운드 스레드에서 실행됩니다. async 람다 표현식 안에서 비동기 작업을 호출하고 있습니다.
await frm.RUN(): frm.RUN() 비동기 메서드를 호출하면서, 이 메서드가 완료될 때까지 기다립니다. 이 메서드 내부에서 실제 비동기 작업이 수행됩니다(예를 들어, 네트워크 요청 또는 데이터 처리).
GetAwaiter().GetResult(): await가 내부적으로 비동기 작업을 기다리지만, .GetAwaiter().GetResult()를 통해 해당 작업이 완료될 때까지 현재 스레드를 동기적으로 차단합니다. 즉, 이 코드가 없으면 비동기 메서드의 작업이 완료되기 전에 Main이 종료되었을 수 있기 때문에, 프로그램이 예기치 않게 종료되지 않도록 합니다.
비동기 메서드 완료 후 종료: frm.RUN() 메서드가 완료되면, Task.Run 내의 비동기 작업이 종료되고, Main 메서드가 종료됩니다. 이제 프로그램이 정상적으로 종료됩니다.
동기와 비동기 결합
비동기 작업은 일반적으로 UI 스레드를 차단하지 않으며, 다른 작업을 처리하는 동안 동시에 실행됩니다.
하지만 GetAwaiter().GetResult()는 비동기 작업을 동기적으로 기다리게 하므로, Main 스레드는 비동기 작업이 완료될 때까지 대기하고, 작업이 완료된 후에 종료됩니다.
6. 왜 이런 방식으로 사용하나요?
비동기 작업을 UI 스레드에서 처리할 때 동기적으로 메인 스레드가 대기하도록 강제하는 경우가 있습니다. 이를 통해 UI를 잠시 멈추게 하지 않고 비동기 작업을 안전하게 처리할 수 있습니다.
Task.Run을 사용하면 비동기 작업이 백그라운드에서 실행되므로 UI 스레드의 블로킹을 피할 수 있습니다. 다만, .GetAwaiter().GetResult()를 사용하여 그 결과를 동기적으로 기다리는 방식은 메인 스레드가 작업 완료를 기다리게 만들기 때문에 주로 Main 메서드에서 비동기 작업을 호출할 때 사용됩니다.
결론
Task.Run을 통해 비동기 작업을 백그라운드에서 시작하고, await를 사용해 비동기 메서드를 기다립니다.
GetAwaiter().GetResult()를 사용하여 비동기 작업이 완료될 때까지 메인 스레드를 동기적으로 대기하게 만듭니다.
이 방식은 주로 콘솔 애플리케이션에서 비동기 작업을 동기적으로 처리하고 싶을 때 사용됩니다.
C#의 Dictionary는 기본적으로 키 값이 고유해야 하며, 동일한 키를 추가하려고 하면 ArgumentException이 발생합니다. 키 중복이 발생할 수 있는 시나리오에서 이를 처리하는 방법은 상황에 따라 다릅니다. 몇 가지 일반적인 해결 방법은 다음과 같습니다:
1. Dictionary의 값에 중복 키 데이터를 저장하기 키 중복을 허용해야 한다면, 값을 컬렉션(예: List 또는 HashSet)으로 변경하여 하나의 키에 여러 값을 저장할 수 있습니다.
2. Lookup 사용 System.Linq의 Lookup 클래스는 중복 키를 자연스럽게 처리할 수 있는 기능을 제공합니다.
3. 커스텀 자료구조로 구현 Dictionary 대신 키 중복을 처리하기 위한 커스텀 자료구조를 사용할 수도 있습니다.
4. 키를 고유하게 변경 중복 키를 허용하지 않는 Dictionary를 사용해야 하는 경우, 키를 고유하게 만들 방법을 고안할 수 있습니다. 예를 들어, 키에 고유 식별자를 추가하거나 조합하는 방식입니다.
5. 데이터 설계를 검토 만약 중복 키가 자주 발생한다면 데이터 설계의 문제일 수 있습니다. 데이터를 재구조화하거나 다른 컬렉션 타입(예: List, IGrouping)을 사용하는 것이 더 적합할 수 있습니다.
결론 위 방법들 중 선택은 사용 사례에 따라 다릅니다:
키에 여러 값을 저장해야 한다면 **List를 값으로 사용하거나 Lookup**을 사용하세요. 키를 고유하게 유지하려면 고유 식별자를 추가하세요. 대량의 중복 처리가 빈번하다면 데이터 설계를 다시 고려해보는 것이 좋습니다.
Windows에서 C# 프로젝트를 설정하고 빌드하는 과정은 다음과 같습니다.(Linux와 동일절차임) Windows에서 C# 프로젝트를 설정하고 빌드하는 과정은 다음과 같습니다.(Linux와 동일절차임) Windows에서 C# 프로젝트를 설정하고 빌드하는 과정은 다음과 같습니다.(Linux와 동일절차임)
원격 분석 --------- .NET 도구는 사용자 환경 개선을 위해 사용량 현황 데이터를 수집합니다. Microsoft에서 데이터를 수집하여 커뮤니티와 공유합니다. 원하는 셸을 사용하여 DOTNET_CLI_TELEMETRY_OPTOUT 환경 변수를 '1' 또는 'true'로 설정하여 원격 분석을 옵트아웃할 수 있습니다.
생성 후 작업 처리 중... C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj 복원 중: 복원할 프로젝트를 확인하는 중... C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습 니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다. C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj을(를) 110밀리초 동안 복원했습니다. 복원에 성공했습니다.
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker> C:\Users\B210145_BK\Downloads\exture_4_3_ubuntu_ticker\multipleredistickerserver> C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MultipleRedisManager.cs(47,17): error CS0246: 'RedisClient' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MultipleRedisManager.cs(48,10): error CS0246: 'RedisClient' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\PublicApiNM.cs(229,77): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\PublicDataApiNM.cs(60,67): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(23,41): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(48,59): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(110,75): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조 가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\SelectDataSQLite.cs(161,98): error CS0246: 'SQLiteConnection' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조 가 있는지 확인하세요. [C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj] 경고 2개 오류 42개
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>dotnet build 복원할 프로젝트를 확인하는 중... C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습 니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다. 복원할 모든 프로젝트가 최신 상태입니다. C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습 니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다. mdiwebrowser -> C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0\mdiwebrowser.dll
빌드했습니다.
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습 니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다. C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습 니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다. 경고 2개 오류 0개
2024-09-11 오후 09:29 1,040,384 ServiceStack.Common.dll 2024-09-11 오후 09:29 425,984 ServiceStack.Interfaces.dll 2024-09-11 오후 09:30 902,144 ServiceStack.Redis.dll 2024-09-11 오후 09:32 760,320 ServiceStack.Text.dll
2024-09-26 오전 08:12
.
2024-09-26 오전 08:12
..
2020-04-17 오전 05:38 4,977,744 EntityFramework.dll 2020-04-17 오전 05:39 591,440 EntityFramework.SqlServer.dll 2024-09-26 오전 08:12 21,704 mdiwebrowser.deps.json 2024-09-26 오전 08:12 895,488 mdiwebrowser.dll 2024-09-26 오전 08:12 138,752 mdiwebrowser.exe 2024-09-26 오전 08:12 104,068 mdiwebrowser.pdb 2024-09-26 오전 08:12 268 mdiwebrowser.runtimeconfig.json 2019-11-15 오후 05:36 23,112 Microsoft.Win32.SystemEvents.dll 2023-03-08 오후 04:09 712,464 Newtonsoft.Json.dll 2024-09-26 오전 08:12
2011-06-17 오전 10:16 553,984 ServiceStack.dll 2011-06-17 오전 10:16 33,792 ServiceStack.Interfaces.dll 2011-06-17 오전 10:16 20,480 ServiceStack.ServiceInterface.dll 3개 파일 608,256 바이트 2개 디렉터리 17,472,036,864 바이트 남음
2024-07-31 오후 06:45 475 ServerInfo.xml 1개 파일 475 바이트 0개 디렉터리 17,471,488,000 바이트 남음
C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0> C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser>dotnet run C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습 니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다. C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\mdiwebrowser.csproj : warning NU1803: 'http://nuget.grapecity.com/nuget' 'HTTP' 원본을 사용하여 'restore' 작업 을 실행하고 있습 니다. 비 HTTPS 액세스는 이후 버전에서 제거됩니다. 'HTTPS' 원본으로 마이그레이션하는 것이 좋습니다. 1. REDIS CONNECT 2. SQLite DATABASE CONNECT Unhandled exception. System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Data\CreateDB.sql'. at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options) at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode) at Systehttp://m.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode) at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode) at System.IO.StreamReader.ValidateArgsAndOpenPath(String path, Encoding encoding, Int32 bufferSize) at Systehttp://m.IO.StreamReader..ctor(String path) at mdiwebrowser.MdiResponseFrm.CreateDb() in C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MdiResponseFrm.cs:line 358 at mdiwebrowser.MdiResponseFrm.RUN() in C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\MdiResponseFrm.cs:line 62 at mdiwebrowser.Program.Main() in C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\Program.cs:line 17
copy "C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\reference\*.DLL" "C:\Users\B210145_BK\Downloads\exture_4_5_ubuntu_ticker\mdiwebrowser\bin\Debug\net8.0" dotnet run