VS2010 Ошибка загрузки сборки
При попытке создать проект ASP.NET 4 в Visual Studio 2010 появляется следующая ошибка: "Не удалось загрузить файл или файл сборки":///C:\Dev\project\trunk\bin\Elmah.dll' или одна из его зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)".
Я проверил, что dll на самом деле существует и правильно копируется в папку bin. Я также попытался удалить, а затем повторно добавить ссылку на проект.
Сбой сборки возможен только тогда, когда я переключаю Конфигурацию решения на "Выпуск". Не происходит сбой, когда для параметра "Конфигурация решения" установлено значение "Отладка".
Единственное различие между двумя конфигурациями (о которых я знаю) показано в следующем преобразовании Web.config, Web.Release.config:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="SqlServer" connectionString="" providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<customErrors mode="On" xdt:Transform="Replace">
<error statusCode="404" redirect="lost.htm" />
<error statusCode="500" redirect="uhoh.htm" />
</customErrors>
</system.web>
</configuration>
Я пытался использовать Fusion Log Viewer, чтобы отследить проблему привязки сборки, но похоже, что он правильно находит и загружает сборку. Вот журнал:
*** Assembly Binder Log Entry (6/8/2010 @ 10:01:54 AM) ***
The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\sgen.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = User
LOG: Where-ref bind. Location = C:\Dev\project\trunk\bin\Elmah.dll
LOG: Appbase = file:///c:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/bin/NETFX 4.0 Tools/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = sgen.exe
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: No application configuration file found.
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///C:/Dev/project/trunk/bin/Elmah.dll.
LOG: Assembly download was successful. Attempting setup of file: C:\Dev\project\trunk\bin\Elmah.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Elmah, Version=1.1.11517.0, Culture=neutral, PublicKeyToken=null
LOG: Re-apply policy for where-ref bind.
LOG: Where-ref bind Codebase does not match what is found in default context. Keep the result in LoadFrom context.
LOG: Binding succeeds. Returns assembly from C:\Dev\project\trunk\bin\Elmah.dll.
LOG: Assembly is loaded in LoadFrom load context.
Я чувствую, что с моей стороны совершенно отсутствует понимание того, что именно здесь происходит. Любое объяснение / помощь очень ценится!
4 ответа
Может быть слишком поздно, я столкнулся с этой проблемой. В моем случае я исправил следующие инструкции, которые я нашел в комментарии (Спасибо, Томас!) В этом сообщении.
В комментарии "Developer IT" говорится о том же самом, что и в app.config. На самом деле должно быть в другом месте. Следуйте инструкциям позади.
Еще лучшее решение - "исправить" дистрибутив Microsoft sgen. Сначала найдите sgen (например, в моей системе для.Net 4.0 он находится в "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools".) Затем создайте файл sgen.exe. конфиг с содержанием:
<configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
Суть в том, что добавление loadFromRemoteResources со значением true в файл конфигурации приложения sgen позволяет sgen правильно загружать файлы с томов ClearCase. Я знаю. Я столкнулся с той же проблемой, и вот как я ее исправил.
Обратите внимание, что в какой-то момент Microsoft может создать файл конфигурации приложения, поэтому, если вы сделаете это, сначала убедитесь, что файл еще не существует, и, если это так, убедитесь, что он все еще нуждается в настройке.
Я понимаю, что это немного поздний ответ, но я только что испытал и исправил ту же проблему с Elmah в режиме релиза (и, как и в случае с OP, режим отладки работал нормально).
Я исправил свою проблему, изменив свойства Elmah.dll в проводнике Windows - на вкладке "Общие" мне пришлось нажать "Разблокировать", чтобы убедить обозревателя, что файл действительно безопасен. После этого режим публикации публикуется нормально.
Проблема может иметь несколько причин.
Представляется уязвимым при загрузке сборок смешанного режима (скомпилированных в режимах "ANY_CPU" и "X86".)
Я изменил параметр компиляции для моей основной программы на "X86", чтобы соответствовать предполагаемому режиму компонентных DLL. Проблема ушла.
Это может быть связано с порядком загрузки файлов dll.