安装 Visual Studio 2015 是否会改变 VS 2013 使用的编译器?

6
Visual Studio 2013使用哪个C#编译器?如果我安装了带有新的Roslyn编译器的Visual Studio 2015,是否会影响我的Visual Studio 2013安装?我之所以问这个问题,是因为我们有一些测试在使用Visual Studio 2015构建代码时已知失败。某些数字在八个有效数字处不同。当Visual Studio 2015发布时,解决方案可能是增加测试的公差,但我想了解Visual Studio是如何决定使用哪个编译器的。能否显式设置Visual Studio 2013使用旧编译器?或通过msbuild脚本实现?

8
期望浮点数类型具有超过7个有效数字总是您代码中的错误,而不是编译器的错误。超出第7位数字的随机噪声数字值受使用的抖动影响,其已发生变化。 - Hans Passant
3
不要在生产环境中安装VS2015,它是一个不受支持的“预览版”。 - Daniel Mann
我完全赞同@DanielMann的观点。在VS2015更加成熟之前,我不会尝试修复这个问题。 - spender
2
为什么基于这个帖子“主要基于观点”的投票会关闭?!?O.o - Crono
1
我已经安装了2015和2013版本。据我所知,2015版本对于2013版本的安装不会有任何影响。 - aquinas
1
我并不是在试图“修复”任何东西,我只是想要了解Visual Studio的工作原理,以便了解当Visual Studio 2015发布时会发生什么(如果有的话)。目前,我们所有的开发人员和测试机器都给出相同的结果(数字是双精度)。这很好(只要它持续下去)。当然,差异可以通过容限来管理,就像我在问题中提到的那样! - Colonel Panic
5个回答

10
Visual Studio 2013使用哪个C#编译器?如果我安装了带有新的Roslyn编译器的Visual Studio 2015,会影响我的Visual Studio 2013安装吗?
安装Visual Studio 2015 Preview不会影响您的Visual Studio 2013安装,并且.NET Framework安装文件夹中旧的C#和VB编译器不会被替换。相反,Visual Studio 2015 Preview使用并包含Microsoft Build Tools的下一个版本的预览版MSBuild 14.0,它安装在\ MSBuild \ 14.0下的32位Program Files文件夹中,并包含新的Roslyn编译器和代码分析库。
对于C ++,没有实质性的变化,由于编译器位于特定Visual Studio安装的\ VC \ bin子文件夹中,它们不会相互影响。
Visual Studio 2013可以明确设置为使用旧编译器吗?或者是msbuild脚本?
这不是必要的,因为Visual Studio 2013只能使用旧的编译器,除非您安装并启用了Roslyn CTP扩展程序,现在已经过时了。

8
不,安装Visual Studio 2015不会改变VS 2013使用的编译器。在命令行中,您可以通过运行相应的msbuild.exe来选择编译器。
测试失败是由于.NET Framework 4.6而不是编译器变化引起的。
通过按照https://github.com/Microsoft/dotnet/blob/master/docs/testing-with-ryujit.md中的说明设置“使用旧版JIT”环境变量COMPLUS_useLegacyJit解决了问题。

2
安装VS2015会替换.NET运行时并将其更新为4.5.3 - 我不知道JIT编译器是否被替换,但这是可能的。
在这种情况下,无论使用哪个C#编译器,您都可能观察到不同的测试结果。
无论如何,在生产机器上不建议安装4.5.3运行时,因为它是对机器的重大更改,不能与非预览运行时并存。例如,来自Microsoft的调试器API,CLRMD(Microsoft.Diagnostics.Runtime nuget package),不再能够连接到4.5.3运行时 - 在此处已经报告
我认为还有更多的破坏性变化有待发现。

这听起来好像在并行运行时存在风险,因为这会将 .Net 运行时升级到 4.5.3。还有其他已知问题吗? - Adam Seabridge

2
也许 VS 2015 不会影响 VS 2013 使用的编译器,但它肯定会影响 Roslyn(如果你安装了 VS 2015,那么你旧的、在 VS 2015 之前编写的 Roslyn 代码可能会停止工作)。对我而言,它在编译 ConfigR 脚本中的匿名类型时出现了问题。

0

我安装了VS Professional 2015 Release和VS Professional 2012并存,导致了问题。我的MVC 3项目是在VS 2012/.net 4.0中创建的,现在无法打开。只有在VS 2015/.Net 4.0中才能打开。


1
你确定没有将解决方案升级到2015,或者为你的项目添加了只有2015才支持的功能吗?我们使用2010、2013和2015年打开同一个解决方案都没有问题。我们只需要确保不做任何会强制要求2015(或2013)独有行为的事情即可。 - Mark A. Donohoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接