Как заставить ASP.NET WebSite использовать правильную сборку (Ссылка на файл вместо пути / GAC) - PullRequest
1 голос
/ 19 мая 2011

Я недавно начал использовать Jenkins для облегчения разработки приложений.У меня есть веб-сайт Asp.net, который я пытаюсь развернуть, используя его.

Подробная информация о сборке:

  • Проект получен из Visual Source Safe с использованием Jenkins.
  • Is затем компилируется с использованием msbuild
  • После сборки он развертывается на тестовом сервере.

Компиляция работает нормально, без ошибок, без предупреждений.

Когда я копирую веб-приложение из папки PrecompiledWeb на тестовый сервер, происходит сбой приложения при выполнении определенных операций.Исключение составляет следующее:

Exception type: FileLoadException 
    Exception message: Could not load file or assembly 'Oracle.DataAccess, 
    Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342' or 
    one of its dependencies. The located assembly's manifest definition
    does not match the assembly reference. 
    (Exception from HRESULT: 0x80131040)

Однако, если я скопирую веб-приложение из папки веб-сайта, все будет работать нормально.

Примечание: Все сборки сторонних разработчиков хранятся в папке под названием Сборки на уровне решения.Все ссылки в проектах указывают на сборки, которые блокируют.

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

Редактировать: Кажется, что в моем проекте упоминается более одной сборки, но я не знаю, как получить только одну.Я проверил в Обозревателе объектов, выбрав Мое решение, и получил следующее Both assemblies in object browser

Кажется, что проект WebSite вызывает проблемы (Когда я удаляю его из решения, только правильная сборкаотображается в браузере объектов).

Ответы [ 2 ]

1 голос
/ 20 мая 2011

Откройте файл проекта в формате XML и найдите соответствующую ссылку.Измените его так, чтобы оно не имело строгого имени сборки, например,

<Reference Include="Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken={SOME-KEY}, processorArchitecture=MSIL" />

... на имя с неквалифицированным именем и HintPath, которое указывает на место в вашей кодовой базе, где сборка имеет

<Reference Include="Oracle.DataAccess">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\Oracle\Oracle.DataAccess.dll</HintPath>
</Reference>

(конечно, я просто составляю их детали, не имея Oracle)

Обратите внимание, что это не имеет значения, если ваш текущий референс ужепохоже, что HintPath настроен правильно, если он имеет строгое имя сборки, то все, что находится в GAC, будет иметь приоритет.

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

В вашем проекте Visual Studio, когда вы выбираете эту DLL в References и смотрите на ее свойства, установлено ли для Copy Local значение true?Если нет, то DLL не может быть скопирована в выходную папку.

...