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

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

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

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

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


当前回答

我有webproject没有csproj文件和解决方案,这里提到的不适合我。

更改目标。net框架,重新安装包(Update-Package -重装),然后构建项目对我来说很有效。你甚至可以在这个操作之后更改目标框架(确保你重新安装了nuget包)。

其他回答

我不得不改变WebAPI和MVC项目文件,不构建视图:

<MvcBuildViews>false</MvcBuildViews>

这解决了我的TFS 2015构建服务器错误与罗斯林。仍然不确定为什么csc.exe被复制到\bin\csc.exe,但发布进程正在寻找\bin\Roslyn\csc.exe…找不到导致这种差异的变换。

所以,罗伯·坎农的回答基本上对我有用,但我不得不调整一些选项。具体来说,我必须删除目标上的条件,并更改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>

如果你正在添加ASPNETCOMPILER来编译MVC中的Razor视图,就像在这个StackOverflow问题中,然后改变PhysicalPath到Roslyn nuget包所在的地方(通常通过$CscToolPath变量指向):

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />

以我为例,在尝试任何其他解决方案之前,我切换到“发布”配置,重新创建(文件夹被创建),然后切换回“调试”,而文件夹保持不变。

这是从旧解决方案的源代码控制中签出的,显然原始(自动)包恢复和构建项目并没有在bin目录中创建该文件夹。

注意,在撰写本文时,被指责的组件已经达到v.2。

将Microsoft.CodeDom.Providers.DotNetCompilerPlatform从1.0.0升级到1.0.1解决了这个问题。