0

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

我还使用 PostSharp 围绕我的方法创建代码。创建的代码基本上获取当前类的记录器并写入日志条目。

我的问题是我需要混淆我的程序并想要记录类的未混淆名称。

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

我在网上搜索了解决方案,并从 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”在做什么或它们的样子。

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

4

2 回答 2

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);
    }
}
于 2014-02-06T18:15:19.143 回答
0

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

我现在正在尝试更新版本的 PostSharp,重新映射现在似乎可以工作了。

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

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

于 2014-02-07T18:45:32.087 回答