У меня есть следующий сценарий:
Где ProjectA
— простая библиотека классов, а 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
), появится следующее окно Источник недоступен:
Есть ли способ:
- Предотвратить попытку отладчика войти в Weaver
- Сообщите отладчику, где находится исходный код ткача.
Я пытался:
- Включение Только мой код
- Добавление атрибутов к методам
Weaver.cs
([DebbugerNonUserCode]
,[DebbugerStepThrough]
,[DebbugerHidden]
...) - Добавление ссылок Fody на
ProjectB
- Установка отладочной информации сборки проекта на
Full
С использованием:
- Visual Studio 2019 Community Edition
- .NET Framework 4.7.2
- Фоди 6.2.0
- МетодDecorator.Fody 1.1.0
Init
иB
, и отладчик будет приостановлен. появляетсяsource not filed
, я думаю, потому что вы пытаетесь отлаживать код дизассемблирования, а не код С#. - person Mohammed Sajid   schedule 14.06.2020