找不到路径的一部分... bin \ roslyn \ csc.exe

时间:2015-09-25 10:36:19

标签: c# asp.net asp.net-mvc roslyn

我正在尝试运行从TFS源代码控制中检索到的Asp.net MVC项目。我添加了所有程序集引用,我能够成功构建和编译,没有任何错误或警告。

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

  

无法找到路径的一部分   'C:\ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ BIN \罗斯林\ CSC.EXE'。

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

enter image description here

经过几天的研究,我了解Roslyn是.Net编译器平台,它提供了高级编译功能。但是,我不明白为什么我的构建试图找到\ bin \ roslyn \ csc.exe,因为我没有配置任何与Roslyn相关的东西,也不打算在我的项目中使用Roslyn。

55 个答案:

答案 0 :(得分:614)

在我的情况下,解决方案是重新安装/升级Nuget包:

  • Microsoft.Net.Compilers 1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

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

简短回答 - 在软件包管理器控制台中运行:

<Target>

答案 1 :(得分:260)

默认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>

答案 2 :(得分:145)

您的构建版本正在尝试查找\bin\roslyn\csc.exe,因为您的项目中已添加了以下软件包。只需查看packages.config文件,您可以在其中同时使用

Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
  

什么是Roslyn以及谁在项目中添加了它们(包):如果您使用.net Framework 4.5.2来创建项目   使用VS2015,您可能已经注意到项目模板使用   罗斯林默认情况下。实际上Roslyn是open-source之一   Microsoft的.NET语言编译器。

     

我们为什么要删除Roslyn:   如果您的项目有Roslyn参考,并且您有兴趣部署   它没有服务器,你会在网站上得到不必要的错误   托管服务提供商仍然没有升级他们的服务器,因此   不支持Roslyn。要解决此问题,您需要删除   项目模板中的Roslyn编译器。

如果您对使用Roslyn不感兴趣, 按照以下步骤将其删除

<强> 1  删除Nuget包,使用Nuget Package Console中的以下命令

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

<强> 2  执行此操作后,您的web.config文件应自动更新。如果不是,请在web.config文件中查找以下代码,如果找到,请删除这段代码。

<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>
      <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+"></compiler>
    </compilers>
</system.codedom>

答案 3 :(得分:63)

清洁和重建对我有用!

答案 4 :(得分:55)

这是一种更多的MSBuild方法。

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

但是我注意到roslyn文件也在我的bin目录中(不在文件夹中)。该应用似乎可行。

答案 5 :(得分:23)

为时已晚,但仍然发布以防万一。
按照以下步骤为我修复了错误:

  1. 删除包裹文件夹
  2. 打开VS
  3. 重建
  4. 观察到NuGet软件包已还原,但未创建bin \ roslyn
  5. 卸载项目
  6. 重新加载项目
  7. 重建
  8. 观察到bin \ roslyn现在已经创建。

答案 6 :(得分:15)

NuGet Package Manager

您需要安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, 特别是为那个错误创建了

答案 7 :(得分:15)

尝试了所有无雪茄的修复后,我通过在Visual Studios中更新此Nuget包来修复了它:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

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

答案 8 :(得分:13)

对于VS 2019,请完全删除以下节点:

<system.codedom>
</system.codedom>

答案 9 :(得分:11)

所以,Rob Cannon's answer基本上对我有用,但我不得不调整一些选项。具体来说,我必须删除目标上的条件,以及更改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>

答案 10 :(得分:11)

我按照这些步骤操作,效果很好

  • 删除所有bin和obj文件夹
  • 清洁解决方案并重建
  • 在powershell中运行此命令

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

答案 11 :(得分:9)

这是known issue Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6。降级到1.0.5为我解决了这个问题。

答案 12 :(得分:8)

更新nuget包对我有用 右键单击解决方案&gt;管理NuGet包以获得解决方案 并更新所有包,特别是: 的 Microsoft.Net.Compilers Microsoft.CodeDom.Providers.DotNetCompilerPlatform

答案 13 :(得分:8)

  • 右键单击您的项目,然后选择“管理Nuget程序包”
  • 找到“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform”
  • 只需更新到旧版本或新版本(无关紧要),然后再次更新回原始版本。

这将重新安装软件包的所有依赖项和文件(例如csc.exe)

Nuget - DotNetCompilerPlatform

答案 14 :(得分:8)

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

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

答案 15 :(得分:8)

根据Daniel Neel的评论:

版本1.0.3的Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget包适用于我,但版本1.0.6导致此问题中的错误

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

答案 16 :(得分:7)

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

答案 17 :(得分:6)

使用Import Project =&#34; .. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....打开项目文件并删除所有引用。

打开web.config并删除所有system.codedom编译器属性

答案 18 :(得分:6)

在我的情况下,我在Jenkins尝试在Octopus中部署它时出现以下错误:

MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED

<强>原因

花了一些时间后,我使用的是使用Microsoft.Net.Compilers的内部开发组件。内部组件使用Microsoft.Net.Compilers的原因是为了解决此问题(C#: throw invalid expression compilation)并以这种方式解决(How to use C# 7 with Visual Studio 2015?)。这导致,当我在主程序上安装组件时,Microsoft.Net.Compilers会自动添加它。

<强>解决方案

我的工作是,从我们的内部组件卸载(通过@malikKhalil回答)

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

在Jenkins中选择C#7编译器而不是C#6并重建,这是为了确保一切正常并正确构建。

最后在我的主程序中,我尝试更新我的内部组件。而且还有一切都要再建造。它没有任何问题或问题。

答案 19 :(得分:5)

如果要添加ASPNETCOMPILER以在MVC中编译Razor视图,例如在this StackOverflow question中,则将PhysicalPath更改为Roslyn nuget包所在的位置(通常通过 $ CscToolPath 变量指向) :

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

答案 20 :(得分:5)

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

要解决此问题,请在xml块.csproj

之后立即将以下内容添加到<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>文件的末尾
<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-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise

答案 21 :(得分:4)

  1. 清洁溶液
  2. 重建解决方案 ,这两个步骤对我有用。

答案 22 :(得分:4)

在我的情况下,类似于Basim,有一个NuGet包告诉编译器我们需要C#6,我们没有。

我们必须删除随后删除的NuGet包Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />来自 packages.config文件
  2. <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>
  3. system.codedom节点中,您可以看到它为什么带来了roslyn:compilerOptions="/langversion:6

答案 23 :(得分:4)

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

  1. 右键单击解决方案
  2. 选择清洁解决方案
  3. 清理成功后,再次构建项目
  4. 再次运行项目

    这次我看不出同样的错误。这按预期工作

答案 24 :(得分:3)

首先,这里是重现该错误的代码:  http://schulze.000webhostapp.com/vs/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

Server Error

而不是使用程序包管理器(andy250 /Smoljár建议)运行

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

您可以删除项目的Web.config的属性  文件。
Web.config.csproj文件位于同一目录。)

在文本编辑器中(或在Visual Studio中)打开Web.config文件。
 -在标记configuration | system.codedom | compilers | compiler language="c#;cs;csharp"中,完全删除type属性。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <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>

简而言之,删除以type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft开头的行。

(大概,相同的修补程序对Visual Basic和Csharp都适用,但我还没有尝试过。)

Visual Studio将负责其余的工作。不再Server Error in '/' Application

在我上面的zip文件中提供的示例代码中,您现在将获得HTTP Error 403  当您按 Ctrl + F5 时。

HTTP Error 403.14 - Forbidden

尝试在网络浏览器中将http://localhost:64195替换为http://localhost:64195/api/products
现在,Web API应该显示为:

A web API containing products

出于挑衅,我什至尝试删除Visual Studio解决方案的整个package目录。
我(重新)建造它后,它会自动无声地重新创建。

答案 25 :(得分:3)

当在localhost上完美运行时,我在服务器上安装应用程序时遇到了同样的问题。

这些解决方案都没有,我总是遇到同样的错误:

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

我最终这样做了:

  • 在我的安装项目上,右侧是clic,view&gt;文件系统
  • 创建bin/roslyn文件夹
  • 选择添加&gt;文件并添加packages\Microsoft.Net.Compilers.1.3.2\tools
  • 中的所有文件

这解决了我的问题。

答案 26 :(得分:3)

以下内容为我解决了这个问题:

  • 使用安装程序应用程序更新到最新版本的Visual Studio 2017

  • 清洁并重建解决方案

答案 27 :(得分:3)

除了从解决方案中的所有项目中删除Bin diretory之外,还要删除obj文件夹。

在主解决方案中,删除文件夹.vs

当我尝试将已经完成的项目带入在git上创建的空白解决方案时,为我工作。

答案 28 :(得分:3)

我有没有csproj文件的webproject,这里提到的解决方案对我不起作用。

更改目标.NET框架,重新安装软件包(Update-Package -reinstall)然后构建项目对我有用。您甚至可以在此操作之后更改目标框架(稍后再重新安装nuget软件包)。

答案 29 :(得分:3)

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

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

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

答案 30 :(得分:2)

我在要部署到的服务器上遇到此问题,并确定不需要

  

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

因此,我通过nuget卸载了它,并删除了Web配置中的引用。没有其他问题。

我最初尝试将目标节点添加到.proj文件中,如其他一些答案中所述,但这仅导致另一个错误,其中featureStr.append( featMat[i][0]) #print (featureStr) featureStr.append(featMat[i][1] ) featureStr.append( featMat[i][2] ) featureStr.append( featMat[i][3] ) featureStr.append( featMat[i][4] ) featureStr.append( featMat[i][5] ) featureStr.append( featMat[i][6] ) 无法复制msbuild我读到的是nuget包中的错误。

答案 31 :(得分:2)

就我而言,只需删除bin文件夹中的所有内容并重新编译即可完成所有工作。

祝有这个问题的人好运。

答案 32 :(得分:2)

an issue in the Roslyn project on GitHub中所述,一种解决方案(对我有用)是在Visual Studio中简单地卸载和重新加载项目。

直到重新加载项目后,才在构建或重建时创建“ bin \ roslyn”文件夹。

答案 33 :(得分:2)

删除解决方案资源管理器中的Bin文件夹,然后重新构建解决方案。那样可以解决问题

答案 34 :(得分:2)

我尝试了多个最佳答案,直到以下步骤奏效(针对 .NET Framework 4.6.2 的 ASP.NET 项目,在具有疯狂限制性组策略的系统上的 Visual Studio 2019,2021 年 3 月)。

我需要:

  • 管理员身份

    运行VS
  • 在包管理器控制台中运行

    Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -v 2.0.1
    
  • 清理和重建解决方案

没有以管理员身份运行 VS,组策略阻止了 Update-Package 需要运行的 ps1 脚本。

附注。在此之前,我尝试了许多其他答案(并在失败后运行 git reset --hard )。我不知道他们中是否有任何人为此最终工作做出了贡献。我试过了:

答案 35 :(得分:2)

将PropertyGroup添加到.csproj文件

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

答案 36 :(得分:1)

... FYI

截至8/31/2017,升级到Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7正常工作。

答案 37 :(得分:1)

我对Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.06以及1.0.7都有错误,该错误适用于@PrisonerZERO。然而,当微软在2017-10-18发布1.0.8时,它终于开始为我工作了,我没有必要降级。

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

答案 38 :(得分:1)

我通过NuGet更新了一些软件包后遇到了这个问题。重建(而不是正常构建)对我有用。

答案 39 :(得分:1)

更新DotNetCompilerPlatform后我遇到了同样的问题。 通过重新启动Visual Studio解决&gt;清洁项目&gt;建设项目。

答案 40 :(得分:1)

我的解决方案是使用Nuget将以下项目更新为最新版本:   - Microsoft.Net.Compilers   - Microsoft.CodeDom.Providers.DotNetCompilerPlatform 然后重建项目。由于我的项目是一个网站所以没有* .csproj文件。 当我尝试在浏览器中查看cshtml时,会出现上述错误。

将上述两项更新到最新版本后修复错误。 我在VS2015和windows7 SP1

答案 41 :(得分:1)

就我而言,当我同时运行两个Visual Studio IDE时遇到了这个问题。因此解决方案是清理项目并关闭另一个实例。

答案 42 :(得分:0)

许多答案都涉及Nuget软件包和/或清理并重新加载项目。

如果您有WCF服务引用和无效的终结点,也可能会收到此错误消息。确保端点正确无误,并在通过GUI配置服务引用时在.config中使用正确的端点更新服务配置。

Image of Service Reference Configuration GUI

答案 43 :(得分:0)

这可以通过以下简单方式完成 - :

  • 在系统中的任何位置创建类似类型的新项目。构建它并将roslyn文件夹复制到bin目录。

答案 44 :(得分:0)

对于网站项目和Web应用程序项目,答案是不同的。 根本问题是 NuGet软件包在不同计算机上的行为有所不同。可能是供股问题或某些执行策略阻止了它复制到Bin文件夹 如您所知Roslyn是新的编译器。 您应该将它们放在这些项目的Bin文件夹中 进入您的网站NuGet Packages检查此文件夹 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 \ code \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 你看到了吗? 您能否在其中看到code \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 \ tools \ RoslynLatest 现在,作为编译此文件夹的一部分,应将文件夹复制到这样的bin下的网站上。 \ code \ WebSite1 \ Bin \ Roslyn一些不适合您的情况。 尝试以Admin身份运行Visual Studio。 手动复制Roslyn文件夹。 尝试卸载并安装NuGet软件包。 请记住,此程序包会编译您的文件夹,如果没有,则无法编译任何内容,因此也无法添加任何内容。 尝试将此软件包复制到脱机版本 工具->选项-> nuget软件包管理器->软件包源-> Microsoft Visual Studio脱机软件包  C:\ Program Files(x86)\ Microsoft SDKs \ NuGetPackages

答案 45 :(得分:0)

重新启动Windows。

这是尝试重建,删除bin的内容并重建,重新启动Visual Studio之后对我有用的唯一解决方案。

这是C#/。NET构建工具多么糟糕的另一个例子。

(注意:使用Visual Studio 2019,并且项目文件最初是在Visual Studio 2015中创建的。也许这可以帮助某人调查此问题)

我认为(阅读许多答案之后),总体结论是,此问题的原因和解决方案在很大程度上取决于设置和项目,因此,如果一个答案不起作用,请尝试另一个。在弄乱NuGet软件包或重新安装开发工具之前,请尝试非侵入性/破坏性解决方案,例如重新启动Visual Studio,重新引导,重建等。祝你好运!

答案 46 :(得分:0)

在我的情况下,我们的团队不想保留“ packages”文件夹,因此我们将所有dll放在“ sharedlib”之类的其他目录中。

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

select * from Event#time(10 seconds) output snapshot every 2 seconds order by value

答案 47 :(得分:0)

重命名解决方案和一些包含的项目后,我遇到了这个错误,并且正在使用删除nuget包。我将新项目与上一个工作项目进行了比较,发现以下几行缺失,需要重新加入:

  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

这样做解决了我的问题。

答案 48 :(得分:0)

没有其他答案对我有用。在将文件夹之前/之后与预期的提交文件进行比较之后,我发现GIT忽略了所需的文件夹。如果要在资源库中跟踪编译器,请确保已跟踪BUILD文件夹。如果不是这样,则将永远不会编译该编译器,并且在发布后会抛出此确切错误。我将此行添加到了我的 .gitignore 文件中:

!**/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/build/

现在它已正确部署到其他计算机。

答案 49 :(得分:0)

我在发布管道(生成_PublishedWebsites目录)中遇到了这个问题,并在项目中将其用作目标:

<Target Name="CopyRoslynCompilerFilesToPublishedWebsitesDirectory" AfterTargets="AfterBuild" Condition="Exists('$(OutDir)\_PublishedWebsites\$(TargetName)')">
    <Copy SourceFiles="@(RoslyCompilerFiles)" DestinationFolder="$(OutDir)\_PublishedWebsites\$(TargetName)\bin\roslyn" ContinueOnError="true" SkipUnchangedFiles="true" />
</Target>

缺点是输出中会有两个Roslyn文件副本。

答案 50 :(得分:0)

我在运行MSBuild的Jenkins构建服务器上遇到此错误,该服务器将构建文件输出到单独的文件夹位置(_PublishedWebsites)。完全相同 - roslyn文件夹不在bin目录中,并且所有roslyn文件都与bin文件混在一起。

@igor-semin 's answer是唯一对我有用的东西(因为我正在使用C#6语言功能,我不能简单地按照其他答案卸载nuget包),但是因为我也在运行CodeAnalysis,所以我是在我的部署目标服务器上收到另一个错误:

检测到名为“”的Microsoft.CodeAnalysis.ICompilationUnitSyntax类型覆盖现有映射的尝试,当前映射到类型Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax,以键入Microsoft.CodeAnalysis.VisualBasic.Syntax .CompilationUnitSyntax。

原因是当roslyn文件被转储到主bin目录中时,当你运行xcopy在嵌套的roslyn文件夹中重新创建它们时,你现在有2个这些文件的副本被编译,并且有一个他们之间发生冲突。经过多次挫折之后,我决定进行“黑客”修复 - 一个额外的构建后任务,从bin目录中删除这些文件,消除冲突。

我的违规项目的.csproj现在看起来像:

...................更多这里......................

 <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>
<Target Name="DeleteDuplicateAnalysisFiles" AfterTargets="AfterBuild">
   <!-- Jenkins now has copies of the following files in both the bin directory and the 'bin\rosyln' directory. Delete from bin. -->
   <ItemGroup>
     <FilesToDelete Include="$(WebProjectOutputDir)\bin\Microsoft.CodeAnalysis*.dll" />
   </ItemGroup>
   <Delete Files="@(FilesToDelete)" />
</Target>

...................更多这里......................

答案 51 :(得分:0)

我不得不将WebAPI和MVC项目文件更改为不构建视图:

<MvcBuildViews>false</MvcBuildViews>

这解决了我使用roslyn的TFS 2015 Build服务器错误。仍然不确定为什么csc.exe被复制到\ bin \ csc.exe,但是发布过程正在寻找\ bin \ Roslyn \ csc.exe ...找不到导致这种差异的转换。

答案 52 :(得分:-1)

问题

请注意,NuGet PM打破了Rosalyn的行为。点击Tools > NuGet Package Manager > Manage NuGet Packages for Solution如果Microsoft.CodeDom.Providers.DotNetCompilerPlatformMicrosoft.Net.CompilersMicrosoft.Net.Compilers.netcore存在更新,请更新它们,解决方案就会中断!发生这种情况是因为ASP站点模板设置为在项目创建时使用特定版本。要查看问题,请单击“解决方案资源管理器”中的“显示所有文件”。

修复

在项目创建时,$(WebProjectOutputDir)\bin不存在,因此当NuGet将Rosalyn添加为依赖项时,它会正确安装它。更新解决方案包后,$(WebProjectOutputDir)\bin目录如下所示:

$(WebProjectOutputDir)\bin\bin\rosalyn

最简单的解决方法是Cut&amp;将rosalyn粘贴到正确的位置,然后删除额外的bin文件夹。您现在可以刷新页面并加载网站。

答案 53 :(得分:-1)

为了防止构建还将Roslyn文件复制到bin目录,您还必须注释掉放在Web应用程序项目顶部的这一行:

<!--  <Import Project="..\..\..\DAS\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\..\DAS\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> -->

答案 54 :(得分:-1)

安装小工具包:Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix/1.0.0