我想将我的项目迁移到.NET 6和C# 10。作为迁移的一部分,我想使用global using
指令。
Visual Studio2022是否有任何工具或帮助来进行"to global using
directive“重构?
发布于 2021-11-16 08:33:30
将名称空间设置为全局应该不需要在其他文件中使用相应的名称空间。删除不必要的使用诊断允许您选择修复的范围:
如果由于某种原因没有显示诊断程序,您可以通过规则代码(IDE0005)通过.editorconfig
启用它:
# IDE0005: Using directive is unnecessary.
dotnet_diagnostic.IDE0005.severity = suggestion
发布于 2022-01-27 11:25:58
我刚刚面对了同样的问题,并编写了简单的控制台应用程序来解决这个问题。
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);
}
https://stackoverflow.com/questions/69984766
复制相似问题