我正在尝试运行从TFS源代码控制中检索到的Asp.net MVC项目 . 我添加了所有程序集引用,我能够成功构建和编译,没有任何错误或警告 .
但是我在浏览器中收到以下错误:
找不到路径'C:\ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'的一部分 .
以下是错误页面的完整屏幕截图 .
经过几天的研究,我明白Roslyn是.Net编译器平台,提供了先进的编译功能 . 但是,我不明白为什么我的构建试图找到\ bin \ roslyn \ csc.exe,因为我没有配置任何与Roslyn相关的东西,也不打算在我的项目中使用Roslyn .
30 回答
您需要安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix,特别为该错误创建
在尝试了所有没有雪茄的修复后,我通过在Visual Studios中更新这个Nuget包来修复它:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
我从1.0.0到2.0.0作为参考(错误不再显示)
默认VS2015模板的问题是编译器实际上没有复制到tfr \ bin \ roslyn \目录,而是复制到 \ roslyn \目录
在.csproj文件中添加以下代码:
清洁和重建对我有用!
Edit: 评论者说清洁步骤没有必要 . 你可以重建 .
默认VS2015模板的问题是编译器实际上并未复制到
{outdir}_PublishedWebsites\tfr\bin\roslyn\
目录,而是复制到{outdir}\roslyn\
目录 . 这可能与您的本地环境不同,因为AppHarbor
使用输出目录构建应用程序而不是构建解决方案"in-place" .要解决此问题,请在xml块
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
之后立即将以下内容添加到.csproj
文件的末尾参考:https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
这是known issue,Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6 . 降级到1.0.5为我解决了这个问题 .
我有没有csproj文件的webproject,这里提到的解决方案对我不起作用 .
更改目标.NET框架,重新安装软件包(
Update-Package -reinstall
)然后构建项目对我有用 . 您甚至可以在此操作之后更改目标框架(以后再次重新安装nuget包) .在我的情况下,解决方案是重新安装/升级Nuget包:
Microsoft.Net.Compilers 1.1.1
Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1
然后我查看.csproj并确保包的路径是正确的(在我的情况下.. \ .. \ packages \ * . *)在顶部的标签
<ImportProject>
和底部的名称"EnsureNuGetPackageBuildImports"的<Target>
. 这是在MVC 5和.NET Framework 4.5.2上 .Short answer - run this in the Package Manager Console:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
在我的情况下,我在Jenkins尝试在Octopus中部署它时遇到以下错误:
Cause
花了一些时间后,我正在使用一个使用
Microsoft.Net.Compilers
的内部开发组件 . 内部组件使用Microsoft.Net.Compilers
的原因是为了克服这个问题(C#: throw invalid expression compilation)并以这种方式解决(How to use c#7 with Visual Studio 2015?) . 这导致,当我在主程序上安装了主管时,Microsoft.Net.Compilers
自动添加它自己 .Solution
我的工作是,从我们的内部组件卸载以下(按照@malikKhalil回答)
并选择了Jenkins中的C#7编译器而不是C#6并重建,这是为了确保一切正常并正确构建 .
最后在我的主程序中,我试图更新我的内部组件 . 除了再次构建之外的一切 . 它没有任何问题或问题 .
这是一个更多的MSBuild方法 .
但我注意到roslyn文件也在我的bin目录中(不在文件夹中) . 该应用程序似乎工作 .
FYI ...
截至8/31/2017升级到Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7是有效的 .
我的解决方案是使用Nuget将以下项目更新到最新版本: - Microsoft.Net.Compilers - Microsoft.CodeDom.Providers.DotNetCompilerPlatform然后重建项目 . 由于我的项目是一个网站所以没有* .csproj文件 . 当我尝试在浏览器中查看cshtml时出现上述错误 .
上述两个项目更新到最新版本后修复了错误 . 我在VS2015和windows7 SP1
您的构建试图找到
\bin\roslyn\csc.exe
,因为您的项目中已添加了以下包 . 只需查看您packages.config
文件,您可以将它们都放在那里if you are not interested in using Roslyn, follow steps bellow to delete it
1. 删除Nuget包,使用Nuget Package Console中的以下命令
2. 执行此操作后,应自动更新web.config文件 . 如果不是,请在web.config文件中查找以下代码,如果找到,请删除它一段代码 .
在我的情况下,我只需要转到Visual Studio Solution Explorer(Web应用程序项目)中的bin目录并直接包含roslyn项目 . 通过右键单击该文件夹并选择“包括在项目中” . 并再次检查解决方案以触发构建过程 .
默认情况下不包含roslyn文件夹 .
使用Import Project =“.. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0打开项目文件和 remove 所有引用....
打开web.config和 remove 所有system.codedom编译器属性
根据Daniel Neel的评论:
版本1.0.3的Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget包适用于我,但版本1.0.6导致此问题中的错误
降级到1.0.3为我解决了这个问题 .
更新nuget包为我工作右键单击解决方案>管理NuGet包以获得解决方案并更新所有包,特别是: Microsoft.Net.Compilers 和 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
更新DotNetCompilerPlatform后我遇到了同样的问题 . 通过重新启动Visual Studio>清理项目>构建项目解决 .
问题
请注意,NuGet PM打破了Rosalyn的行为 . 单击
Tools > NuGet Package Manager > Manage NuGet Packages for Solution
如果Microsoft.CodeDom.Providers.DotNetCompilerPlatform
,Microsoft.Net.Compilers
或Microsoft.Net.Compilers.netcore
存在更新,请更新它们,解决方案将中断!发生这种情况是因为ASP站点模板设置为在项目创建时使用特定版本 . 要查看问题,请单击解决方案资源管理器中的显示所有文件 .修复
在项目创建时
$(WebProjectOutputDir)\bin
不存在,因此当NuGet将Rosalyn添加为依赖项时,它会正确安装它 . 更新解决方案包后,$(WebProjectOutputDir)\bin
目录如下所示:$(WebProjectOutputDir)\bin\bin\rosalyn
最简单的解决方法是将rosalyn剪切并粘贴到正确的位置,然后删除额外的
bin
文件夹 . 您现在可以刷新页面并加载站点 .删除解决方案资源管理器中的Bin文件夹并再次构建解决方案 . 那样可以解决问题
当在localhost上完美运行时,我在服务器上安装应用程序时遇到了同样的问题 .
这些解决方案都没有,我总是有同样的错误:
我最终这样做了:
我的安装项目
,右侧clic,视图>文件系统
创建一个
bin/roslyn
文件夹选择添加>文件并添加
packages\Microsoft.Net.Compilers.1.3.2\tools
中的所有文件这解决了我的问题 .
我在运行项目时遇到了同样的问题 . 这是我遵循的步骤 .
右键单击解决方案
选择清洁解决方案
清理成功后,再次构建项目
再次运行项目
这次我看不出同样的错误 . 这按预期工作
如果你要添加ASPNETCOMPILER来编译MVC中的Razor视图,比如在this StackOverflow question中,那么将PhysicalPath更改为Roslyn nuget包所在的位置(通常通过 $CscToolPath 变量指向):
所以,Rob Cannon's answer基本上对我有用,但我不得不调整一些选项 . 具体来说,我必须删除目标上的条件,以及更改Include属性,因为在我们的构建服务器上构建项目时$ CscToolPath为空 . 奇怪的是,$ CscToolPath在本地运行时不是空的 .
我通过NuGet更新了一些软件包后遇到了这个问题 . 重建(而不是正常构建)对我有用 .
我不得不将WebAPI和MVC项目文件更改为不构建视图:
这解决了我使用roslyn的TFS 2015 Build服务器错误 . 仍然不确定为什么csc.exe被复制到\ bin \ csc.exe,但是发布过程正在寻找\ bin \ Roslyn \ csc.exe ...找不到导致这种差异的转换 .
将PropertyGroup添加到.csproj文件中
除了从解决方案内的所有项目中删除Bin diretory之外,还要删除obj文件夹 .
在主解决方案中,删除文件夹.vs
在尝试将已经完成的项目带入在git上创建的空白解决方案时,为我工作 .
将Microsoft.CodeDom.Providers.DotNetCompilerPlatform从1.0.0升级到1.0.1为我解决了这个问题 .
在我的例子中,类似于Basim,有一个NuGet包告诉编译器我们需要C#6,但我们没有 .
我们不得不删除随后删除的NuGet包
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
:packages.config文件中的
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
<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=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
在
system.codedom
节点中,您可以看到它为什么引入了roslyn:compilerOptions="/langversion:6