标签: postsharp

M1 Mac (linux-arm64) 上的 PostSharp 支持

我最近开始使用 PostSharp 在 .NET 5 应用程序上进行缓存,它在我的 2015 MacBook Pro(英特尔)上运行得非常好。然而,我最近刚刚得到了一台 M1 Mac Mini,它具有 Apple 自己的 M1 芯片组 (linux-arm64),不幸的是,我无法再构建该解决方案。我收到的错误是:

#19 8.572 /root/.nuget/packages/postsharp/6.9.8/build/PostSharp.targets(381,5): error : This version of PostSharp does not support linux-arm64 runtime. [/src/Infrastructure/Infrastructure.csproj]
#19 8.586
#19 8.586 Build FAILED.
#19 8.586
#19 8.586 /root/.nuget/packages/postsharp/6.9.8/build/PostSharp.targets(381,5): error : This version of PostSharp does not support linux-arm64 runtime. [/src/Infrastructure/Infrastructure.csproj]
#19 8.586     0 Warning(s)
#19 8.586     1 Error(s)
#19 8.586
#19 8.586 Time Elapsed 00:00:08.05
------
failed to solve: rpc error: code = Unknown desc …
Run Code Online (Sandbox Code Playgroud)

postsharp arm64 apple-m1

5
推荐指数
0
解决办法
498
查看次数

Postsharp:它是如何工作的?

根据我的另一个问题的建议,我转换了引用与PostSharp一起使用的代码:

属性:

[Serializable]
public sealed class InitAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    {
        Console.Write("Works!");
    }
}


static class Logger
{
    public static string _severity;

    public static void Init(string severity)
    {
        _severity = severity;
    }

    [Init()]
    public static void p()
    {
        Console.WriteLine(_severity);
    }
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,我无法获得任何结果(控制台上的"Works!").PostSharp属性中的断点显示永远不会输入.

任何帮助?提前致谢.

c# reflection attributes postsharp

4
推荐指数
1
解决办法
4653
查看次数

Spring.Net可以作为PostSharp吗?

几个月前我发现了PostSharp,有一段时间,它很好.

但后来法律回来时回答说他们不喜欢旧版本的许可证.然后该部门告诉我,2.0的价格高得令人无法接受(我们需要的座位数量)......我非常失望,但并不沮丧.我想,不能是唯一这样的框架.

我一直在寻找替代品,但大多数都是死的,维护得不好(特别是在文件部门),学术用途,或者以上所有(我在看你Aspect.Net)

然后我发现了Spring.Net,有一段时间,它很好.

我一直在阅读文档,它继续绘制一个似乎是AOP天堂的超级画面.我不再锁定属性来标记我想要进行代码拦截的位置,但它可以用XML配置,对它的更改不需要重新编译.大.

然后我查看了示例,并在每个使用场景中看到以下内容:

// Create AOP proxy using Spring.NET IoC container.
IApplicationContext ctx = ContextRegistry.GetContext();
ICommand command = (ICommand)ctx["myServiceCommand"];    
command.Execute();
if (command.IsUndoCapable)
{
    command.UnExecute();
}
Run Code Online (Sandbox Code Playgroud)

为什么必须存在前两行代码?它毁了一切.这意味着我不能简单地为用户提供一组方面和属性或XML配置,他们可以通过在适当的方法/类/ etc上粘贴适当的属性或在XML中编辑匹配模式来使用它们.他们必须修改他们的程序逻辑才能使其工作!

有没有办法让Spring.Net在这种情况下表现为PostSharp?(即用户只需要添加属性/ XML配置,而不是编辑任何方法的内容.

或者,PostSharp有替代品吗?我在SO上看到了一些题为这样的问题,但是他们都没有真正想要取代PostSharp,他们只是想补充它的功能.我需要完全更换.

.net aop spring.net postsharp

4
推荐指数
1
解决办法
2239
查看次数

IoC与MonoDroid中的AOP(PostSharp)

我正在开发一个MonoDroid应用程序,而且还没有一个好的DI解决方案(至少我知道).

我已经让PostSharp在MonoDroid上工作,并且我使用位置拦截方面作为一种方法,在不使用服务定位器的情况下将依赖关系注入字段/属性(无论如何都在方面之外).

以下是我目前正在使用的内容:https://github.com/mgroves/MonodroidStockPortfolio/blob/develop/MonoStockPortfolio/Framework/IoCAttribute.cs

这很粗糙,肯定需要重构,但你从基本结构中得到了想法.但是,我并不完全相信这种方法是最好的方法.如果使用或不使用PostSharp,您将如何在MonoDroid应用程序中使用DI/IoC?

c# aop dependency-injection postsharp xamarin.android

4
推荐指数
1
解决办法
1106
查看次数

C#attributes\avoid硬编码值

只是为了确认没有办法避免c#属性中的硬编码值吗?

[SomeAttribute(3+1)]
public void Foo(string s)
Run Code Online (Sandbox Code Playgroud)

或访问类成员或做任何未预编译的事情?

我现在在postharp中探索重试机制的一个很好的例子 - 并且想看看我是否可以配置系统外部的重试次数

c# attributes postsharp

4
推荐指数
1
解决办法
605
查看次数

如何保证postharp代码已被注入?

这是关于使用PostSharp的假设性问题.

我认为,如果构建的PostSharp部分由于任何原因而被遗漏,则属性将被忽略,并且构建的程序集仍然可以运行.如果我使用方面实现安全性,这将是一个大问题.

如何在运行时确认构建的PostSharp阶段发生了以及我的方面是否在程序集中?

c# aop postsharp

4
推荐指数
1
解决办法
491
查看次数

如何控制使用AutoDual生成的COM接口的生成接口GUID

我的问题是我有一个.NET项目,其中100个类可以被COM看到.使用类上的AutoDual属性将类发布到COM.我的问题是我想让编译器自动生成COM接口(因此这个AutoDual)但是我希望能够为生成的接口指定GUID.

目标是确保小的变化,如:

  • 添加方法
  • 修改特定客户端未使用的方法
  • 增加我的DLL的版本号

不会破坏客户端(使用早期绑定的客户端)并强制它们重新编译.

我知道(在这里阅读:为什么我不应该使用AutoDual?),解决方法是手动创建100多个接口并为每个方法提供GUID和DispId,以便上面提到的更改不再破坏旧客户端.但是,我想避免实际手动编写这些接口,并且在需要在类和接口中添加新方法时必须维护它们.

到目前为止,我已经设法"自动"将这些类发布到COM,而无需编写COM特定代码,方法是使用PostSharp注入以下属性:

上课:

  • 标记有ComVisible特性(真)
  • ClassInterfaceType.AutoDual
  • GUID("我自己生成的指导,但对于gievn类FullName不变")

关于公共方法和属性:

  • DispId(xx)//其中xx再次为dispId生成,但对于给定的类名/方法名称对不变.

这样做了:

  • 类GUID是不变的,我对它们做了什么改变
  • DispId在生成的界面上也是不变的

只有接口GUID会产生问题,因为每次添加方法时它都会变化.

我现在需要的是一种方法来确保给定类的生成接口始终具有相同的GUID,方法是:

  • 我不知道的特定属性,如类上的'AutoDualInterfaceGuid("我的GUID")
  • 使用我选择的GUID生成接口的预编译过程
  • 修改生成的COM接口的GUID的后编译过程
  • 一种修改COM接口的默认生成的方法,以便将GUID逻辑放在那里.

任何关于如何为生成的COM接口设置特定GUID的想法都将非常感激.

.net c# com postsharp

4
推荐指数
1
解决办法
1564
查看次数

获取参数名称

如何获得方法的参数NAMES.这些示例显示了如何获取参数的,而不是NAMES.我想看到parma = 99,parmb = 1.不仅仅是99,1.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Diagnostics;
    using PostSharp.Aspects;

    namespace GettingParmNames
    {
        public class Program
        {
           static void Main(string[] args)
           {
               Foo myfoo = new Foo();
               int sum = myfoo.DoA(99, 1);
               Console.WriteLine(sum.ToString());

               Console.ReadKey();
           }
       }

    public class Foo
    {
        [ExceptionAspect]
        public int DoA(int parma, int parmb)
        {
            int retVal;
            try
            {
                retVal = parma + parmb;
                if (parma == 99)
                {
                    throw new Exception("Fake …
Run Code Online (Sandbox Code Playgroud)

postsharp

4
推荐指数
1
解决办法
1069
查看次数

Postsharp OWIN版本不匹配

我在我的项目中使用PostSharp 4.2.22.0和Owin 3.0.1.

当我编译时,我收到以下错误:

未处理的异常(4.2.22.0,postsharp-net40-x86-srv.exe,CLR
4.0.30319.394271,Release):PostSharp.Sdk.CodeModel.AssemblyLoadException:找不到程序集'microsoft.owin.security,version = 2.1.0.0,culture =中立,publickeytoken = 31bf3856ad364e35'.[版本不匹配]

但PostSharp是否与Owin有关?为什么Owin版本对PostSharp很重要,这些是两个完全不同的包.

c# asp.net postsharp owin

4
推荐指数
1
解决办法
556
查看次数

如何在没有安装Visual Studio的情况下卸载Postsharp或更改它的许可证?

我在构建服务器上安装了Postsharp.只有没有安装Visual Studio的Microsoft Build Tools(MSBuild).

现在我需要更改postharp的许可证.当我运行安装程序时,它表示已经安装了postsharp.没有"卸载"选项,也没有"更改许可证".官方手册说可以使用Visual Studio扩展面板卸载postsharp.由于我没有安装Visual Studio,我想知道如何删除postsharp或更改其许可证.

msbuild postsharp

4
推荐指数
1
解决办法
2047
查看次数