【发布时间】:2016-10-28 15:07:09
【问题描述】:
我像这样创建一个CSharpCodeProvider:
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 是唯一适用于我的案例的有效版本。不同的警告级别会避免这种情况吗?
【问题讨论】:
-
This question 详细介绍了如何使用 CodeDom 定位不同的框架。不知道今天是否同样的方法适用于 4.5 框架,但这是您的问题,而不是编译器版本。
-
Hmya,您实际上并不是针对 4.5。借助 VS 安装的“开发人员包”,您可以有意地在您的开发机器上定位旧的 .NET 版本。不适用于 System.CodeDom,您的客户端将无法使用它们。你会得到客户端机器上安装的任何版本,这是不可预测的。确实对 FormattedText 造成了严重破坏,您也不能依赖采用 pixelsPerDip 参数的重载。没有干净的解决方案,您将不得不接受该警告。
-
@HansPassant 我的项目面向 .NET 4.5。如果我尝试在自己的代码中使用 .NET 4.6.2 中引入的重载,则会出现编译错误。这就是我在编译脚本时想要发生的事情,而不是得到上面不推荐使用的警告。
-
仅供参考support for 4.5 ended in January,你真的应该看 4.5.2
-
@lgaud 明白了,但不幸的是这不取决于我