- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 roslyn API 编写 DiagnosticAnalyzer 和 CodeFix。
收集完所有字符串和字符串插值后,我想将它们全部写入一个文件,但我不确定如何以最佳方式执行此操作。
当然,我总是可以简单地执行 File.WriteAllText(...)
,但我想向用户公开更多控制权。
我也不确定如何最好地触发此文件的生成,所以我的问题是:
我不想对文件名进行硬编码,将此设置公开给代码分析器用户的最佳方式是什么?配置文件?如果是这样,我将如何访问它?即:我怎么知道目录?
如果文件中缺少一个字符串,我想建议一个代码修复,例如“项目包含更改的或新的字符串,重新生成字符串文件”。这是最好的方法吗?或者是否可以在 visual studio 中添加按钮或其他东西?
我正在从命令行调用 devenv.com
可执行文件来触发构建,有没有办法强制我的代码修复在构建时或之前/之后运行?或者我是否必须“手动”使用 roslyn 加载解决方案并执行我的代码修复?
最佳答案
我刚刚完成了一个与此相关的项目。您需要做/知道一些事情。
File.WriteAllText()
您可以看到如何将可移植类库转换为常规 here
我已经用 roslyn 打开了一个错误,但您可以通过覆盖预览来处理实例,您可以看到如何这样做 here
您可以使用附加文件,但我知道在我使用资源文件的版本上,默认情况下它们没有标记为附加文件,它们是 embeddedResources。
因此,为了让我的用户不必手动将资源标记为 additonalFiles,我编写了一个函数来使用 xDoc 从 csproj 文件中获取与资源文件关联的 Designer.cs 文件,如果您选择解析csproj 文件:
protected List<string> GetEmbeddedResourceResxDocumentPaths(Project project)
{
XDocument xmldoc = XDocument.Load(project.FilePath);
XNamespace msbuild = "http://schemas.microsoft.com/developer/msbuild/2003";
var resxFiles = new List<string>();
foreach (var resource in xmldoc.Descendants(msbuild + "EmbeddedResource"))
{
string includePath = resource.Attribute("Include").Value;
var includeExtension = Path.GetExtension(includePath);
if (0 == string.Compare(includeExtension, RESX_FILE_EXTENSION, StringComparison.OrdinalIgnoreCase))
{
var outputTag = resource.Elements(msbuild + LAST_GENERATED_TAG).FirstOrDefault();
if (null != outputTag)
{
resxFiles.Add(outputTag.Value);
}
}
}
return resxFiles;
}
关于c# - 如何从 roslyn 代码分析器输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44496033/
我是一名优秀的程序员,十分优秀!