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.
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:
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?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With