У меня есть библиотека .NET, которая внутренне имеет зависимость от Castle.Core.dll, так как я использую Castle's DynamicProxy (в частности, «прокси-сервер без цели») для выполнения перехвата вызовов методов для пользовательской обработки. Поскольку моя сборка сильно названа, я хочу использовать ILMerge, чтобы объединить все мои зависимости в единую сборку для развертывания, интернализируя типы моих зависимостей, чтобы не подвергать их неоправданно моим потребителям. Это особенно важно для случая NuGet, где, если моя сборка сильно названа, мне нужно установить зависимости пакета для версии зависимостей или разрывов разрешения сборки, поскольку Castle.Core.dll также сильно именем. Обратите внимание, что выпуск моего проекта в виде сильно названной сборки - это функция, оцененная моими пользователями, поэтому удаление сильного имени не является вариантом.Возможно ли интернализировать классы DynamicProxy Castle Project с использованием ILMerge?
Очевидно, DynamicProxy требует, чтобы некоторые из его классов были общедоступными для правильной работы. Нет проблем, я могу исключить определенные типы из интернализации ILMerge. Однако мои проблемы возникают, когда у меня есть пользователь, который ссылается на мою библиотеку, но также ссылается на Castle.Core.dll. Публичные типы теперь предоставляются двумя сборками, а ссылки на них неоднозначны.
Если я не интернализую Castle.Core.dll, используя ILMerge, отправляя его вместе со своей собственной сборкой, это конфликтует с версиями для версий моей версии и версий моих пользователей. Если я использую ILMerge для интернализации сборки, я вынужден исключить интернализацию типов, которые DynamicProxy требует для правильной работы. Этот подход разрушит любой проект, который ссылается как на мою сборку, так и на Castle.Core.dll из-за неоднозначных типов.
Я вынужден в один из этих двух субоптимальных курсов действий? Или есть какое-то решение, о котором я еще не думал?
вы должны проверить репозиторий moq. Они интернализуют Castle.Core для dynamicproxy также ... https://github.com/Moq/moq4/tree/dev/Tools – cecilphillip
Спасибо за указатель, но я укажу, что проект использует более старую версию Замка проекта, и они страдают от одной и той же проблемы. – JimEvans
Вот еще один проект, который обсуждает ту же проблему. Возможно, их обсуждение здесь может представлять интерес для вас https://github.com/FakeItEasy/FakeItEasy/issues/16 – cecilphillip