Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# 6.0 without Visual Studio

Tags:

c#

How to use C# 6.0 features without Visual Studio?

The following C# 6.0 Code does not work:

using static System.Console;

class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
    } 
}

Here's the Error:

>csc CS6.cs
Microsoft (R) Visual C# Compiler version 4.6.1055.0
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

CS6.cs(1,7): error CS1041: Identifier expected; 'static' is a keyword
CS6.cs(1,14): error CS1518: Expected class, delegate, enum, interface, or struct

Here's the C# Code to determine which .NET Framework versions are installed:

using System;
using Microsoft.Win32;

class RegistryVersion
{   
    private static void GetVersionFromRegistry()
    {
         // Opens the registry key for the .NET Framework entry.
            using (RegistryKey ndpKey = 
                RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").
                OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
            {
                // As an alternative, if you know the computers you will query are running .NET Framework 4.5 
                // or later, you can use:
                // using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
                // RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
            foreach (string versionKeyName in ndpKey.GetSubKeyNames())
            {
                if (versionKeyName.StartsWith("v"))
                {

                    RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
                    string name = (string)versionKey.GetValue("Version", "");
                    string sp = versionKey.GetValue("SP", "").ToString();
                    string install = versionKey.GetValue("Install", "").ToString();
                    if (install == "") //no install info, must be later.
                        Console.WriteLine(versionKeyName + "  " + name);
                    else
                    {
                        if (sp != "" && install == "1")
                        {
                            Console.WriteLine(versionKeyName + "  " + name + "  SP" + sp);
                        }

                    }
                    if (name != "")
                    {
                        continue;
                    }
                    foreach (string subKeyName in versionKey.GetSubKeyNames())
                    {
                        RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                        name = (string)subKey.GetValue("Version", "");
                        if (name != "")
                            sp = subKey.GetValue("SP", "").ToString();
                        install = subKey.GetValue("Install", "").ToString();
                        if (install == "") //no install info, must be later.
                            Console.WriteLine(versionKeyName + "  " + name);
                        else
                        {
                            if (sp != "" && install == "1")
                            {
                                Console.WriteLine("  " + subKeyName + "  " + name + "  SP" + sp);
                            }
                            else if (install == "1")
                            {
                                Console.WriteLine("  " + subKeyName + "  " + name);
                            }
                        }
                    }
                }
            }
        }
    } 

    static void Main()
    {
        GetVersionFromRegistry();
    }
}

Here's the output for the C# Code to determine which .NET Framework versions are installed:

>csc FrameworkVersion.cs
Microsoft (R) Visual C# Compiler version 4.6.1055.0
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

>FrameworkVersion.exe
v2.0.50727  2.0.50727.4927  SP2
v3.0  3.0.30729.4926  SP2
v3.5  3.5.30729.4926  SP1
v4
  Client  4.6.01055
  Full  4.6.01055
v4.0
  Client  4.0.0.0

Please note that this question is about C# 6.0 without any Visual Studio/IDE.

like image 626
Impavid Avatar asked Mar 25 '16 09:03

Impavid


2 Answers

C# 6 is not build towards a specific framework version, it all depends on the compiler. If you use the C# 6 compiler, you can compile that snippet.

Make sure you have installed the latest MSBuild version on your build machine (they moved the compiler from the framework folder). That installation contains the latest compiler. (Clients don't need to run the latest framework version if your project is specified to build for a lower framework version)

You can also install the compiler NuGet package using the NuGet command line.

Useful resources:

  • MSBuild for C# 6, which allows you to compile entire projects and solutions at once.
  • NuGet packages containing the compiler
like image 124
Patrick Hofman Avatar answered Oct 27 '22 04:10

Patrick Hofman


Your problem is with the compiler

>csc CS6.cs
Microsoft (R) Visual C# Compiler version -->4.6.1055.0<--
for Microsoft (R) .NET Framework 4.5

You are using the 4.6 compiler when you need the 6 compiler.

C# 6 compiler is installed with Visual Studio, however looks like someone managed to install it regardless of IDE

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9959d4c1-16fe-45bc-9535-7b0775d26e9a/please-confirm-c-60-compiler-is-not-installed-with-net-framework-46-if-so-location?forum=csharpgeneral

http://www.microsoft.com/en-us/download/details.aspx?id=48159 Microsoft Build Tools 2015 It says it only depends on .NET Framework 4.5... I guess the Roslyn-based C# 6.0 compiler can target .NET Framework 4.5? What is this thing's relationship to the .NET Framework 4.6 Targeting pack? Will that install this? Or are both needed? And like I said, can I compile using C# 6 language features in VS2013?
like image 22
usr-local-ΕΨΗΕΛΩΝ Avatar answered Oct 27 '22 03:10

usr-local-ΕΨΗΕΛΩΝ