簡體   English   中英

如何在另一個項目中引用 Fody MethodDecorator?

[英]How to reference a Fody MethodDecorator in another project?

我正在嘗試使用Fody MethodDecorator來記錄多個項目中的方法進入/退出。 我在 visual studio 中創建了一個項目,並按照Fody MethodDecorator 項目中 ReadMe.md 中的描述實現了IMethodDecorator接口。

Fody MethodDecorator 在我實現了IMethodDecorator接口的一個項目中運行良好,我可以記錄方法進入/退出。 但是當我嘗試通過添加對我的第一個項目的引用來記錄其他項目中的方法進入/退出時,沒有任何其他項目的記錄。

我已經創建了一個 github 存儲庫,其中包含一個最小的工作示例,只是為了顯示問題,單擊此處獲取鏈接。

還有其他人遇到了同樣的問題, 例如 3 年前的這篇帖子 但該帖子中的解決方案是將 Fody 和 MethodDecorator nuget 包添加到所有項目。 我已經將兩個 nuget 包添加到所有項目中。 我還將FodyWeavers.xml添加到所有項目中。

如果您想知道我的代碼是什么樣子,只需查看 git 存儲庫即可。 為了記錄在其他項目中工作的方法進入/退出,我還需要做些什么嗎?

我想簡單地添加對我的第一個項目的引用,並重用第一個項目中的方法裝飾器。 我正在使用 .Net 4.8、Fody 6.5.3 和 MethodDecorator.Fody 1.1.1。

編輯如果您下載存儲庫並收到錯誤:嘗試對評估的“$(MsBuildMajorVersion)”進行數字比較...這顯然是由於 Visual Studio 中的錯誤,可以通過重新啟動來克服。

不是真正的問題的答案,但我最終切換到MethodBoundaryAspect.Fody 它是一個 nuget 包,與MethodDecorator.Fody執行相同的操作,並且具有您以幾乎相同的方式實現的接口。

通過引用我只在其中一個項目中創建的屬性,我讓 MethodBoundaryAspect.Fody 在多個項目中工作。 你還必須添加的NuGet包MethodBoundaryAspect.FodyFody ,也是FodyWeavers.xml文件添加到每個項目,雖然。

為了使 Fody.MethodDecorator 在其他項目中工作,您需要在每個項目中添加模塊[module: Interceptor]

我的建議是在每個項目中創建一個如下所示的接口,並確保您的類繼承自該接口。 (這樣你只在項目的一個地方添加了模塊)

[module: Interceptor]


public interface IInterceptor
{
    // no methods here.
    // the interface is used only to register the Interceptor attribute at the module level.
}

public class SomeClass : IInterceptor
{
    [Interceptor]
    public void SomeMethod()
    {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM