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

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

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

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

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


当前回答

我在运行项目时也遇到了同样的问题。以下是我所遵循的步骤。

右击溶液 选择清洁溶液 清理成功后,再次构建您的项目 再次运行项目

这次我没有看到同样的错误。这与预期的一样。

其他回答

所以,罗伯·坎农的回答基本上对我有用,但我不得不调整一些选项。具体来说,我必须删除目标上的条件,并更改Include属性,因为当项目在构建服务器上构建时,$CscToolPath为空。奇怪的是,$CscToolPath在本地运行时不是空的。

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

我在运行项目时也遇到了同样的问题。以下是我所遵循的步骤。

右击溶液 选择清洁溶液 清理成功后,再次构建您的项目 再次运行项目

这次我没有看到同样的错误。这与预期的一样。

我在服务器上安装应用程序时遇到了同样的问题,而在localhost上一切都很完美。

这些解决方案都不奏效,我总是犯同样的错误:

Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'

我最后是这样做的:

在我的安装项目中,右clic,查看>文件系统 创建一个bin/roslyn文件夹 选择添加>文件,并添加包\Microsoft.Net.Compilers.1.3.2\tools中的所有文件

这解决了我的问题。

删除解决方案资源管理器中的Bin文件夹并重新生成解决方案。这样问题就解决了

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上。