【问题标题】:Can postsharp aspects be used on website projects?可以在网站项目中使用 postsharp 方面吗?
【发布时间】:2015-01-08 13:56:22
【问题描述】:

我正在尝试在 VS2012 的网站项目中使用 PostSharp 方面。当我设置一个 Web 应用程序项目时,它似乎工作正常,但是当我将 aspect 属性应用于网站项目中页面上的方法时,它编译并运行良好,但我的 OnMethodBoundaryAspect 永远不会受到影响。我尝试设置断点并从方面方法进行日志记录。

PostSharp 是否支持网站项目?如果是这样,我错过了什么?

请不要告诉我为什么要使用网站而不是网络应用程序。不幸的是,这是一个要求(不要问)。

这是我的方面代码(全部在 vb.net 中),但就像我说的,它在 web 应用程序项目中运行良好:

Imports PostSharp.Aspects

Namespace TestAopLib

<Serializable>
Public Class AopTester
    Inherits OnMethodBoundaryAspect

    Public Overrides Sub OnEntry(args As MethodExecutionArgs)
        MyBase.OnEntry(args)
        Debug.WriteLine("In OnEntry")
    End Sub

    Public Overrides Sub OnExit(args As MethodExecutionArgs)
        MyBase.OnExit(args)
        Debug.WriteLine("In OnExit")
    End Sub

    Public Overrides Sub OnSuccess(args As MethodExecutionArgs)
        MyBase.OnSuccess(args)
        Debug.WriteLine("In OnSuccess")
    End Sub

    Public Overrides Sub OnException(args As MethodExecutionArgs)
        MyBase.OnException(args)
        Debug.WriteLine("In OnException")
    End Sub

End Class

End Namespace

【问题讨论】:

  • 为什么 PostSharp 人会为网站“项目”而烦恼?它们不是项目,也没有其他类似的东西。它们是儿童的玩具。
  • @JohnSaunders 虽然我不同意你的观点,但你的评论没有帮助。
  • 面向切面的编程并不简单。当为 Visual Studio 项目开发的工具不适用于网站“项目”时,这不足为奇,因为它们的独特之处在于没有项目文件。十年来,它们一直以这种方式“特别”。
  • PostSharp 依赖于 IL 编织(可能更多),这发生在项目构建之后。网站“项目”不建立。也许如果您使用预编译功能?但是当我使用 PostSharp 时,它在很大程度上依赖于 MSBUILD,也就是项目文件,而网站“项目”没有。他们必须使用完全不同的机制来处理网站“项目”。
  • 是 ASP.NET 网站吗?访问以下内容:postsharp4aspnet.codeplex.com PostSharp 原生支持 ASP.NET Web 应用程序

标签: vb.net visual-studio-2012 aop postsharp web-site-project


【解决方案1】:

有一个open-source project 可以实现这一点(CodingSource 也提到过)。但是,它是为 PostSharp 2.x 完成的,既不推荐也不支持(如项目主页所述)。如果没有重大问题,它很可能无法与 PostSharp 3+ 一起使用。

PostSharp(目前)通过 MSBuild(John Saunders 也提到过)集成,网站项目不使用它。

虽然 PostSharp 的核心是一个命令行工具,但它从 MSBuild 中获取了大量信息,以至于很难使其单独工作(一开始既没有建议,也没有记录,也没有支持)。

P.S.:我目前为 PostSharp 技术工作。

【讨论】:

  • 丹尼尔,感谢您的回复。您不推荐该工具,因此您不必必须说您在 PostSharp 上工作,但这可能是个好主意。我知道您在个人资料中这么说,但也许在您的回答中也这么说。
  • @JohnSaunders 我知道我的回答不是推荐接近推荐自己产品的东西。我只是想知道你的意思是说我的从属关系应该与推荐自己的产品或提高答案的可信度时一样。谢谢!
  • 我建议您说明您的从属关系,以明确 1) 您知道自己在说什么,以及 2) 这不是匿名的自我推销
  • @JohnSaunders 2) 在这种情况下有点弱,因为我说不要使用我们的旧副项目。所以唯一的好处是 OP 不会生我们的气。无论如何感谢您的澄清。
  • @Amon 对于无项目网站(在 VS 2017 及更高版本中无法从 UI 创建 IIRC),它仍然是正确的。但是,所有具有 csproj/vbproj(.NET 或 .NET Core)的 Web 项目都按预期工作(从那时起这也没有改变)。
猜你喜欢
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
相关资源
最近更新 更多