c# - 使用 Roslyn 编译带有空项目的解决方案会报错

标签 c# visual-studio roslyn

我正在尝试使用 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/

相关文章:

c# mysql DELETE FROM STRING WHERE....我尝试使用字符串作为表名

C# 'is' 运算符性能

ASP.NET:Ro​​slyn 页面更改速度缓慢

c# - 使用 Roslyn 查找属性 "invocations"

c# - 如何在 Roslyn 中浏览没有源代码的程序集内容

c# - 为什么我们在调用 SmtpClient.Send 时周期性地得到 "An asynchronous call is already in progress"?

c# - ASP .NET MVC 表单字段验证(无模型)

visual-studio - Visual Studio 2019深色主题: How to copy and paste code to MS Word with default syntax highlighting?

visual-studio - Visual Studio - 如何使用 openssl 源构建应用程序

c++ - 设置新文件默认文本