PostSharp重新映射混淆代码

时间:2014-02-03 10:25:56

标签: logging msbuild nlog postsharp dotfuscator

我正在使用NLog创建具有不同日志级别的不同记录器。每个logmessage都包含类的名称和方法。

我也在使用PostSharp为我的方法创建代码。创建的代码基本上获取当前类的记录器并编写一个logentry。

我的问题是我需要对程序进行模糊处理,并希望记录该类的未经模糊处理的名称。

在混淆了我的程序后,它可以正常工作,但会记录混淆的类名。

我在网上搜索解决方案,并从PostSharp找到了这个博客:

http://www.postsharp.net/blog/post/Whate28099s-New-in-PostSharp-21-Support-for-Obfuscation-%28Dotfuscator%29

问题是我无法实现这个“后混淆步骤(由PostSharp实现)”。

我知道如何创建MSBuild项目文件以及如何使用MSBuild.exe运行它,但我不知道“PostSharp.AddIn.PostObfuscation.targets”和“PostObfuscationRemap”正在做什么或它们是什么样子。

我希望我能正确描述我的问题,并且你们中的一个人有答案。

2 个答案:

答案 0 :(得分:0)

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);
    }
}

答案 1 :(得分:0)

感谢您的回答,您对博客文章不再具有相关性是正确的。

我现在正在尝试更新版本的PostSharp,现在重新映射似乎正常。

但我的代码不是问题。我的代码看起来非常相似。我错过了像.psproj和GlobalAspect.cs文件这样的文件。我发现这是我的实际问题。

我错过了这些文件,因为我无法使用NuGet自动安装PostSharp,而NuGet通常会自己创建这些文件。