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

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

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

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

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


当前回答

我有一个项目在VS2019中运行,然后我第一次打开(在VS2019中)另一个项目,我得到了上述问题。我所做的如下:

我关闭正在运行的项目, 清理并重新构建新项目

只有一点没有。2号不适合我。

其他回答

在我的例子中,类似于Basim,有一个NuGet包告诉编译器我们需要c# 6,而我们并不需要。

我们必须删除NuGet包Microsoft.CodeDom.Providers.DotNetCompilerPlatform,然后删除:

<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> from the packages.config file <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /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.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> </compilers> </system.codedom>

在系统中。codedom节点,你可以看到为什么它带来roslyn: compilerOptions="/langversion:6

问题

请注意,NuGet PM破坏了Rosalyn行为。如果Microsoft.CodeDom.Providers存在更新,则单击“工具”> NuGet包管理器>管理解决方案的NuGet包。DotNetCompilerPlatform, Microsoft.Net。编译器,或者Microsoft.Net.Compilers.netcore,更新它们,解决方案就会崩溃!这是因为ASP Sites模板在项目创建时被设置为使用特定的版本。要查看问题,请单击“解决方案资源管理器”中的“显示所有文件”。

Fix

在项目创建时$(WebProjectOutputDir)\bin不存在,因此当Rosalyn被NuGet添加为依赖项时,它会正确安装它。在更新解决方案包之后,$(WebProjectOutputDir)\bin目录看起来像这样:

$ (WebProjectOutputDir) \ bin \ bin \罗莎

最简单的方法是剪切并粘贴rosalyn到合适的位置,然后删除多余的bin文件夹。现在可以刷新页面,然后加载站点。

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

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

默认的VS2015模板的问题是编译器实际上没有复制到tfr\bin\roslyn\目录中,而是复制到{outdir}\roslyn\目录中

在.csproj文件中添加以下代码:

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

你需要安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, 是专门为这个错误创建的吗