0

使用 Dotfuscator Professional V4.8(由 PreEmptive Solutions 提供),是否可以将合并(也称为链接)非主程序集的公共类型作为合并程序集的公共类型?

也就是说,假设程序集 A 有一个名为 Foo 的公共类型,而程序集 B 有一些公共方法,其签名包括类型 Foo。在将 A 和 B 合并到 C 中后,以 B 作为主要程序集,我希望 Foo 成为 C 的公共类型。

似乎 dotfuscator 总是使类型 Foo 成为 C 的内部类型。

  • 我尝试将 [System.Reflection.Obfuscation(Exclude=true)] 添加到类型 Foo,但它似乎没有效果。
  • 我不在乎新类型与原始程序集中的类型不兼容。
4

1 回答 1

3

注意:我在 Dotfuscator 团队工作。

这不应该发生。我只是做了两个小例子,无法重现你提到的行为。我的基本设置是

Tester.exe (Primary Assembly, both merged into out.exe)
  References Library
  public class Program { public void Method(Foo foo) {} }
Library.dll
  public class Foo {}

Tester.exe (Primary Assembly, all 3 merged into out.exe)
  References LibraryA & LibraryB
LibraryA.dll
  public class Foo {}
LibraryB.dll
  References LibraryA
  public class C { public void Method(int x, Foo foo) {} }

在这两种情况下,Foo 仍然是公开的。

您所描述的行为通常是用户想要发生的,但我们不会因为合并而故意更改任何可访问性级别。

如果您的设置与我的有所不同,请告诉我。我很想看看你的确切复制品。如果可以,请将其发送至 support@preemptive.com 并参考此线程。谢谢。

于 2011-01-19T19:40:25.650 回答