Compare commits

...

24 Commits

Author SHA1 Message Date
Alex D. 8daf0d5f84 flat-badges 2018-03-07 21:59:04 +01:00
Alex D. 6c0744e423 Some badges 2018-03-07 21:54:39 +01:00
Alex D. d851e34daf Added a wait for process 2018-03-07 21:43:28 +01:00
Alex D. a1d102ef40 Just a 1.14 for the tag 2018-03-04 14:31:55 +01:00
Alex D. aa271eba81 Removed Refferences 2018-02-17 18:53:13 +01:00
Alex D. 62874e23f7 Some stuff changed 2018-02-17 18:51:12 +01:00
Alex D. e3152a69bd Added functions
>+Easier first setup for new users
>Kept old setup
>Moved stuff around
>-Bugs
2018-02-17 18:41:36 +01:00
Alex a2426cc265
Added stuff 2018-02-17 17:56:17 +01:00
Alex 165e38f915
Update README.md 2018-02-17 17:50:27 +01:00
Alex 04dd54dfab
Added travis build 2018-02-17 17:50:03 +01:00
Alex D. b3401f6308 Added manifest for Travis 2018-02-17 17:41:51 +01:00
Alex D. 9c2b1f31e1 Removed Click-Once bs 2018-02-17 17:19:53 +01:00
Alex 6c3d62022c
Create .travis.yml 2018-02-17 17:02:26 +01:00
Alex D. 68134849b1 Me being useless 2018-02-12 14:59:08 +01:00
Alex D. a7d5eaf66f Made code more readable 2018-02-12 01:23:43 +01:00
Alex D. e65a236b0f Some minor changes
+Able to use multiple configs (First alphabetically will be chosen)
-Shortened first part
2018-02-12 01:16:52 +01:00
Alex D. 9c8c385c2f First setup fix 2018-02-11 21:01:33 +01:00
Alex D. 42f4a62999 Minor Changes
-Removed Unnecessary Libraries
+Config dir chnaged from ./settings.cfg to ./config/settings.cfg
2018-02-11 15:07:05 +01:00
Alex D. 12fa4940dd Added some stuff 2018-02-11 14:47:55 +01:00
Alex D. 591231d434 Fixed Extra Line 2018-02-11 14:34:28 +01:00
Alex D. c68b93e6da More shortening 2018-02-11 14:30:13 +01:00
Alex D. 4dd2912a40 Separation and shortening overall
CHANGED:
> Most lines were separated into Functions, improves overall readablity and code writing.
2018-02-11 14:03:41 +01:00
Alex df99190d55
Merge pull request #5 from casKd-dev/release
Minor Bugfix
2018-02-10 18:50:33 +01:00
Alex D. 7e1380ddd3 Minor Bugfix
I swear this is the last time
2018-02-10 18:47:49 +01:00
7 changed files with 236 additions and 143 deletions

2
.travis.yml Normal file
View File

@ -0,0 +1,2 @@
language: csharp
solution: UnturnedSL.sln

View File

@ -1,10 +1,8 @@
# USL
[![banner.png](https://s14.postimg.org/x2qqyft69/banner.png)](https://postimg.org/image/3nl2pfoml/)
[![GitHub issues](https://img.shields.io/github/issues/casKd-dev/USL.svg?style=for-the-badge)](https://github.com/casKd-dev/USL/issues)
<p align=center><img src="https://s14.postimg.org/x2qqyft69/banner.png"><br>
<img src="https://img.shields.io/travis/casKd-dev/USL/release.svg?style=for-the-badge"> <img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge"> <img src="https://img.shields.io/github/downloads/casKd-dev/USL/total.svg?style=for-the-badge"> <img src="https://img.shields.io/github/languages/top/casKd-dev/USL.svg?style=for-the-badge"> </p>
A Gameserver launcher written in C# .
This project aims to help people not as experienced with Unturned or computers in general.
It is so easy to use in fact, that just pressing enter while having steam installed in the default directory will launch a server without you knowing anything you did.
It is so easy to use in fact, that just leaving the default options while having the Unturned installed in the default directory will launch it!
I mainly work on it in my free time, if you want to push or contribute feel free to contact me!
I mainly work on it in my free time, if you want to push or contribute, feel free to contact me!

View File

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

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
@ -12,16 +8,52 @@ namespace UnturnedSL
{
static void Main(string[] args)
{
string lauversion = "1.12 rewrite";
string lauversion = "1.14";
string title = "USL by casKd running on version " + lauversion;
Console.Title = title;
Console.SetWindowSize(100,20);
/*Console.WriteLine("Currently running from:" + Environment.NewLine + Directory.GetCurrentDirectory() + Environment.NewLine +
"Config exists: " + File.Exists("settings.cfg") + Environment.NewLine); DEBUGGING PURPOSES ONLY*/
if (!File.Exists("settings.cfg")) { /*Checks for new users*/
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Welcome!", Environment.NewLine);
string[] defvalue = {
MkDirIfNotExist("config");
if (Directory.GetFiles("config", "*.cfg").Length == 0) {FirstSetup(); } /*Checks for new users*/
string[] oFiles = Directory.GetFiles("config", "*.cfg");
/*Loads settings from file and checks if all lines are present and valid*/
TextReader settings = new StreamReader(oFiles[0], true);
string name = settings.ReadLine();
string map = settings.ReadLine();
string welcome = settings.ReadLine();
string port = settings.ReadLine();
string data = settings.ReadLine();
string extralo = settings.ReadLine();
string path = settings.ReadLine();
settings.Close();
Validation(name, map, welcome, port, data, extralo, path, out bool valid);
Run(valid, name, map, welcome, port, data, extralo, path);
}
static void Validation(string name, string map, string welcome, string port, string data, string extralo, string path, out bool valid)
/*Validate if all input is correct*/
{
/*Checks if every condition is true*/
bool bNum = int.TryParse(port, out int i);
if (
bNum != true ||
String.IsNullOrWhiteSpace(name) ||
String.IsNullOrWhiteSpace(map) ||
String.IsNullOrWhiteSpace(welcome) ||
String.IsNullOrWhiteSpace(port) ||
String.IsNullOrWhiteSpace(data) ||
String.IsNullOrWhiteSpace(extralo) ||
String.IsNullOrWhiteSpace(path) ||
!File.Exists(path + @"\Unturned.exe")
)
{ valid = true;} else { valid = false;}
}
static void FirstSetup()
/*First setup*/
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Welcome!" + Environment.NewLine + "Do you want to go through the setup? [N/y]" + Environment.NewLine);
string[] defvalue = {
"PEI",
"USL-My server",
"Hey! Welcome to our server!",
@ -29,7 +61,7 @@ namespace UnturnedSL
"Server_Data",
"-perspective both",
@"C:\Program Files\Steam\SteamApps\Common\Unturned" };
string[] question = {
string[] question = {
"Which map would you like to play?",
"What name do you wish your server to be called?",
"What welcome message would you want to have?",
@ -38,12 +70,14 @@ namespace UnturnedSL
"Do you want any other parameters for your server?",
"Where is your Unturned installation located?"
};
/*Asks user to setup their own server, which later saves in a config file*/
string[] setvals = { "map", "name", "welcome", "port", "data", "extralo", "path" };
var loopval = 0;
string[] answ = new string[7];
/*Asks user to setup their own server, which later saves in a config file*/
if (String.Equals(Console.ReadLine(), "y", StringComparison.CurrentCultureIgnoreCase) == true)
{
Console.ForegroundColor = ConsoleColor.Yellow;
string[] setvals = { "map", "name", "welcome", "port", "data", "extralo", "path" };
var loopval = 0;
string[] answ = new string[7];
Console.Clear();
foreach (string val in setvals)
{
while (loopval <= 6)
@ -54,128 +88,101 @@ namespace UnturnedSL
{
answ[loopval] = defvalue[loopval];
loopval++;
} else
}
else
{
loopval++;
}
Console.Clear();
}
}
/*Saves data*/
string map = answ[0];
string name = answ[1];
string welcome = answ[2];
string port = answ[3];
string data = answ[4];
string extralo = answ[5];
string path = answ[6];
Console.Clear();
/*Stores data into a file*/
TextWriter settings = new StreamWriter("settings.cfg", true);
settings.WriteLine(name);
settings.WriteLine(map);
settings.WriteLine(welcome);
settings.WriteLine(port);
settings.WriteLine(data);
settings.WriteLine(extralo);
settings.WriteLine(path);
settings.Close();
Console.ForegroundColor = ConsoleColor.Green;
string launchop = "-nographics -batchmode -name " + "\"" + name + "\"" + " -map " + map + " -welcome " + "\"" + welcome + "\"" + " -port:" + port + " " + extralo + " +secureserver/" + data;
string curdirargs = path + @"\Unturned.exe " + launchop;
if (
String.IsNullOrWhiteSpace(name) ||
String.IsNullOrWhiteSpace(map) ||
String.IsNullOrWhiteSpace(welcome) ||
String.IsNullOrWhiteSpace(port) ||
String.IsNullOrWhiteSpace(data) ||
String.IsNullOrWhiteSpace(extralo) ||
String.IsNullOrWhiteSpace(path) ||
!File.Exists(path + @"\Unturned.exe")
)
} else {
foreach (string val in setvals)
{
/*Shows an error with information to fix it*/
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Oh, noes! Seems like the settings file contains wrong info." + Environment.NewLine +
"Try deleting it or correcting it!" + Environment.NewLine + Environment.NewLine +
"If you still get the problem, report it on GitHub!");
Console.WriteLine(Environment.NewLine + "Your settings:" +
Environment.NewLine + Environment.NewLine + "Server Name:" + "\t" + "\t" + name + Environment.NewLine +
"Running Map:" + "\t" + "\t" + map + Environment.NewLine +
"Welcome Msg:" + "\t" + "\t" + welcome + Environment.NewLine +
"Data folder:" + "\t" + "\t" + data + Environment.NewLine +
"Extra options:" + "\t" + "\t" + extralo + Environment.NewLine +
"Path to Game:" + "\t" + "\t" + path + Environment.NewLine);
Console.Beep(2300, 250);
Console.ReadKey();
Environment.Exit(1);
while (loopval <= 6)
{
answ[loopval] = defvalue[loopval];
loopval++;
}
}
string displaytext =
}
/*Transfers data from array to variables*/
string map = answ[0];
string name = answ[1];
string welcome = answ[2];
string port = answ[3];
string data = answ[4];
string extralo = answ[5];
string path = answ[6];
Console.Clear();
/*Stores data into a file*/
TextWriter settings = new StreamWriter("config/settings.cfg", true);
settings.WriteLine(name);
settings.WriteLine(map);
settings.WriteLine(welcome);
settings.WriteLine(port);
settings.WriteLine(data);
settings.WriteLine(extralo);
settings.WriteLine(path);
settings.Close();
}
static void DisplayText(string name, string map, string welcome, string port, string data, string extralo, string path)
/*Outputs info of the current configuration*/
{
string displaytext =
"Server info:" + Environment.NewLine + Environment.NewLine +
"Server Name:" + "\t" + "\t" + name + Environment.NewLine +
"Running Map:" + "\t" + "\t" + map + Environment.NewLine +
"Welcome Msg:" + "\t" + "\t" + welcome + Environment.NewLine +
"Data folder:" + "\t" + "\t" + data + Environment.NewLine +
"Running port:" + "\t" + "\t" + port + Environment.NewLine +
"Extra options:" + "\t" + "\t" + extralo + Environment.NewLine +
"Path to Game:" + "\t" + "\t" + path + Environment.NewLine;
Console.WriteLine(displaytext);
try { Process.Start(path + @"\Unturned.exe" + launchop);} catch { }
Console.WriteLine(displaytext);
}
static void DebugInfo()
/*Helps at debugging, mostly needed when having problems*/
{
string debugtext =
"Currently running from:" + Environment.NewLine +
Directory.GetCurrentDirectory() + Environment.NewLine +
"Config exists: " + File.Exists("config/settings.cfg") + Environment.NewLine;
Console.WriteLine(debugtext);
}
static void Run(bool valid, string name, string map, string welcome, string port, string data, string extralo, string path)
{
if (valid == true)
/*If conditions have problems, output errors and variables, else, start the server*/
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Oh, noes! Seems like the settings file contains wrong info." + Environment.NewLine +
"Try deleting it or correcting it!" + Environment.NewLine + Environment.NewLine +
"If you still get the problem, report it on GitHub!");
DisplayText(name, map, welcome, data, port, extralo, path);
Console.Beep(2300, 250);
Console.WriteLine(Environment.NewLine + "Press any key to exit...");
Console.ReadKey();
} else {
TextReader settings = new StreamReader("settings.cfg", true);
string name = settings.ReadLine();
string map = settings.ReadLine();
string welcome = settings.ReadLine();
string port = settings.ReadLine();
string data = settings.ReadLine();
string extralo = settings.ReadLine();
string path = settings.ReadLine();
settings.Close(); /*Loads settings from file and checks if all lines are present and valid*/
if (
String.IsNullOrWhiteSpace(name) ||
String.IsNullOrWhiteSpace(map) ||
String.IsNullOrWhiteSpace(welcome) ||
String.IsNullOrWhiteSpace(port) ||
String.IsNullOrWhiteSpace(data) ||
String.IsNullOrWhiteSpace(extralo) ||
String.IsNullOrWhiteSpace(path) ||
!File.Exists(path + @"\Unturned.exe")
)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Oh, noes! Seems like the settings file contains wrong info." + Environment.NewLine +
"Try deleting it or correcting it!" + Environment.NewLine + Environment.NewLine +
"If you still get the problem, report it on GitHub!" );
Console.WriteLine(Environment.NewLine + "Your settings:" +
Environment.NewLine + Environment.NewLine + "Server Name:" + "\t" + "\t" + name + Environment.NewLine +
"Running Map:" + "\t" + "\t" + map + Environment.NewLine +
"Welcome Msg:" + "\t" + "\t" + welcome + Environment.NewLine +
"Data folder:" + "\t" + "\t" + data + Environment.NewLine +
"Extra options:" + "\t" + "\t" + extralo + Environment.NewLine +
"Path to Game:" + "\t" + "\t" + path + Environment.NewLine);
Console.Beep(2300, 250);
Console.ReadKey();
Environment.Exit(1);
} else {
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Welcome back!" + Environment.NewLine);
string displaytext =
"Server info:" + Environment.NewLine + Environment.NewLine +
"Server Name:" + "\t" + "\t" + name + Environment.NewLine +
"Running Map:" + "\t" + "\t" + map + Environment.NewLine +
"Welcome Msg:" + "\t" + "\t" + welcome + Environment.NewLine +
"Data folder:" + "\t" + "\t" + data + Environment.NewLine +
"Extra options:" + "\t" + "\t" + extralo + Environment.NewLine +
"Path to Game:" + "\t" + "\t" + path + Environment.NewLine;
Console.WriteLine(displaytext);
string launchop = "-nographics -batchmode -name " + "\"" + name + "\"" + " -map " + map + " -welcome " + "\"" + welcome + "\"" + " -port:" + port + " " + extralo + " +secureserver/" + data;
try { Process.Start(path + @"\Unturned.exe ", launchop);} catch { }
Console.ReadKey();
Environment.Exit(0);
}
}
else
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Welcome!" + Environment.NewLine);
DisplayText(name, map, welcome, data, port, extralo, path);
string launchop = "-nographics -batchmode -name " + "\"" + name + "\"" + " -map " + map + " -welcome " + "\"" + welcome + "\"" + " -port:" + port + " " + extralo + " +secureserver/" + data;
var proc = Process.Start(path + @"\Unturned.exe ", launchop);
proc.WaitForExit(600000);
}
Environment.Exit(0);
}
static void MkDirIfNotExist(string name)
/*This method name explains itself*/
{
if (Directory.Exists(name)) { }
else { Directory.CreateDirectory(name); }
}
}
}

View File

@ -6,11 +6,11 @@ using System.Runtime.InteropServices;
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("UnturnedSL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyDescription("An Unturned server Launcher")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UnturnedSL")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2018")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.13")]
[assembly: AssemblyFileVersion("1.13")]

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on and is
is designed to work with. Uncomment the appropriate elements and Windows will
automatically selected the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

View File

@ -12,18 +12,18 @@
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>D:\Projects\Unturned SL\</PublishUrl>
<PublishUrl>D:\Projects\ServerLauncher\Pubish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateMode>Background</UpdateMode>
<UpdateInterval>1</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>5</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.14.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
@ -37,6 +37,9 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>false</RunCodeAnalysis>
<CodeAnalysisIgnoreGeneratedCode>false</CodeAnalysisIgnoreGeneratedCode>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@ -51,17 +54,28 @@
<ManifestCertificateThumbprint>38F8CCBCA52BFC6A38DA55C985EAB30042818FD1</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>UnturnedSL_TemporaryKey.pfx</ManifestKeyFile>
<ManifestKeyFile>
</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>true</GenerateManifests>
<GenerateManifests>false</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
<SignManifests>false</SignManifests>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>logo.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>false</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup />
<PropertyGroup>
<StartupObject>UnturnedSL.Launcher</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
@ -76,6 +90,7 @@
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="Properties\app.manifest" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
@ -92,6 +107,5 @@
<ItemGroup>
<Content Include="logo.ico" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>