я создаю CSharpCodeProvider
так:Как сделать CSharpCodeProvider целевой .NET 4.5.0 вместо .NET 4.6.2?
CSharpCodeProvider codeProvider = new CSharpCodeProvider(new Dictionary<string, string>{{ "CompilerVersion", "v4.0" }});
CompilerParameters compileParameters = new CompilerParameters(refs.ToArray(), newFile, debugBuild) { WarningLevel = 4 };
У меня есть сценарий, который создает объект WPF FormattedText
любит так:
FormattedText volumeText = new FormattedText(volumeString, Core.Globals.GeneralOptions.CurrentCulture, FlowDirection.LeftToRight, typeFace, SuperDom.Font.Size, ForeColor) { MaxLineCount = 1, MaxTextWidth = renderWidth - 6, Trimming = TextTrimming.CharacterEllipsis };
.NET 4.6.2 добавлен новый конструктор для определения DPI масштабирования и текущий метод, который мы используем, устарел. Однако наше приложение предназначено для .NET 4.5.0, и это все, что мы поддерживаем. Тем не менее, при компиляции моего кода, я все еще получаю следующее предупреждение:
Warning: 'System.Windows.Media.FormattedText.FormattedText(string, System.Globalization.CultureInfo, System.Windows.FlowDirection, System.Windows.Media.Typeface, double, System.Windows.Media.Brush)' is obsolete: 'Use the PixelsPerDip override'
Там нет веских случай использования (для нас), где новый конструктор является действительным, а на самом деле то, что я бы ожидать, если бы кто-то попытался использовать он должен получить ошибку компиляции из-за неправильной подписи этого метода для 4.5.
Есть ли способ избежать этих предупреждений? Раньше мы не указали CompilerVersion
для поставщика кода, но добавление его не помогло и на основании того, что я видел в других вопросах здесь, v4.0 является единственной допустимой версией, используемой для моего случая в любом случае. Может ли другой предупредительный уровень избежать этого?
[Этот вопрос] (http://stackoverflow.com/questions/20018979/how-can-i-target-a-specific-language-version-using-codedom) подробно описывает, как настроить таргетинг на другую структуру с помощью CodeDom. Не знаю, применяется ли тот же подход сегодня и с каркасом 4.5, но это ваша проблема, а не версия компилятора. –
Hmya, вы на самом деле не нацелены на 4.5. Вы можете преднамеренно настроить старую версию .NET на своем dev-машине благодаря «пакетам разработчиков», которые устанавливает VS. Не работает для System.CodeDom, ваш клиент не будет иметь их доступными. Вы получаете любую версию, установленную на машине клиента, это непредсказуемо. На самом деле проигрывает FormattedText, вы не можете зависеть от перегрузок, которые принимают аргумент * pixelsPerDip *. Нет чистого исправления, вам придется есть это предупреждение. –
@HansPassant Мои цели проекта .NET 4.5. Если я попытаюсь использовать перегрузку, введенную в .NET 4.6.2 в моем собственном коде, я получаю ошибку компиляции. Это то, что я хочу сделать при компиляции скрипта, вместо того, чтобы вызывать устаревшее предупреждение выше. – WasGoodDone