I have written an application in Visual Studio 2015 that uses C# 6.0 features and targets .NET 4.5.2. When I build it using Microsoft Build Tools 2015, which is what is done by our TeamCity server, the resulting bin folder also contains a copy of mscorlib.dll
. The problem here is that the mscorlib.dll
being copied is the .NET 4.6 DLL, which causes problems at runtime.
I have replaced my call to string.Format()
with the new string interpolation syntax to work around the problem. That, however, shoves the underlying problem under the carpet instead of addressing it: Why is the .NET 4.6 DLL included in my build and how can I force the 4.5.2 DLL to be included in its place?
If you are interested in the runtime problem this caused for me, it caused my:
string.Format(CultureInfo.InvariantCulture, "{0}='{1}'", "key", "value")
To be interpreted as (link -- which only exists in .NET 4.6):
System.String System.String.Format(System.IFormatProvider, System.String, System.Object, System.Object)
Instead of (link):
System.String System.String.Format(System.IFormatProvider, System.String, params System.Object[])