我在这里使用Roslyn和AdhocWorkspace来重命名对函数的引用时有些奇怪。首先,我应该从解释开始-这个项目中有很多重命名操作,这是唯一一次似乎不起作用并且似乎有点异常的情况。在下面的代码中,为了安全起见,我做了一些引用。
首先,带有要尝试重命名的引用的类...
public class ApplicationEntity : BaseAggregateRoot
{
private ApplicationEntity(Guid id) : base(id)
{
}
protected override void RegisterEvents()
{
RegisterEvent<ApplicationEntityAdded>(OnApplicationEntityAdded);
}
private void OnApplicationEntityAdded(ApplicationEntityAdded args)
{
Id = args.AggregateId;
}
}
我的重命名功能...
public async Task<AdhocWorkspace> UpdateSymbols(AdhocWorkspace workspace, ProjectId projectId, string oldValue, string newValue)
{
var solution = workspace.CurrentSolution;
var project = solution.GetProject(projectId);
var compilation = await project.GetCompilationAsync();
var symbol = compilation.GetSymbolsWithName(s => string.Compare(s, oldValue) == 0, SymbolFilter.All).FirstOrDefault();
var refs = await SymbolFinder.FindReferencesAsync(symbol, solution);
if (symbol != null)
{
solution = await Renamer.RenameSymbolAsync(solution, symbol, newValue, solution.Workspace.Options);
var success = workspace.TryApplyChanges(solution);
solution = workspace.CurrentSolution;
}
return workspace;
}
...和我打来的电话...
workspace = await adhocWorkplaceManager.UpdateSymbols(workspace, currentProject.Id, "OnApplicationEntityAdded", $"On{name}Added");
solution = workspace.CurrentSolution;
我正在尝试重命名OnApplicationEntityAdded函数。代码重命名了函数本身,但没有重命名RegisterEvents函数中对它的引用。当我进入文件本身并改回名称时,Roslyn / Intellisense可以看到它们之间的相关性,我还缺少什么吗?这可能是AdhocWorkspace的问题吗?整个项目正在构建中,所有文件和项目引用均已正确添加到工作区中,我什至尝试将所有引用公开。
让我知道是否需要澄清。 Framework .NET Core 2.1,似乎还不是它的标签