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

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

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

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

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


当前回答

清理和重建对我有用!

其他回答

根据Daniel Neel的评论:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget包的1.0.3版本适合我,但1.0.6版本导致了这个问题中的错误

降级到1.0.3为我解决了这个问题。

默认的VS2015模板的问题是编译器实际上没有复制到{outdir}_PublishedWebsites\tfr\bin\roslyn\目录中,而是复制到{outdir}\roslyn\目录中。这可能与您的本地环境不同,因为AppHarbor使用输出目录构建应用程序,而不是“就地”构建解决方案。

要修复它,在xml块<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

<PropertyGroup>
  <PostBuildEvent>
    if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
    start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
  </PostBuildEvent>
</PropertyGroup>

参考:https://support.appharbor.com/discussions/problems/78633 -斜面-构建- aspnet - mvc项目生成——从vstudio - 2015企业

0. 权宜之计

正如目前票数最高的答案所指出的, 快速修复是使用包管理器,Tools > Nuget package Manager >包管理器控制台,以运行

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

1. 代码来重现错误

下面是重现错误的代码: https://user.it.uu.se/%7Ehesc0353/SrvrErr-reproduce.zip (来自 https://github.com/aspnet/AspNetDocs/tree/master/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client/sample/server/ProductsApp)

考虑尝试上面zip文件中提供的示例代码。 如果没有更改,则按Ctrl+F5重新生成 这个错误。

2. 更健壮的解决方案

另一种解决方案是从项目的 网络。配置文件。 (Web。Config与.csproj文件在同一目录下。) 这将自动和静默地重新创建您的包,如果它们 人失踪。

打开网络。配置文件在文本编辑器或Visual Studio。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings></appSettings>
  ...
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

在标签配置>系统。Codedom >编译器> 编译语言="c#;cs;csharp",完全删除 类型属性。 -简而言之,删除开始的行 type = " Microsoft.CodeDom.Providers.DotNetCompilerPlatform。CSharpCodeProvider。 1

Visual Studio将负责其余的工作。 -没有更多的服务器错误在'/'应用程序。

3.HTTP错误403

在上面的例子中,按Ctrl+F5 现在将导致HTTP错误403。

试着在浏览器中替换http://localhost:64195 http://localhost: 64195 / api /产品。 web API现在正确显示:


作为挑衅,我尝试将整个包目录从 Visual Studio项目。 一旦项目完成,它就会自动且无声地重新创建 重建。

参考文献

重现错误的项目文件 原项目


1 .想必同样的修复也适用于Visual Basic 至于c#,但我还没有尝试过。

在我的情况下,我们的团队不想保留“包”文件夹,所以我们把所有的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

在尝试了所有没有雪茄的修复后,我在Visual Studios中更新了这个Nuget包:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

我的是从1.0.0到2.0.0供参考(错误不再显示)