I have a project that targets older versions of the .NET framework (.NET 4.5.2). I installed Visual Studio 2015 (and therefore .NET 4.6 on my machine). I noticed that if I use C# language features released in .NET 4.6/C# 6, it still compiles. If my project's target framework is < .NET 4.6, shouldn't this not compile:
public string MyExpressionBodyProperty => "1";
//auto properties are new in C# 6
public string MyAutoProperty { get; } = "1";
private static void MethodThatUsesNameOf(string filename)
{
if (filename == null)
{
//nameof was released in C# 6
throw new ArgumentException("The file does not exist.", nameof(filename));
}
}
How can I ensure I'm only using .NET language features that work with the framework version I'm targeting?
The .NET Framework version and the C# language version are different things. The C# 6 language features
public string MyAutoProperty { get; } = "1";
nameof(filename)
can be compiled by VS 2015 into code that targets earlier frameworks.
How can I ensure I'm only using .NET language features that work with the framework version I'm targeting?
If you try to use a .NET 4.6 Framework feature, you will get an appropriate compiler error if you are targeting an earlier framework.
Would I be able to deploy this code to machine which did not have .NET 4.6?
Yes, you would. As long as the deployment machine has a framework compatible with the one you target in VS2015.
There are C# 6 features and .NET 4.6 features.
nameof
is a C# 6 feature so only needs to be running on a newer compiler but can still use the older .NET framework.
An example of a feature that requires .NET 4.6 is the following:
public void Foo(IReadOnlyCollection<string> input)
{
}
public void Main(string[] args)
{
Foo(new Stack<string>());
}
In .NET 4.6 Stack
implements IReadOnlyCollection
but in previous versions it does not. The above code would fail to compile if you selected .NET 4.5.2 as your target platform.
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