我正在使用nlog创建具有不同loglevels foreach类的不同记录器。每个登录都包含类和方法的名称。
我还使用PostSharp来创建我的方法代码。创建的代码基本上获取当前类的记录器并写入logentry。
我的问题是我需要混淆我的程序并想记录班级的未碰撞名称。
混淆我的程序后,它可以正常工作,但记录了混淆的classNames。
我搜索了网络以寻求解决方案,并从PostSharp找到了此博客:
http://www.postsharp.net/blog/post/post/whate28099s-new-inew-inew-in-postsharp-21-support-for-obfuscation-p.-p.-p.-post-28dotfuscator)
问题是我不知道如何实现此"后吞噬步骤(由PostSharp实施)"。
我知道如何创建一个MSBUILD项目文件以及如何使用msbuild.exe运行它,但我不知道" PostSharp.addin.postobfuscation.targets"one_answers" PostObfuscationRemap"是什么?
我希望我正确地描述了我的问题,你们中的一个有答案。
您发现的PostSharp的博客文章实际上是关于解决不同的问题 - PostSharp 2.1本身与混淆工具的不兼容。PostSharp 3.0 已经与混淆工具兼容,并且博客文章与这些较新版本无关。
您的问题是不同的 - 我怀疑您的记录代码在运行时访问了类的名称,因此会收到一个混淆的类名称。您应该尝试在编译时准备一个记录格式字符串,并将其存储在该方面的字段中。这样,您可以将原始类名称存储在字符串中并在运行时访问。
[Serializable]
public sealed class TraceAttribute : OnMethodBoundaryAspect
{
private string enteringMessage;
public override void CompileTimeInitialize(MethodBase method, AspectInfo aspectInfo)
{
string methodName = method.DeclaringType.FullName + method.Name;
this.enteringMessage = "Entering " + method.DeclaringType.FullName + method.Name;
}
public override void OnEntry(MethodExecutionArgs args)
{
Console.WriteLine(this.enteringMessage);
}
}
感谢您的答案,您对博客文章不再相关的正确。
我现在正在尝试较新版本的PostSharp,并且重新映射似乎现在可以使用。
但是我的代码不是问题。我的代码看起来实际上非常相似。我错过了一些文件,例如.psproj和globalaspect.cs文件。我发现这是我的实际问题。
我错过了这些文件,因为我无法使用Nuget自动安装PostSharp,而Nuget通常会创建这些文件。