我有一个自定义的msbuild任务,它生成一些输出文件到ProjectA的输出目录($(TargetDir)).当前代码是这样的:
<MyCustomTask ...>
<Output TaskParameter="OutputFiles" ItemName="FileWrites"/>
</MyCustomTask>
Run Code Online (Sandbox Code Playgroud)
ProjectB正在引用ProjectA,但问题是在构建ProjectB时,MyCustomTask生成的文件不会复制到ProjectB的输出目录中.
我们如何使用MSBuild将动态生成的附加文件作为项目依赖项的一部分进行复制?
给出一个列表,MethodDeclarationSyntax
我想收集解决方案中的所有方法,这些方法可以传递地调用此方法.
我一直在使用以下代码:
var methods = new Stack<MethodDeclarationSyntax>();
... // fill methods with original method to start from
var visited = new HashSet<MethodDeclarationSyntax>();
while (methods.Count > 0)
{
var method = methods.Pop();
if (!visited.Add(method))
{
continue;
}
var methodSymbol = (await solution.GetDocument(method.SyntaxTree).GetSemanticModelAsync()).GetDeclaredSymbol(method);
foreach (var referencer in await SymbolFinder.FindCallersAsync(methodSymbol, solution))
{
var callingMethod = (MethodDeclarationSyntax) referencer.CallingSymbol.DeclaringSyntaxReferences[0].GetSyntax();
methods.Push(callingMethod);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是MethodDeclarationSyntax
看起来不是单身,所以这个循环永远在运行,一次又一次地访问相同的方法.
MethodDeclarationSyntax
在Dictionary/Hashset中唯一标识a的正确方法是什么?
编辑1)
作为一种解决方法,我使用以下内容MethodDeclarationSyntaxComparer
初始化我的HashSet
,但它看起来非常脆弱:
private class MethodDeclarationSyntaxComparer: IEqualityComparer<MethodDeclarationSyntax>
{
public bool Equals(MethodDeclarationSyntax x, MethodDeclarationSyntax …
Run Code Online (Sandbox Code Playgroud)