0

我有以下情况:

解决方案

whereProjectA是一个简单的类库,并且ProjectB是一个控制台应用程序。

ProjectA.Class1.cs包含以下代码:

using System;

namespace ProjectA
{
    public class Class1
    {
        public void A()
        {
            B();
        }

        [Weaver]
        public void B()
        {
            Console.WriteLine("I'm in B()");
        }
    }
}

ProjectA.Weaver.cs包含:

using MethodDecorator.Fody.Interfaces;
using System;
using System.Reflection;

namespace ProjectA
{
    class Weaver : Attribute, IMethodDecorator
    {
        public void Init(object instance, MethodBase method, object[] args)
        {
            Console.WriteLine("Initialising");
        }

        public void OnEntry()
        {
            Console.WriteLine("Entry");
        }

        public void OnException(Exception exception)
        {
            Console.WriteLine("Exception");
        }

        public void OnExit()
        {
            Console.WriteLine("Exit");
        }
    }
}

控制台应用程序的 ( ProjectB.Program.cs) 入口点包含:

using ProjectA;

namespace ProjectB
{
    class Program
    {
        static void Main(string[] args)
        {
            var a = new Class1();

            a.A();
        }
    }
}

ProjectA.FodyWeavers.xml包含:

<?xml version="1.0" encoding="utf-8"?>
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
    <MethodDecorator></MethodDecorator>
</Weavers>

如果我在里面放了一个断点Class1.A(),并尝试单步执行( ),会弹出F11以下Source Not Available窗口:

来源不可用

有没有办法:

  • 防止调试器尝试进入编织器
  • 告诉调试器 weaver 的源代码在哪里

我试过了:

  • 仅启用我的代码
  • 将属性添加到Weaver.cs方法 ( [DebbugerNonUserCode], [DebbugerStepThrough], [DebbugerHidden]...)
  • 将 Fody 引用添加到ProjectB
  • 将项目的构建调试信息设置为Full

使用:

  • Visual Studio 2019 社区版
  • .NET 框架 4.7.2
  • 福迪 6.2.0
  • 方法装饰器.Fody 1.1.0
4

2 回答 2

0

据我所知,VS 团队,其实目前还没有解决这个问题。我自己试过这个,甚至禁用反汇编也没有解决它。

Visual Studios 有一个扩展来禁用“源不可用”窗口,但是单步执行代码看起来就像 Visual Studio 会拒绝执行此操作(除非您单击多次,直到到达第一种方法)。

Visual Studio 开发人员社区页面中的一个线程在此处

“禁用无可用源选项卡”扩展在这里,您也可以通过单击Extensions选项卡在 Visual Studio 中搜索它Manage Extensions,然后搜索“禁用无可用源选项卡”,然后单击安装。

在 Visual Studios 对此做任何事情或有更好的扩展之前,我的建议是在调用堆栈更深处设置一个断点(例如,将断点设置在Init(object instance, MethodBase method, object[] args))。

于 2020-06-14T02:39:23.387 回答
0

新版本的MethodDecoratorweaver ( v. 1.1.1 ) 已经发布,感谢 Tom Englert 解决了这个问题。

链接到 PR 254

链接到 GH 页面中提出的问题

于 2020-07-01T13:25:58.990 回答