我正在尝试运行ASP。NET MVC(模型-视图-控制器)项目从TFS (Team Foundation Server)源代码控制检索。我已经添加了所有程序集引用,我能够成功地构建和编译,没有任何错误或警告。

但是我在浏览器中得到以下错误:

找不到路径的一部分 “C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe”。

以下是错误页面的完整截图。

经过几天的研究,我了解到Roslyn是一个提供高级编译特性的. net编译器平台。但是,我不明白为什么我的构建试图找到\bin\roslyn\csc.exe,因为我没有配置任何与roslyn相关的东西。我也没打算让罗斯林参与我的项目。


当前回答

这是Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6的一个已知问题。降级到1.0.5为我解决了这个问题。

其他回答

在我的例子中,我只需要转到Visual Studio Solution Explorer (web应用程序项目)中的bin目录,并直接包括roslyn项目。右键单击文件夹并选择“包含在项目中”。并再次检入解决方案以触发构建过程。

默认情况下不包括roslyn文件夹。

TL;博士

在包管理器控制台中运行:

更新- package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

更多的信息

这个问题与Visual Studio本身无关,因此建议添加构建步骤来复制文件的答案是一种变通方法。与手动向项目添加编译器二进制文件相同。

Roslyn编译器来自一个NuGet包,在该包的某些版本中有/曾经有一个bug(我不知道具体是哪些版本)。解决方案是重新安装/升级该包到无bug的版本。最初,在我写回2015年的答案之前,我通过在特定版本安装以下包来修复它:

Microsoft net.compilers 1.1.1 Microsoft. CodeDom. Will the DotNetCompilerPlatform 1.0.1

然后我查看了.csproj,并确保包的路径是正确的(在我的情况下..\..\packages\*.*)在标签<ImportProject>在顶部和<Target>与名称“EnsureNuGetPackageBuildImports”在底部。这是在MVC 5和。net Framework 4.5.2上。

在我的情况下,我们的团队不想保留“包”文件夹,所以我们把所有的dll放在其他目录,如“sharedlib”。

我使用构建事件来解决这个问题。

if "$(ConfigurationName)" == "Release" (
goto :release
) else (
goto:exit
)

:release
if not exist $(TargetDir)\roslyn mkdir $(TargetDir)\roslyn

copy /Y "$(ProjectDir)..\..\Shared Lib\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\tools\Roslyn45\*" "$(TargetDir)\roslyn"
goto :exit

:exit

我也遇到了同样的问题,通过在nuget控制台运行下面的命令来解决

安装microsoft.net . compiler - 3.3.1版本

我在Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.06上有这个错误,但在@ prisoner erzero上也有1.0.7的错误。然而,当微软发布1.0.8 2017-10-18时,它终于开始为我工作了,我不必降级。

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/