Что такое файл dll.refresh в ASP.Net?

83

В нашем веб-проекте ASP.Net у нас есть некоторые файлы .refresh, связанные с некоторыми сторонними библиотеками DLL, которые мы используем. Есть идеи, что это такое и как / когда они созданы?

Джексон Поуп
источник

Ответы:

64

Эти файлы указывают путь к рассматриваемой DLL, чтобы сообщить Visual Studio, где ее найти (вы можете проверить это, если откроете их в текстовом редакторе). Они будут создаваться каждый раз, когда вы добавляете новую ссылку на проект.

Обычно они появляются, когда вы используете тип проекта, который не создает стандартный файл проекта Visual Studio, поскольку обычно туда входят пути к ссылкам на библиотеки DLL.

HullCityСтив
источник
Найдите работающее обновление - и, возможно, это правильный путь. Относительные пути - вот как мои настроены ../
niico
32

От сюда :

В проекте ASP.NET добавление ссылки на файл приведет к добавлению файла .refresh в папку Bin. Когда проект находится в системе управления версиями, этот файл затем добавляется в систему управления версиями. *.dll.refreshфайлы, засоряющие каталог bin. Каждый раз, когда вы добавляете внешнюю ссылку, вы найдете файл dll.refresh рядом с ней. Эти dll.refreshфайлы являются исключением из правил, и они должны перейти в систему контроля версий. Это единственный способ узнать, где находятся ссылки на него.

SharpUrBrain
источник
Должна ли dll, на которую ссылается свежий файл, иметь формат .net? Свежий ли свежий файл в C ++ DLL?
Gqqnbig
6

Некоторая информация о файлах обновления после проб и ошибок. Эти эксперименты проводились с Visual Studio 2012. Ссылки были добавлены в веб-проект C # asp.net.

Как уже говорилось, добавление ссылки на сборку с помощью обзора добавляет файл .refresh. Однако, если есть дополнительные зависимые библиотеки DLL на явно добавленной DLL в каталоге, из которого вы добавляете, зависимые файлы также добавляются неявно, но без файлов .refresh! Так, например, я добавляю ссылку на «MyAssembly.dll» и получаю также «MyAssembly.dll.refresh». Но если есть сборка «MyDependentAssembly.dll», от которой зависит «MyAssembly.dll», я не получу «MyDependentAssembly.dll.refresh». Итак, что происходит, так это то, что обновляется одна сборка, но не ее зависимые! Вы должны добавлять библиотеки DLL по одной в обратном порядке зависимости, и тогда все будет работать лучше.

Некоторые другие вещи, о которых следует остерегаться. Добавление «MyAssembly.dll» также добавит «MyAssembly.pdb», если он присутствует. Также "MyAssembly.xml" будет добавлен к ссылкам, если он присутствует. Эти два файла также обновятся при наличии «MyAssembly.dll.refresh».

Но когда Visual Studio решит искать файлы обновления? Теперь помните, что в веб-проекте файл проекта не отслеживает конкретно ссылочные библиотеки DLL. Вы не найдете библиотеки DLL, перечисленные в файле проекта, только в зависимостях проекта. Так когда же произойдет обновление?

Ответ на вопрос, когда происходит обновление, - это во время сборки, когда необходимо загрузить указанную сборку. Это означает, что создание готового обновляемого веб-сайта может не захватить все библиотеки DLL. У меня была библиотека DLL, которая не обновлялась, а потом я понял, что она используется только внутри файла .ascx. Снятие флажка «Разрешить предварительно скомпилированный сайт быть обновляемым» на странице проекта MSBuild Options устранило эту проблему для меня.

Тем не менее, если вы добавите библиотеки DLL, на которые есть ссылки, которые загружаются через отражение в вашем коде, они не будут обновляться через ссылку. Вам нужно будет использовать события сборки, чтобы скопировать их в каталог bin.

Джек Д. Менендес
источник
Я думаю, когда вы говорите «веб-проект», вы имеете в виду «веб-сайт».
J.