This commit is contained in:
jmaniuvc
2025-05-15 11:44:27 +09:00
commit f0b7dfd413
274 changed files with 271580 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"GenerateFileHashJson/1.0.0": {
"runtime": {
"GenerateFileHashJson.dll": {}
}
}
}
},
"libraries": {
"GenerateFileHashJson/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,13 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View File

@@ -0,0 +1,41 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\SJM\\Desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\GenerateFileHashJson_Project\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}|GenerateFileHashJson\\GenerateFileHashJson.csproj|c:\\users\\sjm\\desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\generatefilehashjson_project\\generatefilehashjson\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}|GenerateFileHashJson\\GenerateFileHashJson.csproj|solutionrelative:generatefilehashjson\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\GenerateFileHashJson_Project\\GenerateFileHashJson\\Program.cs",
"RelativeDocumentMoniker": "GenerateFileHashJson\\Program.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\GenerateFileHashJson_Project\\GenerateFileHashJson\\Program.cs",
"RelativeToolTip": "GenerateFileHashJson\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-27T02:37:21.709Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View File

@@ -0,0 +1,41 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\SJM\\Desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\GenerateFileHashJson_Project\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}|GenerateFileHashJson\\GenerateFileHashJson.csproj|c:\\users\\sjm\\desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\generatefilehashjson_project\\generatefilehashjson\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}|GenerateFileHashJson\\GenerateFileHashJson.csproj|solutionrelative:generatefilehashjson\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\GenerateFileHashJson_Project\\GenerateFileHashJson\\Program.cs",
"RelativeDocumentMoniker": "GenerateFileHashJson\\Program.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uD074\uB77C\uC774\uC5B8\uD2B8 \uAE30\uB2A5\\GenerateFileHashJson_Project\\GenerateFileHashJson\\Program.cs",
"RelativeToolTip": "GenerateFileHashJson\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-27T02:37:21.709Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View File

@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35806.99 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateFileHashJson", "GenerateFileHashJson\GenerateFileHashJson.csproj", "{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4B551F86-ED76-4318-ACC3-BF6BE2C76CCE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {19D91B8C-65DB-4F24-933C-0EEB34CB5AA4}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_LastSelectedProfileId>C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,66 @@
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text.Json;
using System.Collections.Generic;
class Program
{
static string buildPath = "Build"; // Unity 빌드 폴더 (예: Build/)
static string outputJsonFile = "file_list.json"; // 생성할 JSON 파일
static void Main()
{
Console.WriteLine("🔍 Unity 빌드 파일 목록 생성 중...");
if (!Directory.Exists(buildPath))
{
Console.WriteLine($"❌ 빌드 폴더가 존재하지 않습니다: {buildPath}");
return;
}
Dictionary<string, string> fileHashes = new Dictionary<string, string>();
foreach (string filePath in Directory.GetFiles(buildPath, "*", SearchOption.AllDirectories))
{
string relativePath = Path.GetRelativePath(buildPath, filePath).Replace("\\", "/");
string hash = GetFileHash(filePath);
fileHashes[relativePath] = hash;
}
// 🔒 모든 해시 값을 알파벳 순으로 정렬하고 이어붙인 뒤 전체 SHA256 계산
string combinedHashes = string.Join("", new SortedDictionary<string, string>(fileHashes).Values);
string versionID = GetVersionID(combinedHashes);
var jsonObject = new
{
VersionID = versionID,
Files = fileHashes
};
string jsonString = JsonSerializer.Serialize(jsonObject, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(Path.Combine(".", outputJsonFile), jsonString);
}
static string GetFileHash(string filePath)
{
using (var sha256 = SHA256.Create())
using (var stream = File.OpenRead(filePath))
{
byte[] hashBytes = sha256.ComputeHash(stream);
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
}
static string GetVersionID(string input)
{
using (var sha256 = SHA256.Create())
{
byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
byte[] hashBytes = sha256.ComputeHash(inputBytes);
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
}
}

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
<TargetFramework>net8.0</TargetFramework>
<SelfContained>false</SelfContained>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<History>True|2025-04-17T05:57:29.6643981Z||;True|2025-04-17T11:30:39.3463309+09:00||;True|2025-04-17T11:28:28.9517407+09:00||;True|2025-04-17T11:27:42.3144789+09:00||;True|2025-04-17T11:27:38.4871940+09:00||;True|2025-02-27T11:43:38.2214313+09:00||;True|2025-02-27T11:41:38.7650872+09:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"GenerateFileHashJson/1.0.0": {
"runtime": {
"GenerateFileHashJson.dll": {}
}
}
}
},
"libraries": {
"GenerateFileHashJson/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View File

@@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"GenerateFileHashJson/1.0.0": {
"runtime": {
"GenerateFileHashJson.dll": {}
}
}
}
},
"libraries": {
"GenerateFileHashJson/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +1,13 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("GenerateFileHashJson")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("GenerateFileHashJson")]
[assembly: System.Reflection.AssemblyTitleAttribute("GenerateFileHashJson")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// MSBuild WriteCodeFragment 클래스에서 생성되었습니다.

View File

@@ -0,0 +1 @@
2c33da5084894e007933dc453c2a861766167a881bec2f49a1feca1cfd539e19

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = GenerateFileHashJson
build_property.ProjectDir = C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
31e2d39300d6822537d13f1a8af6d15cc708576640410bb3025978ceb98f9932

View File

@@ -0,0 +1,14 @@
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Debug\net8.0\GenerateFileHashJson.exe
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Debug\net8.0\GenerateFileHashJson.deps.json
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Debug\net8.0\GenerateFileHashJson.runtimeconfig.json
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Debug\net8.0\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Debug\net8.0\GenerateFileHashJson.pdb
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\GenerateFileHashJson.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\GenerateFileHashJson.AssemblyInfoInputs.cache
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\GenerateFileHashJson.AssemblyInfo.cs
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\GenerateFileHashJson.csproj.CoreCompileInputs.cache
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\refint\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\GenerateFileHashJson.pdb
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\GenerateFileHashJson.genruntimeconfig.cache
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Debug\net8.0\ref\GenerateFileHashJson.dll

View File

@@ -0,0 +1 @@
4053d35ad363227ebd09838c9905368834b11e5e2e2bdb0715a09b8d0190c4c2

View File

@@ -0,0 +1,76 @@
{
"format": 1,
"restore": {
"C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\GenerateFileHashJson.csproj": {}
},
"projects": {
"C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\GenerateFileHashJson.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\GenerateFileHashJson.csproj",
"projectName": "GenerateFileHashJson",
"projectPath": "C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\GenerateFileHashJson.csproj",
"packagesPath": "C:\\Users\\SJM\\.nuget\\packages\\",
"outputPath": "C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\"
],
"configFilePaths": [
"C:\\Users\\SJM\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.200"
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.203/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\SJM\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.13.2</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\SJM\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft\Xamarin\NuGet\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("GenerateFileHashJson")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("GenerateFileHashJson")]
[assembly: System.Reflection.AssemblyTitleAttribute("GenerateFileHashJson")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// MSBuild WriteCodeFragment 클래스에서 생성되었습니다.

View File

@@ -0,0 +1 @@
ef126c0a4e82decc1bedf8235c0806a01dc1fa8b78566aae677b4c6146c3d02a

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = GenerateFileHashJson
build_property.ProjectDir = C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
774417b228aa4a217d39a143af6dac6382c0b8bd3f98c564255539769bbd41a3

View File

@@ -0,0 +1,28 @@
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.exe
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.deps.json
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.runtimeconfig.json
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.pdb
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.AssemblyInfoInputs.cache
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.AssemblyInfo.cs
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.csproj.CoreCompileInputs.cache
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\refint\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.pdb
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.genruntimeconfig.cache
C:\Users\SJM\Desktop\GenerateFileHashJson\GenerateFileHashJson\obj\Release\net8.0\ref\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.exe
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.deps.json
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.runtimeconfig.json
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\bin\Release\net8.0\GenerateFileHashJson.pdb
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.AssemblyInfoInputs.cache
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.AssemblyInfo.cs
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.csproj.CoreCompileInputs.cache
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\refint\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.pdb
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\GenerateFileHashJson.genruntimeconfig.cache
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson_Project\GenerateFileHashJson\obj\Release\net8.0\ref\GenerateFileHashJson.dll

View File

@@ -0,0 +1 @@
87ee2bcfc9f57ea5bcf8ccffdcad4155dfd23cd9622714cd53f20394d8511786

View File

@@ -0,0 +1,5 @@
C:\Users\SJM\Desktop\GenerateFileHashJson_App\GenerateFileHashJson.exe
C:\Users\SJM\Desktop\GenerateFileHashJson_App\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\GenerateFileHashJson_App\GenerateFileHashJson.deps.json
C:\Users\SJM\Desktop\GenerateFileHashJson_App\GenerateFileHashJson.runtimeconfig.json
C:\Users\SJM\Desktop\GenerateFileHashJson_App\GenerateFileHashJson.pdb

View File

@@ -0,0 +1,5 @@
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson\GenerateFileHashJson.exe
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson\GenerateFileHashJson.dll
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson\GenerateFileHashJson.deps.json
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson\GenerateFileHashJson.runtimeconfig.json
C:\Users\SJM\Desktop\클라이언트 기능\GenerateFileHashJson\GenerateFileHashJson.pdb

View File

@@ -0,0 +1,83 @@
{
"version": 3,
"targets": {
"net8.0": {}
},
"libraries": {},
"projectFileDependencyGroups": {
"net8.0": []
},
"packageFolders": {
"C:\\Users\\SJM\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {},
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\GenerateFileHashJson.csproj",
"projectName": "GenerateFileHashJson",
"projectPath": "C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\GenerateFileHashJson.csproj",
"packagesPath": "C:\\Users\\SJM\\.nuget\\packages\\",
"outputPath": "C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\"
],
"configFilePaths": [
"C:\\Users\\SJM\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.200"
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.203/PortableRuntimeIdentifierGraph.json"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"version": 2,
"dgSpecHash": "5TjlT7i+UkM=",
"success": true,
"projectFilePath": "C:\\Users\\SJM\\Desktop\\클라이언트 기능\\GenerateFileHashJson_Project\\GenerateFileHashJson\\GenerateFileHashJson.csproj",
"expectedPackageFiles": [],
"logs": []
}

Binary file not shown.

View File

@@ -0,0 +1,105 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|c:\\users\\sjm\\desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\launcher_app\\programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\programlauncher\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\programlauncher\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|ProgramLauncher||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 4,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "ProgramLauncher",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\ProgramLauncher.csproj",
"RelativeDocumentMoniker": "ProgramLauncher\\ProgramLauncher.csproj",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\ProgramLauncher.csproj",
"RelativeToolTip": "ProgramLauncher\\ProgramLauncher.csproj",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-04-22T03:09:10.813Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Form1.Designer.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.Designer.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Form1.Designer.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.Designer.cs",
"RelativeToolTip": "ProgramLauncher\\Form1.Designer.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAVAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T01:32:16.984Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Program.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Program.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Program.cs",
"RelativeToolTip": "ProgramLauncher\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAA9AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T00:44:05.335Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Form1.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Form1.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs",
"RelativeToolTip": "ProgramLauncher\\Form1.cs",
"ViewState": "AgIAABIAAAAAAAAAAAAhwBwAAAAWAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T00:43:10.886Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Form1.cs [\uB514\uC790\uC778]",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Form1.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs [\uB514\uC790\uC778]",
"RelativeToolTip": "ProgramLauncher\\Form1.cs [\uB514\uC790\uC778]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T00:42:49.663Z",
"EditorCaption": " [\uB514\uC790\uC778]"
}
]
}
]
}
]
}

View File

@@ -0,0 +1,105 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|c:\\users\\sjm\\desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\launcher_app\\programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\programlauncher\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\programlauncher\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{948819DD-0CD3-49B2-91E0-8530D1D0D871}|ProgramLauncher\\ProgramLauncher.csproj|solutionrelative:programlauncher\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|ProgramLauncher||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 4,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{b1e99781-ab81-11d0-b683-00aa00a3ee26}"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "ProgramLauncher",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\ProgramLauncher.csproj",
"RelativeDocumentMoniker": "ProgramLauncher\\ProgramLauncher.csproj",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\ProgramLauncher.csproj",
"RelativeToolTip": "ProgramLauncher\\ProgramLauncher.csproj",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-04-22T03:09:10.813Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Form1.Designer.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.Designer.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Form1.Designer.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.Designer.cs",
"RelativeToolTip": "ProgramLauncher\\Form1.Designer.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAVAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T01:32:16.984Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Program.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Program.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Program.cs",
"RelativeToolTip": "ProgramLauncher\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAA9AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T00:44:05.335Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Form1.cs",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Form1.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs",
"RelativeToolTip": "ProgramLauncher\\Form1.cs",
"ViewState": "AgIAABIAAAAAAAAAAAAhwCUAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T00:43:10.886Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Form1.cs [\uB514\uC790\uC778]",
"DocumentMoniker": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs",
"RelativeDocumentMoniker": "ProgramLauncher\\Form1.cs",
"ToolTip": "C:\\Users\\SJM\\Desktop\\\uC5C5\uB370\uC774\uD2B8 \uAE30\uB2A5\\Launcher_App\\ProgramLauncher\\Form1.cs [\uB514\uC790\uC778]",
"RelativeToolTip": "ProgramLauncher\\Form1.cs [\uB514\uC790\uC778]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T00:42:49.663Z",
"EditorCaption": " [\uB514\uC790\uC778]"
}
]
}
]
}
]
}

View File

@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35931.197 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProgramLauncher", "ProgramLauncher\ProgramLauncher.csproj", "{948819DD-0CD3-49B2-91E0-8530D1D0D871}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{948819DD-0CD3-49B2-91E0-8530D1D0D871}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{948819DD-0CD3-49B2-91E0-8530D1D0D871}.Debug|Any CPU.Build.0 = Debug|Any CPU
{948819DD-0CD3-49B2-91E0-8530D1D0D871}.Release|Any CPU.ActiveCfg = Release|Any CPU
{948819DD-0CD3-49B2-91E0-8530D1D0D871}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {64B7D06E-9993-41CA-8700-26089837A736}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1 @@
{"RootPath":"C:\\Users\\SJM\\Desktop\\클라이언트 기능\\ProgramLauncher_Project\\ProgramLauncher","ProjectFileName":"ProgramLauncher.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Form1.cs"},{"SourceFile":"Form1.Designer.cs"},{"SourceFile":"Program.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"}],"References":[{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Users\\SJM\\Desktop\\클라이언트 기능\\ProgramLauncher_Project\\ProgramLauncher\\bin\\Debug\\ProgramLauncher.exe","OutputItemRelativePath":"ProgramLauncher.exe"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@@ -0,0 +1,76 @@
namespace ProgramLauncher
{
partial class Form1
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.Label_UpdateFileName = new System.Windows.Forms.Label();
this.Label_ProgressState = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// Label_UpdateFileName
//
this.Label_UpdateFileName.Anchor = System.Windows.Forms.AnchorStyles.None;
this.Label_UpdateFileName.AutoSize = true;
this.Label_UpdateFileName.Location = new System.Drawing.Point(367, 225);
this.Label_UpdateFileName.Name = "Label_UpdateFileName";
this.Label_UpdateFileName.Size = new System.Drawing.Size(39, 12);
this.Label_UpdateFileName.TabIndex = 1;
this.Label_UpdateFileName.Text = "Name";
//
// Label_ProgressState
//
this.Label_ProgressState.Anchor = System.Windows.Forms.AnchorStyles.None;
this.Label_ProgressState.AutoSize = true;
this.Label_ProgressState.Location = new System.Drawing.Point(367, 165);
this.Label_ProgressState.Name = "Label_ProgressState";
this.Label_ProgressState.Size = new System.Drawing.Size(57, 12);
this.Label_ProgressState.TabIndex = 2;
this.Label_ProgressState.Text = "실행 중...";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.Label_ProgressState);
this.Controls.Add(this.Label_UpdateFileName);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label Label_UpdateFileName;
private System.Windows.Forms.Label Label_ProgressState;
}
}

View File

@@ -0,0 +1,195 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Deployment.Application;
using System.Diagnostics;
using System.Drawing;
using Newtonsoft.Json;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Http;
namespace ProgramLauncher
{
public partial class Form1 : Form
{
static string downloadServerUrl = "http://xr.flexing.ai:3030/XR_Server";
static string downloadFolderName = "Build";
static string jsonFileName = "file_list.json";
static string localVersionID = "versionID.txt";
static readonly HttpClient httpClient = new HttpClient();
public Form1()
{
downloadServerUrl = CombineUrl(downloadServerUrl, Program.projectName);
InitializeComponent();
}
private async void Form1_Load(object sender, EventArgs e)
{
Label_UpdateFileName.Text = string.Empty;
await CheckUpdate();
}
private async Task CheckUpdate()
{
var serverFileList = await GetServerFileList(downloadServerUrl);
if (serverFileList == null) return;
string latestVersionID = serverFileList.VersionID;
string localVersionID = GetLocalVersion();
if (latestVersionID != localVersionID)
{
Label_ProgressState.Text = "업데이트 중...";
foreach (var file in serverFileList.Files)
{
string localFilePath = Path.Combine(downloadFolderName, file.Key);
string serverHash = file.Value;
if (!File.Exists(localFilePath) || GetFileHash(localFilePath) != serverHash)
{
Label_UpdateFileName.Text = localFilePath;
string downloadFolder = CombineUrl(downloadServerUrl, downloadFolderName);
await DownloadFile(Path.Combine(downloadFolder, file.Key), localFilePath);
}
}
var serverFilePaths = new HashSet<string>(
serverFileList.Files.Keys.Select(file => file.Replace('\\', '/')) // 서버의 파일 경로를 통일
);
foreach (string localFile in Directory.GetFiles(downloadFolderName, "*", SearchOption.AllDirectories))
{
// 현재 파일의 상대 경로를 구함 (localFolder 기준)
string relativePath = localFile.Substring(downloadFolderName.Length + 1).Replace('\\', '/');
if (!serverFilePaths.Contains(relativePath))
{
File.Delete(localFile);
}
}
SaveLocalVersion(latestVersionID);
}
StartExecutableFile(downloadFolderName);
this.Close();
}
static async Task<ServerFileList> GetServerFileList(string serverUrl)
{
using (WebClient client = new WebClient())
{
try
{
string serverJsonUrl = CombineUrl(serverUrl, jsonFileName);
string json = await client.DownloadStringTaskAsync(serverJsonUrl);
return JsonConvert.DeserializeObject<ServerFileList>(json);
}
catch (Exception ex)
{
return null;
}
}
}
static string GetLocalVersion()
{
return File.Exists(localVersionID) ? File.ReadAllText(localVersionID).Trim() : "";
}
static void SaveLocalVersion(string version)
{
File.WriteAllText(localVersionID, version);
}
static string GetFileHash(string filePath)
{
using (var sha256 = SHA256.Create())
using (var stream = File.OpenRead(filePath))
{
byte[] hash = sha256.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}
/*
static async Task DownloadFile(string url, string outputPath)
{
try
{
using (WebClient client = new WebClient())
{
Directory.CreateDirectory(Path.GetDirectoryName(outputPath) ?? "");
await client.DownloadFileTaskAsync(new Uri(url), outputPath);
}
}
catch (Exception ex)
{
return;
}
}
*/
static async Task DownloadFile(string url, string outputPath)
{
try
{
Directory.CreateDirectory(Path.GetDirectoryName(outputPath) ?? "");
using (var response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
{
response.EnsureSuccessStatusCode(); // 200 OK가 아닐 경우 예외 발생
using (var stream = await response.Content.ReadAsStreamAsync())
using (var fileStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write, FileShare.None))
{
await stream.CopyToAsync(fileStream);
}
}
}
catch (Exception ex)
{
}
}
static void StartExecutableFile(string executeFolder)
{
string[] exeFiles = Directory.GetFiles(executeFolder, "*.exe", SearchOption.TopDirectoryOnly);
if (exeFiles.Length == 0)
{
return;
}
string executeFilePath = exeFiles.FirstOrDefault(file => !file.EndsWith("UnityCrashHandler64.exe", StringComparison.OrdinalIgnoreCase));
string executeFileName = Path.GetFileName(executeFilePath);
Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.WorkingDirectory = executeFolder;
process.StartInfo.FileName = executeFileName;
process.Start();
}
static string CombineUrl(string baseUrl, string relativePath)
{
return $"{baseUrl.TrimEnd('/')}/{relativePath.TrimStart('/')}";
}
}
class ServerFileList
{
public string VersionID { get; set; } = "";
public Dictionary<string, string> Files { get; set; } = new Dictionary<string, string>();
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ProgramLauncher
{
internal static class Program
{
public static string projectName = "StudioInstaller";
static string mutexName = "UVC_";
[STAThread]
static void Main()
{
mutexName = mutexName + projectName;
using (var mutex = new Mutex(true, mutexName, out bool isNewInstance))
{
if (!isNewInstance)
{
// 이미 실행 중인 경우
MessageBox.Show("이미 프로그램이 실행 중입니다.", "중복 실행 방지", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
}

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{948819DD-0CD3-49B2-91E0-8530D1D0D871}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>ProgramLauncher</RootNamespace>
<AssemblyName>ProgramLauncher</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>TestIcon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<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>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="TestIcon.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("ProgramLauncher")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ProgramLauncher")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("948819dd-0cd3-49b2-91e0-8530d1d0d871")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProgramLauncher.Properties
{
/// <summary>
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
/// </summary>
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
// 클래스에서 자동으로 생성되었습니다.
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
// ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProgramLauncher.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
/// 재정의합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProgramLauncher.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]

Some files were not shown because too many files have changed in this diff Show More