小编xoo*_*ofx的帖子

MSBuild将动态生成的文件复制为项目依赖项的一部分

我有一个自定义的msbuild任务,它生成一些输出文件到ProjectA的输出目录($(TargetDir)).当前代码是这样的:

<MyCustomTask ...>
   <Output TaskParameter="OutputFiles" ItemName="FileWrites"/>
</MyCustomTask>
Run Code Online (Sandbox Code Playgroud)

ProjectB正在引用ProjectA,但问题是在构建ProjectB时,MyCustomTask生成的文件不会复制到ProjectB的输出目录中.

我们如何使用MSBuild将动态生成的附加文件作为项目依赖项的一部分进行复制?

c# msbuild build-process

18
推荐指数
1
解决办法
9116
查看次数

如何使用Roslyn传递收集所有MethodDeclarationSyntax?

给出一个列表,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)

c# roslyn

7
推荐指数
1
解决办法
251
查看次数

标签 统计

c# ×2

build-process ×1

msbuild ×1

roslyn ×1