Переименование типа из объединенной библиотеки
В основной библиотеке есть пространство имен 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 и почему, черт возьми, это зависит от запутывания.