我最近开始使用 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一起使用的代码:
属性:
[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属性中的断点显示永远不会输入.
任何帮助?提前致谢.
几个月前我发现了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,他们只是想补充它的功能.我需要完全更换.
我正在开发一个MonoDroid应用程序,而且还没有一个好的DI解决方案(至少我知道).
我已经让PostSharp在MonoDroid上工作,并且我使用位置拦截方面作为一种方法,在不使用服务定位器的情况下将依赖关系注入字段/属性(无论如何都在方面之外).
以下是我目前正在使用的内容:https://github.com/mgroves/MonodroidStockPortfolio/blob/develop/MonoStockPortfolio/Framework/IoCAttribute.cs
这很粗糙,肯定需要重构,但你从基本结构中得到了想法.但是,我并不完全相信这种方法是最好的方法.如果使用或不使用PostSharp,您将如何在MonoDroid应用程序中使用DI/IoC?
只是为了确认没有办法避免c#属性中的硬编码值吗?
[SomeAttribute(3+1)]
public void Foo(string s)
Run Code Online (Sandbox Code Playgroud)
或访问类成员或做任何未预编译的事情?
我现在在postharp中探索重试机制的一个很好的例子 - 并且想看看我是否可以配置系统外部的重试次数
这是关于使用PostSharp的假设性问题.
我认为,如果构建的PostSharp部分由于任何原因而被遗漏,则属性将被忽略,并且构建的程序集仍然可以运行.如果我使用方面实现安全性,这将是一个大问题.
如何在运行时确认构建的PostSharp阶段发生了以及我的方面是否在程序集中?
我的问题是我有一个.NET项目,其中100个类可以被COM看到.使用类上的AutoDual属性将类发布到COM.我的问题是我想让编译器自动生成COM接口(因此这个AutoDual)但是我希望能够为生成的接口指定GUID.
目标是确保小的变化,如:
不会破坏客户端(使用早期绑定的客户端)并强制它们重新编译.
我知道(在这里阅读:为什么我不应该使用AutoDual?),解决方法是手动创建100多个接口并为每个方法提供GUID和DispId,以便上面提到的更改不再破坏旧客户端.但是,我想避免实际手动编写这些接口,并且在需要在类和接口中添加新方法时必须维护它们.
到目前为止,我已经设法"自动"将这些类发布到COM,而无需编写COM特定代码,方法是使用PostSharp注入以下属性:
上课:
关于公共方法和属性:
这样做了:
只有接口GUID会产生问题,因为每次添加方法时它都会变化.
我现在需要的是一种方法来确保给定类的生成接口始终具有相同的GUID,方法是:
任何关于如何为生成的COM接口设置特定GUID的想法都将非常感激.
如何获得方法的参数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.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很重要,这些是两个完全不同的包.
我在构建服务器上安装了Postsharp.只有没有安装Visual Studio的Microsoft Build Tools(MSBuild).
现在我需要更改postharp的许可证.当我运行安装程序时,它表示已经安装了postsharp.没有"卸载"选项,也没有"更改许可证".官方手册说可以使用Visual Studio扩展面板卸载postsharp.由于我没有安装Visual Studio,我想知道如何删除postsharp或更改其许可证.
postsharp ×10
c# ×6
aop ×3
.net ×2
attributes ×2
apple-m1 ×1
arm64 ×1
asp.net ×1
com ×1
msbuild ×1
owin ×1
reflection ×1
spring.net ×1