Cosmos: Missing plug

Created on 19 Feb 2017  路  46Comments  路  Source: CosmosOS/Cosmos

How do I fix a missing plug issue? I am trying to do:

        {
                var dir = System.IO.Directory.GetCurrentDirectory();
                Console.WriteLine(dir);
                Console.WriteLine("");
                var contents = System.IO.Directory.GetFileSystemEntries(dir);
                Console.WriteLine(contents);
            }

Line 5 of that little snippet seems to be the problem (var contents = System.IO.Directory.GetFileSystemEntries(dir);).

Build output:

1>------ Build started: Project: StegOS, Configuration: Debug x86 ------
1> StegOS -> C:\Users\Ian\documents\visual studio 2015\Projects\StegOS\StegOS\bin\Debug\StegOS.dll
2>------ Build started: Project: StegOSBoot, Configuration: Debug x86 ------
2> Invoking il2cpu.exe "DebugEnabled:True" "StackCorruptionDetectionEnabled:False" "StackCorruptionDetectionLevel:" "DebugMode:Source" "TraceAssemblies:" "DebugCom:1" "UseNAsm:True" "OutputFilename:C:\Users\Ian\documents\visual studio 2015\Projects\StegOS\StegOS\bin\Debug\StegOSBoot.asm" "EnableLogging:True" "EmitDebugSymbols:True" "IgnoreDebugStubAttribute:False" "References:C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.Core.Plugs.dll" "References:C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.Debug.Kernel.Plugs.dll" "References:C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.System.Plugs.dll" "References:C:\Users\Ian\documents\visual studio 2015\Projects\StegOS\StegOS\bin\Debug\StegOS.dll" "References:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.2\System.Core.dll"
2>C:\Program Files (x86)\MSBuild\Cosmos\Cosmos.targets(34,5): error : Error occurred while invoking IL2CPU.
2> Executing command line "C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\IL2CPU.exe" "DebugEnabled:True" "StackCorruptionDetectionEnabled:False" "StackCorruptionDetectionLevel:" "DebugMode:Source" "TraceAssemblies:" "DebugCom:1" "UseNAsm:True" "OutputFilename:C:\Users\Ian\documents\visual studio 2015\Projects\StegOS\StegOS\bin\Debug\StegOSBoot.asm" "EnableLogging:True" "EmitDebugSymbols:True" "IgnoreDebugStubAttribute:False" "References:C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.Core.Plugs.dll" "References:C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.Debug.Kernel.Plugs.dll" "References:C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.System.Plugs.dll" "References:C:\Users\Ian\documents\visual studio 2015\Projects\StegOS\StegOS\bin\Debug\StegOS.dll" "References:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.2\System.Core.dll"
2> Working directory = 'C:\Users\Ian\documents\visual studio 2015\Projects\StegOS\StegOS\bin\Debug\'
2> Loaded : DebugEnabled
2> Loaded : StackCorruptionDetectionEnabled
2> Loaded : DebugMode
2> Loaded : StackCorruptionDetectionLevel
2> Loaded : TraceAssemblies
2> Loaded : DebugCom
2> Loaded : UseNAsm
2> Loaded : OutputFilename
2> Loaded : EnableLogging
2> Loaded : EmitDebugSymbols
2> Loaded : IgnoreDebugStubAttribute
2> Loaded : References
2> Executing IL2CPU on assembly
2> Error: Exception: System.Exception: Native code encountered, plug required. Please see https://github.com/CosmosOS/Cosmos/wiki/Plugs). System.Int32 System.Threading.Thread.get_ManagedThreadId().
2> Called from :
2> System.IO.Iterator1[System.String]::Void .ctor() 2> System.IO.FileSystemEnumerableIterator1[System.String]::Void .ctor(System.String, System.String, System.String, System.IO.SearchOption, System.IO.SearchResultHandler1[System.String], Boolean) 2> System.IO.FileSystemEnumerableFactory::System.Collections.Generic.IEnumerable1[System.String] CreateFileNameIterator(System.String, System.String, System.String, Boolean, Boolean, System.IO.SearchOption, Boolean)
2> System.IO.Directory::System.String[] InternalGetFileDirectoryNames(System.String, System.String, System.String, Boolean, Boolean, System.IO.SearchOption, Boolean)
2> System.IO.Directory::System.String[] InternalGetFileSystemEntries(System.String, System.String, System.IO.SearchOption)
2> System.IO.Directory::System.String[] GetFileSystemEntries(System.String)
2> StegOS.Kernel::Void Run()
2> Cosmos.System.Kernel::Void Run()
2> at Cosmos.IL2CPU.ILScanner.ScanMethod(MethodBase aMethod, Boolean aIsPlug, String sourceItem) in C:\Users\Ian\Downloads\Cosmos\Cosmos\source\Cosmos.IL2CPU\ILScanner.cs:line 522
2> at Cosmos.IL2CPU.ILScanner.ScanQueue() in C:\Users\Ian\Downloads\Cosmos\Cosmos\source\Cosmos.IL2CPU\ILScanner.cs:line 663
2> at Cosmos.IL2CPU.ILScanner.Execute(MethodBase aStartMethod) in C:\Users\Ian\Downloads\Cosmos\Cosmos\source\Cosmos.IL2CPU\ILScanner.cs:line 243
2> at Cosmos.IL2CPU.CompilerEngine.Execute() in C:\Users\Ian\Downloads\Cosmos\Cosmos\source\Cosmos.IL2CPU\CompilerEngine.cs:line 252
2> Loaded assemblies:
2> C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\IL2CPU.exe
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.IL2CPU.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Build.Common.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Debug.Common.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Assembler.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.System.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.Core.Plugs.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Common.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.Debug.Kernel.Plugs.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.IL2CPU.Plugs.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Kernel\Cosmos.System.Plugs.dll
2> C:\Users\Ian\documents\visual studio 2015\Projects\StegOS\StegOS\bin\Debug\StegOS.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Mono.Cecil.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\System.Data.SQLite.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\DapperExtensions.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\SQLinq.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\XSC.exe
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Debug.DebugStub.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Core.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Debug.Kernel.dll
2> C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.HAL.dll
2> C:\Users\Ian\AppData\Roaming\Cosmos User Kit\Build\IL2CPU\Cosmos.Core.Memory.dll
2> Errorred
2> IL2CPU invoked with DebugMode='Source', DebugEnabled='True',StackCorruptionDetectionLevel='{NULL}', TraceAssemblies='{NULL}', IgnoreDebugStub='False'
2> IL2CPU task took 00:00:01.8876636
2>Done building project "StegOSBoot.Cosmos" -- FAILED.
2>
========== Build: 1 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Bug Question

All 46 comments

Do you really need that plug? When the netcore work is finished we will review plugs and big part of System.IO will be plugged.
If you need the plug I can help you.

Is there an alternate way of doing what I want?

You can try using this:

var contents = mVFS.GetDirectoryListing(dir);

mVFS doesn't exist in the current context

mVFS is the variable that you use as VFS.

Where do I declare it?

You initialized the VFS right?

Yeah:

var fs = new Sys.FileSystem.CosmosVFS(); Sys.FileSystem.VFS.VFSManager.RegisterVFS(fs);

Make that fs a variable of the Kernel class and use fs instead of mVFS.

How do I do that?

public class Kernel : Sys.Kernel
{
    private VFSBase mVFS;

    protected override void BeforeRun()
    {
        mVFS = new Sys.FileSystem.CosmosVFS();
        Sys.FileSystem.VFS.VFSManager.RegisterVFS(mVFS);
    }

    protected override void Run()
    {
        // your code
    }
}

I am getting the error:

Field 'Kernel.fs' is never assigned to, and will always have its default value null

and when I run the command 'dir' in my OS, it just crashes.

Instead of fs use mVFS, or replace mVFS in my sample code with fs.

These pop up after it crashes:

image

image

Are you understanding what you are doing? You get the null reference exception because you are using a variable that was not initialized. This variable is the VFS variable, which can be fs or mVFS, you choose.

No, I have no idea what I am doing... And I am declaring mVFS.

Then don't declare fs, and use mVFS when you want to call a VFS method.

I am. Did you see the pictures I uploaded?

Can you paste your code here? That way I can fix it for you.

`using System;
using System.Collections.Generic;
using System.Text;
using Sys = Cosmos.System;
using System.IO.Compression;
using Cosmos.System.FileSystem.VFS;

namespace StegOS
{
public class Kernel : Sys.Kernel
{
private VFSBase mVFS;

    protected override void BeforeRun()
    {
        PrintDebug("Create file system..");
        var mVFS = new Sys.FileSystem.CosmosVFS();
        Sys.FileSystem.VFS.VFSManager.RegisterVFS(mVFS);

        PrintDebug("Check if username and password files exist.");
        if (System.IO.File.Exists("0:\\login\\user_nme.txt") && System.IO.File.Exists("0:\\login\\pass_wrd.txt"))
        {
            PrintDebug("Found.");
        }
        else if (System.IO.Directory.Exists("0:\\login\\"))
        {
            PrintDebug("Username and password file not found.");
            PrintDebug("0:\\ found.");
            PrintDebug("Create username file.");
            System.IO.File.Create("0:\\login\\user_nme.txt");
            PrintDebug("Write to username file.");
            System.IO.File.WriteAllText("0:\\login\\user_nme.txt", "StegOS");
            PrintDebug("Create password file.");
            System.IO.File.Create("0:\\login\\user_nme.txt");
            PrintDebug("Write to password file.");
            System.IO.File.WriteAllText("0:\\login\\pass_wrd.txt", "coffee");
        }
        else
        {
            PrintDebug("0:\\ not found.");
            PrintDebug("Creating directory.");
            System.IO.Directory.CreateDirectory("0:\\login");
            PrintDebug("Create username file.");
            System.IO.File.Create("0:\\login\\user_nme.txt");
            PrintDebug("Write to username file.");
            System.IO.File.WriteAllText("0:\\login\\user_nme.txt", "StegOS");
            PrintDebug("Create password file.");
            System.IO.File.Create("0:\\login\\user_nme.txt");
            PrintDebug("Write to password file.");
            System.IO.File.WriteAllText("0:\\login\\pass_wrd.txt", "coffee");
        }
        PrintDebug("Set version number.");
        var version = "1.1.3.0";
        PrintDebug("Clear screen.");
        Console.Clear();
        PrintDebug("Write os version info.");
        Console.WriteLine("StegOS " + version + " Coffee booted successfully. Powered by Cosmos.");
        Console.WriteLine();
    }

    protected override void Run()
    {
        PrintDebug("Start of Run().");
        var resetlogin = "###RESETLOGININFORMATION!###";
        //Login
        PrintDebug("Set login to false.");
        var loggedin = false;
        PrintDebug("Read the username file.");
        var user_nme = System.IO.File.ReadAllText("0:\\login\\user_nme.txt");
        PrintDebug("Read the password file.");
        var pass_wrd = System.IO.File.ReadAllText("0:\\login\\pass_wrd.txt");
        PrintDebug(user_nme);
        PrintDebug(pass_wrd);
        if (loggedin == false)
        {
            Console.WriteLine("Please log in to continue.");
            Console.Write("Username: ");
            var UN = Console.ReadLine();
            Console.Write("Password: ");

            ConsoleKeyInfo key;
            string PW = "";
            do
            {
                key = Console.ReadKey(true);
                if (key.Key != ConsoleKey.Backspace && key.Key != ConsoleKey.Enter)
                {
                    PW += key.KeyChar;
                    Console.Write("*");
                }
                else
                {
                    if (key.Key == ConsoleKey.Backspace && PW.Length > 0)
                    {
                        PW = PW.Substring(0, (PW.Length - 1));
                        Console.Write("\b \b");
                    }
                }
            }
            while (key.Key != ConsoleKey.Enter);


            //var PW = Console.ReadLine();
            if (PW == pass_wrd && UN == user_nme)
            {
                Console.WriteLine("Logging in...");
                loggedin = true;
                Console.Clear();
                Console.WriteLine("Logged in successfully.");
                Console.WriteLine();
            }
            else if (PW == resetlogin && UN == resetlogin)
            {
                System.IO.File.Delete("0:\\login\\user_nme.txt");
                System.IO.File.Delete("0:\\login\\pass_wrd.txt");
                Sys.Power.Reboot();
            }
            else
            {
                Console.WriteLine("Logging in...");
                loggedin = false;
                Console.WriteLine("Log in failed. Try again");
            }
        }
        while (loggedin == true)
        {
            System.IO.Directory.SetCurrentDirectory("0:\\");
            Console.Write(user_nme + "@StegOS: ");
            var get_input = Console.ReadLine();
            var input = get_input.ToUpper();

            if (input == "SHUTDOWN")
            {
                Console.WriteLine("It is safe to shutdown. Press the power button to shutdown.");
                Console.WriteLine();
            }
            else if (input == "LOG OFF")
            {
                Console.WriteLine("Logging off... Please wait.");
                Console.Clear();
                loggedin = false;
            }
            else if (input == "CLEAR")
            {
                Console.Clear();
            }
            else if (input == "REBOOT")
            {
                Sys.Power.Reboot();
            }
            else if (input == "ABOUT")
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("");
                Console.WriteLine(" ###     #####   #####    ###         ###     ### ");
                Console.WriteLine("#   #      #     #       #   #       #   #   #   #");
                Console.WriteLine("#          #     #       #           #   #   #    ");
                Console.WriteLine(" ###       #     ####    #           #   #    ### ");
                Console.WriteLine("    #      #     #       # ###       #   #       #");
                Console.WriteLine("#   #      #     #       #   #       #   #   #   #");
                Console.WriteLine(" ###       #     #####    ####        ###     ### ");
                Console.WriteLine("");
                Console.WriteLine("");
                Console.WriteLine("   ###      ###    #####   #####   #####   #####");
                Console.WriteLine("  #   #    #   #   #       #       #       #    ");
                Console.WriteLine("  #        #   #   #       #       #       #    ");
                Console.WriteLine("  #        #   #   ####    ####    ####    #### ");
                Console.WriteLine("  #        #   #   #       #       #       #    ");
                Console.WriteLine("  #   #    #   #   #       #       #       #    ");
                Console.WriteLine("   ###      ###    #       #       #####   #####");
                Console.WriteLine("");
                Console.WriteLine("Powered by Cosmos.");
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("");
            }
            else if (input == "HELP")
            {
                Console.WriteLine();
                Console.WriteLine("ABOUT             About StegOS.");
                Console.WriteLine("CHANGE LOGIN      Change your login information.");
                Console.WriteLine("CLEAR             Clear the screen.");
                Console.WriteLine("DIR               Show files and folders in current directory.");
                Console.WriteLine("HELP              Display this help screen.");
                Console.WriteLine("LOG OFF           Log out of StegOS.");
                Console.WriteLine("SHUTDOWN          Check is system is safe to shutdown.");
                Console.WriteLine("REBOOT            Reboot StegOS.");
                Console.WriteLine();
            }
            else if (input == "CHANGE LOGIN")
            {
                Console.Write("Current username: ");
                var old_usrnme = Console.ReadLine();
                if (old_usrnme == user_nme)
                {

                }
                else
                {
                    Console.Write("User not found.");
                    break;
                }
                Console.Write("New username: ");
                var new_usrnme = Console.ReadLine();
                Console.Write("Old password: ");
                var old_passwrd = Console.ReadLine();
                if (old_passwrd == pass_wrd)
                {

                }
                else
                {
                    Console.Write("Incorrect password.");
                    break;
                }
                Console.Write("New password: ");
                var conf = Console.ReadLine();
                Console.Write("Confirm password: ");
                var conf2 = Console.ReadLine();
                if (conf2 == conf)
                {
                    System.IO.File.Delete("0:\\login\\pass_wrd.txt");
                    System.IO.File.Delete("0:\\login\\user_nme.txt");
                    System.IO.File.Create("0:\\login\\user_nme.txt");
                    System.IO.File.Create("0:\\login\\pass_wrd.txt");
                    System.IO.File.WriteAllText("0:\\login\\user_nme.txt", new_usrnme);
                    System.IO.File.WriteAllText("0:\\login\\pass_wrd.txt", conf);
                    Console.WriteLine("");
                    PrintDebug("Read the username file.");
                    var new_user_nme = System.IO.File.ReadAllText("0:\\login\\user_nme.txt");
                    PrintDebug("Read the password file.");
                    var new_pass_wrd = System.IO.File.ReadAllText("0:\\login\\pass_wrd.txt");
                    Console.WriteLine("Your new username is: " + new_user_nme);
                    Console.WriteLine("Your new password is: " + new_pass_wrd);

                }
                else
                {
                    Console.Write("Passwords don't match.");

                }
            }
            else if (input == "###RESETLOGININFORMATION!###")
            {
                System.IO.File.Delete("0:\\login\\user_nme.txt");
                System.IO.File.Delete("0:\\login\\pass_wrd.txt");
                Sys.Power.Reboot();
            }
            else if (input == "DIR")
            {
                String dir = System.IO.Directory.GetCurrentDirectory();
                Console.WriteLine(dir);
                Console.WriteLine("");
                //var contents = System.IO.Directory.GetFileSystemEntries(dir);
                var contents = mVFS.GetDirectoryListing(dir);
                Console.WriteLine(contents);
            }
            else
            {
                Console.WriteLine("'" + input + "' is not a valid command. Try HELP for a list of commands.");
                Console.WriteLine();
            }
        }
    }
}

}
`

Instead of var mVFS = new Sys.FileSystem.CosmosVFS(); write mVFS = new Sys.FileSystem.CosmosVFS();

Ok, that seems to have fixed the message boxes and the null value but it still crashes. Just before it does it prints something to the console but it is too quick for me to see and screenshot.

I added breakpoints and it seems to crash at:

var contents = mVFS.GetDirectoryListing(dir);

and nothing is printing at:

Console.WriteLine(dir);

Instead of Console.WriteLine(contents); write:

foreach (var xDir in contents)
{
    Console.WriteLine(dir.mName);
}

'string' does not contain a definition for 'mName' and no extension method 'mName' accepting a first argument of type 'string' could be found

Instead of dir write xDir

Still crashes

Comment line by line the lines that you think that are causing the crash and see what line is causing it.

` else if (input == "DIR")
{
String dir = System.IO.Directory.GetCurrentDirectory();
Console.WriteLine(dir);
Console.WriteLine("");
//var contents = System.IO.Directory.GetFileSystemEntries(dir);
var contents = mVFS.GetDirectoryListing(dir);
//Console.WriteLine(contents);

                foreach (var xDir in contents)
                {
                    //Console.WriteLine(dir.mName);
                    Console.WriteLine(xDir.mName);
                }
            }`

var contents = mVFS.GetDirectoryListing(dir); is crashing it.

Make sure that dir is a valid directory.

It is.

At the start of Run(), I set the current directory with:

System.IO.Directory.SetCurrentDirectory("0:\\");

then print it to the debug window with:

PrintDebug(System.IO.Directory.GetCurrentDirectory());

and it prints nothing.

Any solution for this?

Directory.SetCurrentDirectory and Directory.GetCurrentDirectory aren't working correctly, this issue will be reviewed when the netcore work is finished. As a workaround, you can use a variable to store the current directory path.

I think there is a current directory field in the VFS or VFSManager. You can inherit from CosmosVFS and add your own current directory tracking.

I couldn't find it. I think I'll do what @jp2masa suggested with the variable.

This is a bit off topic but how do I shutdown my OS safely? Cosmos.Sys.Deboot.ShutDown(); doesnt work.

You can't shutdown at the moment, see #542.

@IanSteg , just freeze the os and say something like "you can now shutdown your computer":
void shutdown() { Console.WriteLine("you can now shutdown your computer"); while(true) { Console.ReadKey(true); } }

Thanks, works well.

The correct way is to call kernel.Stop() the effect is the same (a freeze) but at least it will work in future when ACPI will be implemented.

@IanSteg see https://github.com/CosmosOS/Cosmos/pull/633 to shutdown correctly your Steg Os !

@valentinbreiz Whats the command?

You have to implement Shutdown method when it will be finished (now it works but some correctives must be fixed) to your Cosmos Project folder and run the Devkit (install-VS2015.bat).

How do you implement the Shutdown method?

Download that : https://github.com/valentinbreiz/Cosmos/tree/patch-3
It's already implemented you just have to run the install-VS2015.bat !

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ArtyIF picture ArtyIF  路  9Comments

geomtech picture geomtech  路  6Comments

365Tito picture 365Tito  路  11Comments

artizzq picture artizzq  路  9Comments

Vardan2009 picture Vardan2009  路  11Comments