2015-05-26 25 views
2

我想检索设置TreatWarningsAsErrors,但我无法找到它为我加载的解决方案的项目。Roslyn是否真的允许您为CSharp项目操作TreatWarningsAsErrors?

我想要完成的是从项目文件中获取设置,并将其设置为true,如果它尚未。接下来,我想让Roslyn对新设置进行编译,以便检查是否会破坏项目。

我看了很多地方,其中包括Project.CompilationOptions。项目构建的大多数选项都在那里,除此之外。

CompilationOptions包含所有的构建设置,如警告级别等,但TreatWarningsAsErrors不存在。我看错了地方吗?

我打开的解决方案的方式是类似FormatSolution sample

var solutionFile = @"C:\ties\src\playground\EnforceTreatAllWarningsAsErrors\EnforceTreatAllWarningsAsErrors.sln"; 

var workspace = MSBuildWorkspace.Create(); 
var solution = workspace.OpenSolutionAsync(solutionFile).Result; 
var project = solution.Projects.Single(); 

// warning level is there 
var warningLevel = project.CompilationOptions.WarningLevel; 

// treat warnings as errors is not there... The following doesn't compile :(
bool treatWarningsAsErrors = project.CompilationOptions.TreatWarningsAsErrors; 

回答

1

您正在寻找

compilationOptions.WithGeneralDiagnosticOption(ReportDiagnostic.Error) 

Source

+0

谢谢!我不知道我是怎么错过了...现在,能够改变选项,我发现不支持保存:我得到['NotSupportedException'](http:///source.roslyn.io/#Microsoft.CodeAnalysis.Workspaces/Workspace/Workspace.cs#909),当保存解决方案文件('workspace.TryApplyChanges(...)')时,就像['FormatSolution']( https://github.com/dotnet/roslyn/blob/master/src/Samples/CSharp/FormatSolution/Program.cs)示例 – Ties

+0

它看起来像MSBuildWorkspace不是很好,http://source.roslyn .io /#Microsoft.CodeAnalysis.Workspaces.Desktop/Workspace/MSBuild/MSBuildWorkspace.cs,904这很有意义,特别是因为它们可能位于条件'中'。您可以直接编辑MSBuild XML,或者在GitHub上提交功能请求 – SLaks

+0

是的,的确如此,我现在要做的是,我只是希望利用Roslyn来做到这一点,因为我已经在使用它来测试项目是否成功丁,之前和之后;) – Ties