Переименование типа из объединенной библиотеки

В основной библиотеке есть пространство имен Main.TargetNamespace, В объединенной библиотеке есть публичный тип Merged.SourceNamespace.Type,

Мне нужно переместить тип Merged.SourceNamespace.Type в Main.TargetNamespace как public,

я сделал

[assembly: Obfuscation(Feature = "ilmerge custom parameters: /internalize:exclude.file", Exclude = false)]
[assembly: Obfuscation(Feature = "Apply to type Merged.SourceNamespace.Type: type renaming pattern Main.TargetNamespace.Type", Exclude = false)]

Но отключена только интернализация (т.е. работает первая строка): тип Merged.SourceNamespace.Type является общедоступным и доступным в запутанном собрании.

Как я могу сохранить тип Merged.SourceNamespace.Type из объединенной публичной библиотеки и переместите ее в указанное пространство имен Main.TargetNamespace.Type?

1 ответ

Решение

Чтобы сохранить Merged.SourceNamespace.Type публично, следует исключить из интернализации:

namespace Merged.SourceNamespace
{
    [Obfuscation(Feature = "internalization", Exclude = true)]
    public class Type
    {
        // ...
    }
}

Соответствующие настройки запутывания Main Сборка должна выглядеть так:

[assembly: Obfuscation(Feature = "merge with Merged.dll", Exclude = false)]
[assembly: Obfuscation(Feature = "Apply to type Merged.SourceNamespace.Type: type renaming pattern Main.TargetNamespace.Type", Exclude = false)]

PS Общий совет. Хотя данный рецепт позволяет достичь цели, я настоятельно рекомендую избегать его использования в производственных сценариях. И вот почему: публичный API сборки должен определяться исключительно исходным кодом. Не полагайтесь на инструмент, такой как Eazfuscator.NET, чтобы выполнить преобразование API для вас. В противном случае вещи быстро становятся волосатыми. Например, вашему коллеге или будущему вы можете испытывать трудности, пытаясь выяснить, что происходит с этим API и почему, черт возьми, это зависит от запутывания.

Другие вопросы по тегам