Dll не копирует в папку bin - PullRequest
       4

Dll не копирует в папку bin

8 голосов
/ 01 октября 2010

У меня проблема с тем, что библиотеки Devart не копируются в папку bin моего веб-приложения.У меня есть проект веб-приложения, который ссылается на projectA.ProjectA ссылается на projectB.Dll Devart используются в projectB и не копируются в папку bin проектов веб-приложений во время сборки.ProjectB также ссылается на библиотеки EL Unity, и они копируются правильно.Все рассматриваемые Dll физически находятся в папке в projectB, и именно здесь находится контрольная точка.(У меня нет ссылок, указывающих на GAC)

Правильно копируемые библиотеки: Microsoft.Practices.Unity, Microsoft.Practices.Unity.Configuration и Microsoft.Practices.ServiceLocation.

Неправильно копируемыми dll являются Devart.Data, Devart.Data.Oracle и Devart.Data.Oracle.Design.

Вот ссылки для каждой dll ...

<Reference Include="Devart.Data, Version=5.0.124.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL">
  <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>
<Reference Include="Devart.Data.Oracle, Version=5.70.170.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.Oracle.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Devart.Data.Oracle.Design, Version=5.70.170.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.Oracle.Design.dll</HintPath>
  <Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.ServiceLocation.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.Unity.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.Unity.Configuration, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.Unity.Configuration.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>

Кто-нибудь еще имеет эту проблему?Я делаю это неправильно?Спасибо

РЕДАКТИРОВАТЬ Я открыл файловый монитор и смотрел, где Visual Studio загружает ссылку, а для Unity она получает dll из указанного мной места.Но, для dll Devart это выглядит в GAC!Могут ли дьяволы Devart вызывать это каким-то образом?

Ответы [ 5 ]

11 голосов
/ 17 декабря 2010

У меня была похожая проблема с внешними ссылками. Дело в том, что неиспользуемые библиотеки не копируются. Используете ли вы библиотеки Devart из вашего проекта? Любой случай, наследство, что угодно, ... ?? Пожалуйста, попробуйте это: Создайте некий фиктивный класс из трех библиотек вашего проекта B и перекомпилируйте Это сработало для меня. Я хотел бы получить формальное объяснение.

9 голосов
/ 01 октября 2010
  1. щелкните правой кнопкой мыши на упомянутых dll и проверьте, является ли копия local истинной.
  2. Вы также можете попробовать прочитать ваши ссылки один раз, это решило аналогичную проблему для меня, когда я преобразовал проект VS2005 в проект VS2008.
4 голосов
/ 23 апреля 2014

Проблема также возникает, когда у вас есть dll, которые являются зависимостями других. Например, Microsoft.ApplicationServer.Caching.AzureClientHelper.dll внутренне используется Microsoft.ApplicationServer.Caching.Client. Несмотря на то, что у меня copyLocal = True, вспомогательная сборка не копируется, потому что на нее нигде нет прямой ссылки в моем коде. Чтобы избежать этой проблемы, вы можете создать переменную закрытого типа, например:

Тип зависит от OnThisTypeOfAssembly = typeof (TypeFromDependentAssembly);

При этом будет сделана ссылка на тип, и сборка будет скопирована локально в процессе сборки.

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

Установить как Копировать локальный не работает для меня.Единственное, что разрешает (неприменимо) - это ссылка на некоторый тип, содержащийся в сборке.

0 голосов
/ 01 октября 2010

Если эти библиотеки DLL находятся в подкаталоге проекта B, убедитесь, что для свойства «Копировать локальный» для каждой ссылки установлено значение true.

Кроме того, если файлы DLL включены как файлы в ваш проект, проверьте свойства Visual Studio для самих файлов.«Действие построения» должно быть установлено на «Нет», а «Копировать в выходной каталог» - «Не копировать».РЕДАКТИРОВАТЬ: просто имея их в качестве ссылок с копией local = true, позаботится о копировании.

Если эти настройки отличаются для разных DLLS, это может объяснить, почему некоторые копируются в папку bin, а другиенет.

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