9

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.

4
  • How do you compile that without Visual studio? Could you include your build command? Commented Mar 25, 2016 at 9:47
  • Look at this question: stackoverflow.com/questions/31875825/… It's probably the same. Most likely you are running the wrong version (from wrong path) of csc.exe Commented Mar 25, 2016 at 9:49
  • Please note that this is using Command Prompt and .NET Framework 4.6 (NDP461-KB3102436-x86-x64-AllOS-ENU.exe) and not Visual Studio. Commented Mar 25, 2016 at 9:52
  • For those that might be interested, there is the fabulous csscript.net that can help a lot to achieve running C# without Visual Studio. Commented Mar 25, 2016 at 9:56

3 Answers 3

4

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:

Sign up to request clarification or add additional context in comments.

Comments

3

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?

Comments

2

Try to use compilers from these locations:

%ProgramFiles(x86)%\MSBuild\12.0\Bin\ %ProgramFiles(x86)%\MSBuild\12.0\Bin\amd64\ %ProgramFiles(x86)%\MSBuild\14.0\Bin\ %ProgramFiles(x86)%\MSBuild\14.0\Bin\amd64\ 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.