Почему существует разница в поведении приложения, созданного в VS 2010 v.s. VS 2012?

Я проверял, меняет ли установка .NET 4.5 на наших машинах сборки выходной IL-образ, сгенерированный VS 2010.

Так как я знаю, что поведение foreach изменилось в .NET 4.5, чтобы избежать проблем из-заДоступ к измененному закрытиюЯ выбрал простое приложение, которое демонстрирует поведение.

  class Program
    {
        private static void Main(string[] args)
        {
            var contents = new List<Func<int>>();
            var s = new StringBuilder();

            int[] values = new int[] { 4, 5, 6 };

            foreach (int value in values)
            {
                contents.Add(() => value);
            }

            for (var k = 0; k < contents.Count; k++)
                s.Append(contents[k]());

            Console.WriteLine(s);
        }

VS 2010 выход: 666

VS 2012 выход: 456

Я создал консольное приложение в VS 2010 и консольное приложение с тем же кодом в VS 2012 (оба предназначались для .NET 4).

Однако оба консольных приложения демонстрировали различное поведение в зависимости от среды IDE, с которой они были созданы. В выводе сборки я проверил, что оба имеют почти одинаковые аргументы сборки. Так что мне было интересно, как конечный исполняемый файл демонстрировал другое поведение? .NET 4.5 - это обновление на месте, поэтому компилятор для обеих IDE должен быть одинаковым.

ПРИМЕЧАНИЕ: я взглянул на связанный вопрос:Разное LINQ Ответ в VS 2010 и VS 2012 но он не ответил на мой вопрос о том, почему поведение исполняемого файла отличается.

РЕДАКТИРОВАТЬ 1: Какmletterle упомянуто, я попытался построить код, используя командную строку в окне вывода VS 2010 в командной строке VS 2010. Полученный результат вел себя так, как если бы он был построен с VS 2012.

РЕДАКТИРОВАТЬ 2:

Я публикую вывод в окне вывода:

VS 2010: Сборка началась 20.12.2012 23:04:56.

CoreClean: создание каталога "obj \ x86 \ Debug \". GenerateTargetFrameworkMonikerAttribute: Пропуск цели «GenerateTargetFrameworkMonikerAttribute», поскольку все выходные файлы обновлены по отношению к входным файлам. CoreCompile:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Csc.exe / noconfig / nowarn: 1701,1702 / nostdlib + / платформа: x86 / errorreport: приглашение / предупреждение: 4 / define: DEBUG; TRACE / ошибка рассылки / предпочитаемое состояние : en-US / highentropyva- / ссылка: "C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Microsoft.CSharp.dll" / ссылка: "C: \ Program Files (x86) ) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll "/ ссылка:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Core.dll "/ reference:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Data.DataSetExtensions.dll "/ reference:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Data.dll "/ ссылка:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.dll "/ ссылка: "C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Xml.dl l "/ reference:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Xml.Linq.dll "/ debug + / debug: full / filealign: 512 / optimize- / out: obj \ x86 \ Debug \ TestConsoleApp.exe / target: exe / utf8output Program.cs Свойства \ AssemblyInfo.cs "C: \ Users \ 105044960 \ AppData \ Local \ Temp.NETFramework, Version = v4.0.AssemblyAttributes.cs "_CopyAppConfigFile: Пропуск цели" _CopyAppConfigFile ", поскольку все выходные файлы обновлены относительно входных файлов. CopyFilesToOutputDirectory: копирование файла из «obj \ x86 \ Debug \ TestConsoleApp.exe» в «bin \ Debug \ TestConsoleApp.exe». TestConsoleApp -> C: \ Users \ 105044960 \ Documents \ Visual Studio 2010 \ Projects \ TestConsoleApp \ TestConsoleApp \ bin \ Debug \ TestConsoleApp.exe Копирование файла из "obj \ x86 \ Debug \ TestConsoleApp.pdb" в "bin \ Debug \ TestConsoleApp" .pdb».

VS 2012:

1> CoreClean: 1> Удаление файла "c: \ users \ 105044960 \ documents \ visual studio 11 \ Projects \ TestConsoleApp \ TestConsoleApp \ bin \ Debug \ TestConsoleApp.exe". 1> Удаление файла "c: \ users \ 105044960 \ documents \ visual studio 11 \ Projects \ TestConsoleApp \ TestConsoleApp \ bin \ Debug \ TestConsoleApp.pdb". 1> Удаление файла "c: \ users \ 105044960 \ documents \ visual studio 11 \ Projects \ TestConsoleApp \ TestConsoleApp \ obj \ Debug \ TestConsoleApp.csprojResolveAssemblyReference.cache". 1> Удаление файла "c: \ users \ 105044960 \ documents \ visual studio 11 \ Projects \ TestConsoleApp \ TestConsoleApp \ obj \ Debug \ TestConsoleApp.exe". 1> Удаление файла "c: \ users \ 105044960 \ documents \ visual studio 11 \ Projects \ TestConsoleApp \ TestConsoleApp \ obj \ Debug \ TestConsoleApp.pdb". 1> GenerateTargetFrameworkMonikerAttribute: 1> Пропуск цели «GenerateTargetFrameworkMonikerAttribute», поскольку все выходные файлы обновлены по отношению к входным файлам. 1> CoreCompile: 1> C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Csc.exe / noconfig / nowarn: 1701,1702,2008 / nostdlib + / платформа: AnyCPU / errorreport: запрос / предупреждение: 4 / define : DEBUG; TRACE / errorendlocation / prefereduilang: en-US / highentropyva- / reference: "C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Microsoft.CSharp.dll" / ссылка: "C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll" / reference: "C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4 .0 \ System.Core.dll "/ ссылка:" C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Data.DataSetExtensions.dll "/ ссылка:" C: \ Программные файлы (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Data.dll "/ ссылка:" C: \ Программные файлы (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.dll "/ reference:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFr amework \ v4.0 \ System.Xml.dll "/ reference:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Xml.Linq.dll "/ debug + / debug : full / filealign: 512 / optimize- /out:obj\Debug\TestConsoleApp.exe / target: exe / utf8output Program.cs Свойства \ AssemblyInfo.cs "C: \ Users \ 105044960 \ AppData \ Local \ Temp.NETFramework, Версия = v4.0.AssemblyAttributes.cs "1> CopyFilesToOutputDirectory: 1> Копирование файла из" obj \ Debug \ TestConsoleApp.exe "в" bin \ Debug \ TestConsoleApp.exe ". 1> TestConsoleApp -> C: \ Users \ 105044960 \ Documents \ Visual Studio 11 \ Projects \ TestConsoleApp \ TestConsoleApp \ bin \ Debug \ TestConsoleApp.exe 1> Копирование файла из "obj \ Debug \ TestConsoleApp.pdb" в "bin \ Debug" \ TestConsoleApp.pdb».

Ответы на вопрос(2)

Ваш ответ на вопрос