aspnet_merge, вызывающий ошибку dll not found
Я использую aspnet_compiler для предварительной компиляции сайта asp.net. Затем я запускаю aspnet_merge, чтобы объединить предварительно скомпилированные сборки в одну.
К сожалению, aspnet_merge не включает одну из сборок в процесс слияния. Поэтому эта сборка остается неизменной. Еще более прискорбно, что эта сборка ссылается на одну из сборок, которые действительно были объединены (и теперь удаляются), и эта ссылка не обновляется aspnet_merge. Поэтому я получаю FileNotFoundException "Не удалось загрузить файл или сборку" при использовании этой библиотеки DLL.
До сих пор я выяснил, что после этапа предварительной компиляции большинство сборок называются как
App_Web_xxxxxxxx.dll.
в то время как dll-нарушитель назван так:
App_Web_nameofusercontrol.ascx.xxxxxxxx.dll
Я думаю, именно поэтому aspnet_merge игнорирует это. Я подтвердил, что aspnet_merge игнорирует, используя опцию -log, он генерирует список входных сборок.
Я вызываю aspnet_compiler и aspnet_merge так:
aspnet_compiler.exe -v VirtualDirectoryName -p ActualDirectory c:\precompileoutput
aspnet_merge.exe c:\precompileoutput -o mergeddllname
В настоящее время я смотрю на декомпилированный код aspnet_merge, пытаясь выяснить, какую логику он использует, когда решает, какие библиотеки объединить, но, возможно, кто-то уже сталкивался с этой проблемой раньше или у нее есть предложение?
Я ищу способ либо заставить aspnet_compiler создавать dll, которые понимает aspnet_merge, либо для способа убедить aspnet_merge обновить все сборки, которые ссылаются на любые dll app_web *, которые он удаляет. Спасибо!
Обновление: aspnet_merge игнорирует App_Web_nameofusercontrol.ascx.xxxxxxxx.dll, поскольку aspnet_compiler не создает соответствующий.compiled файл. Кроме того, пользовательский контроль, кажется, также скомпилирован в одну из сборок App_Web_xxxxxxxx.dll. Однако я не знаю, почему один и тот же пользовательский элемент управления компилируется в две разные сборки. Возможно, странная проблема с круговой ссылкой?
1 ответ
Оказывается, проблема была вызвана тем, что один пользовательский элемент управления U1 в папке A ссылается на другой элемент управления U2 в папке B, когда третий элемент управления u3 в папке B ссылается на U1, что приводит к циклической ссылке. Перемещение U2 в папку A, похоже, решает проблему.