Eya*_*yad 635 .net c# asp.net asp.net-mvc roslyn
我正在尝试运行从TFS源代码控制中检索的Asp.net MVC项目.我添加了所有程序集引用,我能够成功构建和编译,没有任何错误或警告.
但是我在浏览器中收到以下错误:
找不到路径'C:\ B8akWorkspace\B8akProject\B8akSolution\B8AK.Portal\bin\roslyn\csc.exe'的一部分.
以下是错误页面的完整屏幕截图.
经过几天的研究,我了解Roslyn是.Net编译器平台,提供高级编译功能.但是,我不明白为什么我的构建试图找到\ bin\roslyn\csc.exe,因为我没有配置任何与Roslyn相关的东西,也没打算在我的项目中使用Roslyn.
and*_*250 834
在我的情况下,解决方案是重新安装/升级Nuget包:
然后我查看.csproj并确保包的路径是正确的(在我的情况下..\..\packages\*.*)Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
在顶部的标签内部,并在<ImportProject>
底部名称为"EnsureNuGetPackageBuildImports".这是在MVC 5和.NET Framework 4.5.2上.
简短回答 - 在Package Manager控制台中运行:
<Target>
Mit*_*ell 355
默认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>
Run Code Online (Sandbox Code Playgroud)
Mal*_*lil 161
您的构建试图找到,\bin\roslyn\csc.exe
因为在您的项目中添加了以下包.packages.config
只需查看您的文件,您可以在那里使用它们
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
Run Code Online (Sandbox Code Playgroud)
什么是Roslyn和谁在项目中添加它们(包):如果您使用.net Framework 4.5.2使用VS2015创建项目,您可能已经注意到项目模板默认使用Roslyn.实际上,Roslyn是 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
Run Code Online (Sandbox Code Playgroud)
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=\"Web\" /optionInfer+"></compiler>
</compilers>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)
pip*_*omb 112
清洁和重建对我有用!
编辑:评论者说清洁步骤是没有必要的.你可以重建.
Rob*_*non 57
这是一个更多的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>
Run Code Online (Sandbox Code Playgroud)
但我注意到roslyn文件也在我的bin目录中(不在文件夹中).该应用程序似乎工作.
小智 48
为时已晚,但仍然张贴以防万一它对任何人都有帮助。
按照以下步骤为我修复了错误:
Chr*_*vén 29
如GitHub上Roslyn项目中的一个问题所述,一种解决方案(对我有用)是简单地在Visual Studio中卸载和重新加载该项目。
在重新加载项目之前,“ bin \ roslyn”文件夹不是在构建或重建时创建的。
Mas*_*ian 22
我按照这些步骤完成了它
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
jos*_*son 21
在尝试了所有没有雪茄的修复后,我通过更新Visual Studio中的Nuget包来修复它:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
我从1.0.0到2.0.0作为参考(错误不再显示)
Hen*_*nke 18
正如已指出
了目前最高的投票答案,速战速决是使用包管理器,Tools
> Nuget Package Manager
> Package Manager Console
,以运行
Run Code Online (Sandbox Code Playgroud)Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
这是重现错误的代码:
http
: //henke.atwebpages.com/SrvrErr-reproduce.zipfile 1
(最初来自
https://github.com/aspnet/AspNetDocs/tree/master/aspnet/web-api/overview /advanced/calling-a-web-api-from-a-net-client/sample/server/ProductsApp )
考虑尝试上面 zip 文件中提供的示例代码。
如果未进行任何更改,Ctrl+F5将重现该错误。
另一种解决方案是从项目Web.config
文件中删除一个属性
。
(Web.config
与.csproj
文件位于同一目录中。)
如果它们丢失,这将自动且静默地重新创建您的包。
Web.config
在文本编辑器或 Visual Studio 中打开文件。
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Run Code Online (Sandbox Code Playgroud)
在标签configuration
> system.codedom
> compilers
> 中compiler language="c#;cs;csharp"
,完全删除该type
属性。– 简而言之,删除以 开头的行
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,
。
2
Visual Studio 将负责其余的工作。– 没有了Server Error in '/' Application
。
在上面提供的示例中,点击Ctrl+F5现在将导致HTTP 错误 403。
尝试http://localhost:64195
在您的 Web 浏览器中替换为
http://localhost:64195/api/products
. Web API 现在可以正确显示:
作为挑衅,我尝试package
从 Visual Studio 项目中删除整个目录。
重建项目后,它会自动且无声地重新创建。
1请将扩展名从 重命名zipfile
为zip
。
2据推测,相同的修复程序适用于 Visual Basic 和 C#,但我还没有尝试过。
Sha*_*uti 16
对于 VS 2019,完全删除以下节点:
<system.codedom>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)
小智 15
您需要安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix,特别为该错误创建
G. *_*nev 15
就我而言,在尝试任何其他解决方案之前,我切换到“发布”配置,重建(文件夹已创建)然后切换回“调试”,而文件夹保持完整。
这是从旧解决方案的源代码控制中签出的,显然原始(自动)包还原和构建项目没有在 bin 目录中创建该文件夹。
请注意,在撰写本文时,被指责的组件已达到 v.2。
小智 14
这将重新安装软件包的所有依赖项和文件(例如csc.exe)
jon*_*bot 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>
Run Code Online (Sandbox Code Playgroud)
小智 9
更新nuget包对我有用右键单击解决方案>管理NuGet包以获得解决方案并更新所有包,特别是: Microsoft.Net.Compilers 和Microsoft.CodeDom.Providers.DotNetCompilerPlatform
小智 8
在我的情况下,我只需要转到Visual Studio Solution Explorer(Web应用程序项目)中的bin目录并直接包含roslyn项目.通过右键单击该文件夹并选择"包括在项目中".并再次检查解决方案以触发构建过程.
默认情况下不包含roslyn文件夹.
根据Daniel Neel的评论:
版本1.0.3的Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget包适用于我,但版本1.0.6导致此问题中的错误
降级到1.0.3为我解决了这个问题.
在我的情况下,我在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
Run Code Online (Sandbox Code Playgroud)
原因
花了一些时间后,我正在使用一个正在使用的内部开发组件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
Run Code Online (Sandbox Code Playgroud)
并选择了Jenkins中的C#7编译器而不是C#6并重建,这是为了确保一切正常并正确构建.
最后在我的主程序中,我试图更新我的内部组件.而且还有一切都要再建造.它没有任何问题或问题.
小智 6
打开项目文件并删除所有引用与Import Project ="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....
打开web.config并删除所有system.codedom编译器属性
就我而言,与 Basim 类似,有一个 NuGet 包告诉编译器我们需要 C# 6,而我们没有。
我们必须删除 NuGet 包Microsoft.CodeDom.Providers.DotNetCompilerPlatform
,然后删除:
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
version="1.0.0" targetFramework="net452" />
从packages.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 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
默认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>
Run Code Online (Sandbox Code Playgroud)
参考:https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
如果你在MVC中添加ASPNETCOMPILER来编译你的Razor视图,就像在这个StackOverflow问题中那样,那么将PhysicalPath更改为Roslyn nuget包所在的位置(通常通过$ CscToolPath变量指向):
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />
Run Code Online (Sandbox Code Playgroud)
当一切都在本地主机上完美运行时,我在服务器上安装我的应用程序时遇到了同样的问题。
这些解决方案都没有奏效,我总是有同样的错误:
Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'
Run Code Online (Sandbox Code Playgroud)
我最终这样做了:
bin/roslyn
文件夹packages\Microsoft.Net.Compilers.1.3.2\tools
这解决了我的问题。
我有没有 csproj 文件的 webproject,这里提到的解决方案对我不起作用。
更改目标 .NET 框架、重新安装包 ( Update-Package -reinstall
) 然后构建项目对我有用。您甚至可以在此操作后更改目标框架(确保您之后再次重新安装 nuget 包)。
就我而言,仅删除bin文件夹中的所有内容并重新编译即可完成所有工作。
祝所有遇到此问题的人好运。
归档时间: |
|
查看次数: |
322186 次 |
最近记录: |