我正在尝试使用 Roslyn 编译 VS2013 解决方案。该解决方案有很多项目,其中一个项目没有 .CS 文件(我们只是用它来存储 JS 和 CSS 文件。它有一堆 MSBuild 步骤来缩小、lint 等这些文件)。
当我通过 Roslyn 运行解决方案时,出现以下错误:
Microsoft.Build.Exceptions.InvalidProjectFileException : The target "Compile" does not exist in the project.
这是我用来编译的代码:
await MSBuildWorkspace.Create().OpenSolutionAsync(solutionFilePath);
我该如何防止这种情况发生?该解决方案在 VS2013 中构建得很好。
编辑:根据要求,这是堆栈跟踪
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at [My Code]
--InvalidProjectFileException
at Microsoft.CodeAnalysis.MSBuild.ProjectFile.<BuildAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.<GetProjectFileInfoAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<LoadProjectAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<GetOrLoadProjectAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<OpenSolutionAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at [My Code]
最佳答案
Roslyn 假定所有 .csproj
项目都是具有 C# 编译任务的实际 C# 项目。
对于非 C# 项目,您应该使用不同的扩展名,例如 .proj
。
您还可以针对 Roslyn 提交错误,要求他们跳过没有编译任务的项目。
关于c# - 使用 Roslyn 编译带有空项目的解决方案会报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889029/