我正在尝试运行ASP。NET MVC(模型-视图-控制器)项目从TFS (Team Foundation Server)源代码控制检索。我已经添加了所有程序集引用,我能够成功地构建和编译,没有任何错误或警告。
但是我在浏览器中得到以下错误:
找不到路径的一部分
“C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe”。
以下是错误页面的完整截图。
经过几天的研究,我了解到Roslyn是一个提供高级编译特性的. net编译器平台。但是,我不明白为什么我的构建试图找到\bin\roslyn\csc.exe,因为我没有配置任何与roslyn相关的东西。我也没打算让罗斯林参与我的项目。
重新启动Windows。
这是唯一的解决方案,工作后,我尝试重建,删除bin和重建的内容,重新启动Visual Studio。
这是c# /有多糟糕的另一个例子。NET构建工具。
我认为(在阅读了许多答案后),总的结论是,这个问题的原因和解决方案在很大程度上取决于设置和项目,所以如果一个答案不起作用,就尝试另一个。尝试非侵入性/破坏性的解决方案,如重新启动Visual Studio,重新启动,重建等,首先,在乱动NuGet包或重新安装开发工具之前。好运!
(注意:使用Visual Studio 2019,项目文件最初是在Visual Studio 2015中创建的。也许这有助于某人调查这个问题)
(编辑:这可能是由于安装/修改Visual Studio安装后没有重新启动或当安装程序提示重新启动时更新Visual Studio造成的吗?)
在我的情况下,我有问题在詹金斯,当它试图部署它在章鱼有以下错误:
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和重建,这是为了确保一切都能正常工作和构建。
最后,在我的主程序中,我尝试更新我的内部组件。一切都比重新建造好。它没有任何问题或问题。
我在运行MSBuild的Jenkins构建服务器上遇到了这个错误,它将构建文件输出到一个单独的文件夹位置(_publhedwebsites)。完全一样- roslyn文件夹不在bin目录中,所有的roslyn文件都集中在bin文件中。
@igor-semin的回答对我来说是唯一有用的(因为我正在使用c# 6语言功能,我不能像其他答案一样简单地卸载nuget包),但由于我也在运行CodeAnalysis,我在部署目标服务器上得到了另一个错误:
检测到试图覆盖名称为“”的Microsoft.CodeAnalysis.ICompilationUnitSyntax类型的现有映射,当前映射为Microsoft.CodeAnalysis.CSharp.Syntax类型。CompilationUnitSyntax,输入Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax。
这样做的原因是,当roslyn文件被转储到主bin目录中时,当您运行xcopy在嵌套的roslyn文件夹中重新创建它们时,您现在有两个正在编译的这些文件副本,并且它们之间存在冲突。在经历了很多挫折后,我决定进行一个“黑客”修复-一个额外的构建后任务,从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>
...................更多信息请点击这里......................