Предотвратить сбой сборки сайта из-за блокировки iis - PullRequest
0 голосов
/ 11 января 2019

У меня есть веб-сайт на основе MVC / C #. Один из используемых пакетов nuget - это оболочка для PDFium, не являющаяся .NET dll. PDFium dll включен как часть другого пакета nuget и является просто dll, который копируется в выходной каталог.

Проблема, с которой я столкнулся, заключается в том, что после того, как я использовал веб-сайт, dll PDFium (т.е. не .net, а не тот, который выполняет упаковку), кажется, загружается и затем блокируется IIS. Если я попытаюсь сделать сборку в Visual Studio, я получу сообщение об ошибке:

Невозможно скопировать файл [Полный путь к источнику]. Процесс не может получить доступ к файлу [путь назначения], поскольку он используется другим процессом.

Вторая строка в журнале ошибок сборки показывает нечто подобное и дополнительно подтверждает:

Файл заблокирован: «Рабочий процесс IIS (28776)»

Если я сделаю iisreset, то это приведет к тому, что этот рабочий процесс будет убит, и, следовательно, может произойти копирование, но мне интересно, есть ли какой-нибудь лучший способ сделать это. Я думаю, что все остальные библиотеки DLL, включенные в пакеты nuget и тому подобное, копируются очень хорошо, поэтому, возможно, есть что-то более «правильное», что можно сделать, чтобы решить эту проблему, а не слегка тяжеловесный подход iisreset ...

1 Ответ

0 голосов
/ 11 января 2019

Не уверен, поможет ли это, но во избежание сброса IIS, один из вариантов - убедиться, что PDFium.DLL, используемый IIS, не копируется в целевой каталог вашего проекта во время сборки. Однако, если файл PDFium.DLL должен находиться в той же папке, что и ваша сборка оболочки (как я подозреваю, это так), то у вас может не быть другого выбора, кроме как использовать IISReset. Вы можете следовать советам здесь ( Как перезапустить сайт IIS при повторной компиляции веб-сайта asp.net ), чтобы добавить сценарий предварительной сборки, что избавит вас от ручного труда.

Если файл PDFium.DLL не обязательно должен находиться в той же папке, что и оболочка, и может быть зарегистрирован в любом месте вашей системы, вы можете попытаться установить для свойства этой ссылки Copy Local значение false, чтобы попытка копирования не производилась. Очевидно, это будет работать только в том случае, если оболочка сможет найти DLL через запись реестра - если она может быть зарегистрирована ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...