首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >到全局使用指令重构

到全局使用指令重构
EN

Stack Overflow用户
提问于 2021-11-16 06:42:25
回答 2查看 210关注 0票数 0

我想将我的项目迁移到.NET 6和C# 10。作为迁移的一部分,我想使用global using指令。

Visual Studio2022是否有任何工具或帮助来进行"to global using directive“重构?

EN

回答 2

Stack Overflow用户

发布于 2021-11-16 08:33:30

将名称空间设置为全局应该不需要在其他文件中使用相应的名称空间。删除不必要的使用诊断允许您选择修复的范围:

如果由于某种原因没有显示诊断程序,您可以通过规则代码(IDE0005)通过.editorconfig启用它:

代码语言:javascript
运行
复制
# IDE0005: Using directive is unnecessary.
dotnet_diagnostic.IDE0005.severity = suggestion
票数 1
EN

Stack Overflow用户

发布于 2022-01-27 11:25:58

我刚刚面对了同样的问题,并编写了简单的控制台应用程序来解决这个问题。

代码语言:javascript
运行
复制
using System.Text;

if (args.Length == 0 || string.IsNullOrEmpty(args[0]))
    throw new ArgumentException("You must specify directory");
var directoryForScan = args[0];
if (!Directory.Exists(directoryForScan))
{
    throw new ArgumentException($"{directoryForScan} not exist");
}

var filesEnumeration = Directory.EnumerateFiles(directoryForScan, "*.cs", SearchOption.AllDirectories);
var directorySeparator = Path.DirectorySeparatorChar;
var usingSet = new SortedSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (var filePath in filesEnumeration.Where(it => !it.Contains($"{directorySeparator}bin{directorySeparator}") 
                                                  && !it.Contains($"{directorySeparator}obj{directorySeparator}")))
{
    await ProcessUsingAsync(filePath, usingSet);
}

var resultFilePath = Path.Combine(directoryForScan,"GlobalUsings.cs");

await using var resultStream = new FileStream(resultFilePath, FileMode.Create, FileAccess.Write, FileShare.Write);
await using var writer = new StreamWriter(resultStream, Encoding.UTF8);
foreach (var item in usingSet)
{
    Console.WriteLine(item);
    await writer.WriteAsync("global ");
    await writer.WriteLineAsync(item);
}

await resultStream.FlushAsync();

static async Task ProcessUsingAsync(string filePath, ISet<string> usingSet)
{
    await using var fileStream = File.OpenRead(filePath);
    using var reader = new StreamReader(fileStream);
    string? currentLine;
    do
    {
        currentLine = await reader.ReadLineAsync();
        if (currentLine is not null 
            && currentLine.StartsWith("using")
            && currentLine.EndsWith(";") 
            && !currentLine.Contains(" static ") 
            && !currentLine.Contains("="))
        {
            usingSet.Add(currentLine);
        }
    } while (currentLine != null);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69984766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档