【问题标题】:Change Visual Studio 2010's in-process compiler?更改 Visual Studio 2010 的进程内编译器?
【发布时间】:2012-05-29 23:44:52
【问题描述】:

这是对Projection using async delegate/lambda的后续跟进

显然,Async CTP 有一个我遇到的错误,我需要使用 VS11 编译器。在命令行中,即使针对用 VS2010 编写的项目运行 msbuild 仍然可以使用 VS11 编译器进行编译,因为 VS11/.NET 4.5 就地安装在 .NET 4.0 目录中。

但是,在 Visual Studio 2010 中,使用了一个进程内编译器,似乎还没有升级到新的 VS11 编译器。

我可以(通过一些骇客/DLL 操作)更改 Visual Studio 2010 使用的编译器吗?在 VS11 支持 Windows Azure 之前,这只是一个 hack/解决方法,这样我就可以升级到 beta/release Candidate/RTM。

【问题讨论】:

  • 您可以尝试将 C# 语言服务替换为 VS11 中的服务。只要仍然安装了 VS11,它就应该可以正常工作(除非有其他问题)。外部 SDK API 没有改变 AFAIK,但谁知道 C#?
  • @leppie 这看起来很有希望——知道这些 DLL 存放在哪里吗?
  • <VS Install Dir>\Common7\IDE\Microsoft.VisualStudio.CSharp.Services.Language.dll
  • @leppie 不走运,但还是谢谢。这会引发异常。

标签: c# visual-studio-2010 visual-studio-2012 async-await csc


【解决方案1】:

使用鲜为人知的属性UseHostCompilerIfAvailable 可能会取得一些成功。这应该会导致 IDE 中的构建使用框架目录中的编译器。

但是,诸如智能感知等 IDE 功能将始终使用进程内编译器。如果您遇到的错误只是异步方法的最终转换,您可能会发现进程内编译器足以支持智能感知,而 UseHostCompilerIfAvailable 足以让您从 VS 构建。

您可以通过手动编辑您的 csproj 文件来设置它

<UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>

在顶级属性组中。

另外 - VS11 支持“往返”!在大多数情况下,您可以使用 VS11 打开您的 VS10 项目,而无需强制升级。因此,如果你有一个团队需要暂时将你的项目保持在 V10 格式,你至少可以独立使用 VS11。但是,如果您需要一些尚未针对 VS11 发布的插件,这就更难了。

希望这会有所帮助! :)

【讨论】:

  • 这非常有效,而且比乱搞 DLL 要好得多。我一直在使用 VS11 往返,但这是一场噩梦。我将等待 VS11 中的 Azure SDK 支持使用它。
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多