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


811

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

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

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

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

在此处输入图片说明

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


10
谁能解释为什么在运行已编译的ASP.NET应用程序时需要这样做?csc.exe是做什么用的?
gregmac

1
我觉得这说明了罗斯林参与:blogs.msdn.microsoft.com/webdev/2014/05/12/...
andy250

4
roslyn文件夹未复制到bin文件夹中,我通过安装以下Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Abdullah Tahan

12
重新安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform解决了我的问题。
SurenSaluka

4
我在VS 2019中打开项目后便拥有此功能。它以前在VS 2017上运行。我发现只需将Microsoft.CodeDom.Providers.DotNetCompilerPlatform降级至任何先前版本,然后再降级为最新版本即可解决此问题。它纠正了我.csproj文件中的一些问题。
Neo

Answers:


436

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

9
这不能解决我的问题。现在我得到“找不到文件'C:\ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe”。请注意,当我在VS2015中创建一个新的MVC项目时,在.csproj中看不到上述配置,它在浏览器中运行得很好
Eyad

4
谢谢。下载Roslyn目录并将其放在/ bin文件夹后,现在可以在浏览器中构建和运行该项目。我没有放上面提到的PstBuildEvent,它仍然可以工作。也许您想在上面编辑答案,并提到需要手动放置Roslyn文件并更好地反映解决方案的需要。
伊德2015年

2
好吧,在正常情况下;您应该将编译器放在$(OutDir)roslyn *。*文件夹中,因此此脚本会将编译器复制到项目的binfolder中。显然,您安装的vs2015不包含编译器。
米切尔

9
我发现将Microsoft.CodeDom.Providers.DotNetCompilerPlatform更新到1.0.8,而Microsoft.Net.Compilers 2.6.1帮助了我很多。我不需要添加这个额外的目标。像类似的事情看在工具的后续版本中加入:github.com/aspnet/RoslynCodeDomProvider/commit/...
伊恩·罗伯逊

5
我已经从Nuget将Microsoft.Net.Compilers的版本更新为2.10.0,这已成为我的解决方案。我正在使用targetFramework =“ 4.6.2”
juanytuweb

1160

TL; 博士

在程序包管理器控制台中运行以下命令:

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

更多信息

此问题与Visual Studio本身无关,因此建议添加构建步骤来复制文件的答案是一种解决方法。与手动将编译器二进制文件添加到项目中相同。

Roslyn编译器来自NuGet程序包,该程序包的某些版本中存在(或存在)错误(我不知道是哪个版本)。解决方案是将该软件包重新安装/升级为无错误版本。最初在2015年写答案之前,我通过安装以下特定版本的软件包来解决该问题:

  • Microsoft.Net。编译器1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

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


11
这是我的问题-创建项目时存在bin / roslyn文件夹,但是,如果删除它,或者像源代码管理一样,它不会被复制,则不会被重建。我认为这些版本存在一些“同步”问题,一旦安装了1.0.1并将更新Import in proj文件更新为正确的版本,然后构建版本会自动复制Roslyn文件夹-无需进行任何此类发布构建命令。
小丑

16
我很确定这是最好的解决方案...尝试使用更新程序包-reinstall -projectname myprojectname
cr1pto 2016年

5
完成所有这些操作后,我的项目没有任何改变。bin文件夹仍然是扁平的。
brianary

8
请注意:Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget软件包的1.0.3版对我有用,但是1.0.6版导致此问题中的错误。
Daniel Neel


176

您的构建正在尝试查找,\bin\roslyn\csc.exe因为以下软件包已添加到您的项目中。只需查看您的packages.config文件,即可将它们都保存在那里

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

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

我们为什么要删除Roslyn: 如果您的项目有Roslyn引用,并且您有兴趣不部署任何服务器,则由于许多托管服务提供商仍未升级其服务器,因此不支持Roslyn,因此您会在网站上看到不必要的错误。若要解决此问题,您将需要从项目模板中删除Roslyn编译器。

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

1. 删除NuGet软件包,从Nuget软件包控制台使用以下命令

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>

28
如果您确实使用新的编译器和新功能,则这不是真正的解决方案。
Matti Virkkunen '17

14
您是在提倡未来。
cchamberlain

2
@cchamberlain为什么会是未来?我只是认为使用起来应该很简单,但是看起来很多人在使用它时遇到了麻烦。
Alisson

1
@Alisson-Roslyn是前进的方向。它包含较新的语言功能,性能更高,跨平台和开源。它是在其他工具之后出现的-因此是未来。没什么说您需要使用它的,大多数升级会产生一些费用。请参阅“为什么在ASP.NET中进行Roslyn编译?” 部分:blogs.msdn.microsoft.com/webdev/2014/05/12/…–
cchamberlain

1
如果您想将MVC项目发布到GoDaddy共享Windows托管,这就是答案。GoDaddy无法运行csc.exe之类的可执行文件
Jeson Martajaya 19/12/12

140

清洁和重建对我有用!


4
我不认为需要清洁。根据对这个问题的讨论,重新构建而不是常规构建总是会将roslyn文件放回原处。 github.com/dotnet/roslyn/issues/15556
leemicw

我还只是运行了Build> Rebuild Solution,错误消失了。
马特·美林

重建为我解决了,我在输出中注意到了这一点Copying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
m.edmondson '17

12
只是重建对我没有用。.清理+重建后错误消失了。
布鲁诺·米奎林'18

2
DotNetCompilerPlatform 1.0.3,Microsoft.Net.Compilers 1.3.2,VS Pro 2017 15.9.4。即使在重新启动Visual Studio之前和之后,清理/重建对我也不起作用。最后,“构建”>“批处理构建...”>“全部重建”成功完成了。要让VS看到它在输出中丢失了bin / roslyn目录,它一定在低声说了什么。
约翰

59

这是执行此操作的更多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目录中(而不是文件夹中)。该应用程序似乎可以正常运行。


4
您可以将其放在.csproj文件中的任何位置,与另一个<Target>标记位于同一级别。我通常把它放在底部。
罗布·坎农

这确实应该是公认的答案。您可以将其检查为源代码,而下一个导致您的回购的可怜的笨蛋将不必经历相同的问题。
安德鲁·

37

GitHub上Roslyn项目中的一个问题所述,一种解决方案(对我有用)是在Visual Studio中简单地卸载和重新加载该项目。

在重新加载项目之前,“ bin \ roslyn”文件夹不是在构建或重建时创建的。


谢谢,对我有用。dotnet存储库上的问题已于2016年开放,而Visual Studio 2019上仍然存在此问题。我不敢相信这是真的!
Felipe Oriani


22

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

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

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


3
这对我来说很高兴。对于我的项目,即使2.0.0太低,它也要求2.0.1。
yesman '18

3
这为我解决了。我降级了必须解决此问题的版本,然后又更新回最新版本。
丹尼尔·杰克逊

1
我也是这样做的。现在,roslyn在我的输出路径中创建了文件夹。我在csproj中也没有看到“ roslyn”引用。这可能是Target Name="CopyRoslyn...是一个VS2015的事情,没有必要(版本)2017年我有。值得注意的是:自从我在添加复制目标(我提到的目标)之前更新了DotnetCompilerPlatform以来,我有了一个更清洁的csproj。
LosManos

1
这只是发生在我身上。这篇文章是救生员。我反复收到相同的错误消息,这似乎总是一个完全不同的原因!
Brian Knoblauch

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

谢谢,这也对我有用。
乔伊·菲利普斯

1
作品。Ctrl C当我在检查分支的中间时不小心按下了git它,这使我的存储库搞砸了。 git reset --hard没有用,所以我git clean -xdf不得不重建项目。但是我遇到了这个错误,所以我只是简单地清理并重新构建了该项目,它对我有用。
保罗·卡尔顿

15

NuGet软件包管理器

您需要安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix,它是专门为该错误而创建的


这行不通-我怀疑该软件包实际上不是出于这个确切目的。
德鲁·米勒

我在VS 2017上进行了测试,它工作正常,其他版本可能存在问题。
Juan Acosta

11
我不是从昵称“ dsx”的随机人那里安装随机软件包。那是很大的安全性……
Mateusz

1
@Mateusz或将修复我的非APS.NET [sic]文件夹结构的文件
Eliasar

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

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

Nuget-DotNetCompilerPlatform


这为我解决了!谢谢!
梅森

11

因此,罗布·坎农(Rob Cannon)的答案基本上对我有用,但是我不得不调整一些选项。具体来说,我必须删除目标上的条件,并更改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>

1
行为甚至更糟。在本地,如果转到文件夹并删除两个文件夹Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn并生成代码,则$ CscToolPath将为空。如果您第二次建造,那么它将不会为空。该问题始终在构建服务器上发生,因为它始终被视为“首次构建”。您的代码可以完美运行,但是如果更新Microsoft.Net.Compilers软件包,则必须更新.csproj。谢谢。
朱利安D.

3
请注意,如果Microsoft.Net.Compilers的版本更改,则此解决方案将失败(或必须进行调整)。
JanDotNet

我升级了Microsoft.CodeDom.Providers.DotNetCompilerPlatform,然后继续进行。
iowatiger08 '18

10

更新适用于我的nuget软件包右键单击解决方案>管理NuGet软件包以获得解决方案并更新所有软件包,尤其是: Microsoft.Net.CompilersMicrosoft.CodeDom.Providers.DotNetCompilerPlatform


这一次对我有用。丢失的Roslyn / csc.exe错误不断为我出现,解决方案经常有所不同……
Brian Knoblauch19年



9

根据丹尼尔·尼尔的评论:

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

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



@akatakritos这有帮助。我在找几个小时。谢谢你俩。
erincerol '17

2
1.0.7在某些情况下仍会受到影响github.com/aspnet/RoslynCodeDomProvider/issues/17
altso

1
1.0.5是对我有用的最新版本(1.0.6和1.0.7会产生错误)
Patrick

一样,我当时是1.0.7,这行不通。1.0.3有效。我还没有尝试过其他任何事情,因为我刚刚在这个问题上浪费了生命的最后一个小时,而且现在它还在工作,我不再理会它!
菲利普·斯特拉特福德,

9

就我而言,在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#:抛出无效表达式编译),并以此方式解决(如何在Visual Studio 2015中使用C#7?)。这样一来,当我在主程序上安装组件时,Microsoft.Net.Compilers添加的内容就会自动出现。

我的解决方法是,从内部组件中卸载以下内容(通过@malikKhalil回答)

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

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

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


8

就我而言,我只需要转到Visual Studio解决方案资源管理器(Web应用程序项目)中的bin目录,并直接包含roslyn项目。右键单击该文件夹,然后选择“包含在项目中”。并再次签入解决方案以触发构建过程。

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


7

Microsoft.CodeDom.Providers.DotNetCompilerPlatform从1.0.0 升级到1.0.1可以解决此问题。


6

打开项目文件,然后使用Import Project =“ .. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ... 删除所有引用。

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


6

正如已经指出/programming/32780315#34391473,快速修复是使用软件包管理器, Tools> Nuget Package Manager> Package Manager Console,运行

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

数据包管理器控制台-如何打开

但是,另一种解决方案(如果缺少包,则自动且无提示地重新创建包)是删除项目Web.config文件的属性。
Web.config.csproj文件位于同一目录中。)

Web.config在文本编辑器中(或在Visual Studio中)打开文件。
-在标签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错误403.14-禁止

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

包含产品的Web API

出于挑衅,我尝试删除packageVisual Studio解决方案的整个目录。
一旦我(重新)构建了它,它就会自动而无声地重新创建。


最后但并非最不重要的是,这里是重现该错误的代码:http : //schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip(最初来自 https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / overview / advanced /从a-net-client / sample / server / ProductsApp调用a-web-api-

服务器错误


6

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


2
我认为这更简单有效。通常,将项目从存储库克隆到新的computir后,我会收到此错误。
乔纳森·奥尔特加

尝试此操作后,在调试器中运行时,我从IIS Express收到403 Forbidden。重新启动Visual Studio也无济于事,但重新启动Windows却没有帮助。
弗洛里安(Florian Winter)

6

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

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

这次我没有看到相同的错误。这按预期工作。


同事报告说,可以从控制台更新NuGet软件包,但是这也可以在不运行任何命令的情况下进行。我选择的答案。
tsemer

5

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

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


5

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

要修复此问题,请.csproj在xml块之后,在文件末尾添加以下内容<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-generation-from-vstudio-2015-enterprise


1
/ d选项仅复制较新的文件(代表“日期”)。请记住,将时间部署在本地时间之前/之后的云/天蓝色区域中。
Max

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>

system.codedom节点中,您可以看到为什么引入了roslyn:compilerOptions="/langversion:6


1
我要做的就是卸载NuGet软件包“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform”,这对我来说解决了(我的项目目标是.NET 4.5.2)。
BlueSky '16

1
这对我有用。您还需要删除Microsoft.Net.Compilers,因为没有理由保持两者之间的这种附加依赖性。
永远学习

4

在解决方案资源管理器中删除Bin文件夹,然后再次构建解决方案。那可以解决问题


谢谢!这也对我有用。除此之外,我还更新了我所有的nuget程序包
Andre Kraemer

4

在本地主机上一切正常时,在服务器上安装应用程序时遇到了同样的问题。

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

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

我最终这样做:

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

这解决了我的问题。


4

重新启动Windows。

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

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

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

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

(编辑:这可能是由于安装程序提示重新启动而在安装/修改Visual Studio安装或更新Visual Studio之后没有重新启动引起的吗?)


3

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

更改目标.NET框架,重新安装软件包(Update-Package -reinstall),然后构建适合我的项目。您甚至可以在执行此操作后更改目标框架(确保以后再次安装nuget软件包)。


这是一个“网站项目”。我使用此命令只是重新安装了一个软件包:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.