VS2010 Ошибка загрузки сборки - PullRequest
4 голосов
/ 08 июня 2010

При попытке создать проект 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 ]

3 голосов
/ 11 июля 2012

Может быть слишком поздно, я столкнулся с этой проблемой. В моем случае я исправил следующие инструкции, которые я нашел в комментарии (Спасибо, Томас!) В этом посте

В комментарии «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 может создать файл конфигурации приложения, поэтому, если вы сделаете это, сначала убедитесь, что файл еще не существует, а если это так, проверьте, все ли еще нужны настройки.


1 голос
/ 01 сентября 2011

Я понимаю, что это немного поздний ответ, но я только что испытал и исправил ту же проблему с Elmah в режиме выпуска (и, как и в случае с OP, режим отладки работал нормально).

Iисправил мою проблему, изменив свойства Elmah.dll в проводнике Windows - на вкладке «Общие» мне пришлось нажать «Разблокировать», чтобы убедить обозревателя, что файл действительно безопасен.После этого режим публикации публикуется нормально.

1 голос
/ 08 июня 2010

Согласно блогам здесь и здесь , причина может быть связана с ненадежной сборкой. Если бы это было так, я не могу себе представить, почему это будет работать в одной конфигурации, а не в другой, но это по крайней мере что-то на что посмотреть.

0 голосов
/ 19 мая 2017

Проблема может иметь несколько причин.

Появляется уязвимым при загрузке сборок смешанного режима (скомпилированных в режимах "ANY_CPU" и "X86".)

Я изменил параметр компиляции длямоя основная программа для "X86", чтобы соответствовать предполагаемому режиму компонентов DLL.Проблема исчезла.

Возможно, это связано с порядком загрузки файлов dll.

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