Dll不要复制到bin文件夹

时间:2010-10-01 19:23:12

标签: .net visual-studio dll reference

我遇到的问题是Devart DLL没有被复制到我的网络应用程序的bin文件夹中。我有一个引用projectA的web应用程序项目。 ProjectA引用projectB。 Devart Dlls在projectB中使用,并且在构建期间不会被复制到Web应用程序项目bin文件夹中。 ProjectB还引用了EL Unity dll,它们正在被正确复制。所讨论的所有Dll都物理上位于projectB中的文件夹中,这是参考点的位置。 (我没有指向GAC的引用)

正确复制的dll是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>

其他人有这个问题吗?我做错了吗?感谢

EDIT 我打开了一个文件监视器,观察了visual studio加载引用的位置,对于Unity来说,它是从我指定的位置获取dll。但是,对于Devart dll来说,它正在寻找GAC! Devart dlls能以某种方式造成这种情况吗?

5 个答案:

答案 0 :(得分:11)

我在外部参考方面遇到了类似的问题。问题是未复制未使用的库。 您是否使用projectB中的Devart库?任何实例,继承,任何东西,......? 请试试这个: 从projectB中的三个库中实现一些模拟类并重新编译。 它对我有用。我想得到正式的解释。

答案 1 :(得分:9)

  1. 右键单击引用的dll并检查copy local是否为true。
  2. 您也可以尝试读取您的参考文献,当我将VS2005项目转换为VS2008项目时,这解决了类似的问题。

答案 2 :(得分:4)

当你拥有与其他人相关的dll时,问题也会出现。例如,Microsoft.ApplicationServer.Caching.AzureClientHelper.dll由Microsoft.ApplicationServer.Caching.Client在内部使用。即使我有copyLocal = True,也不会复制帮助程序集,因为它不会直接在我的代码中的任何地方引用。要避免此问题,您可以创建一个私有类型变量:

类型dependsOnThisTypeOfAssembly = typeof(TypeFromDependentAssembly);

这将引用类型,并且在构建过程中将在本地复制程序集。

答案 3 :(得分:1)

设置为复制本地不适合我。 唯一解决的问题(无法使用)是引用程序集中包含的某些类型。

答案 4 :(得分:0)

如果这些DLL位于项目B的子目录中,请确保每个引用的“复制本地”属性设置为true。

此外,如果DLL文件作为文件包含在项目中,请检查visual studio属性以查找文件本身。 “Build Action”应设置为“None”,“Copy to Output Directory”应设置为“Do not copy”。编辑:只需将它们作为副本local = true的引用将负责复制。

如果这些设置对于不同的DLLS有所不同,这可以解释为什么有些被复制到bin文件夹而有些则没有。