Dll不要复制到bin文件夹

Dan*_*n H 8 .net dll reference visual-studio

我有一个Devart DLL没有被复制到我的web应用程序的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>
Run Code Online (Sandbox Code Playgroud)

还有谁有相同的问题吗?我做错了吗?谢谢

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

小智 11

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


Vin*_*B R 9

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

  • 删除和重新添加引用对我有用. (2认同)

Ogn*_*rov 5

当您的 dll 是其他依赖项时,也会出现此问题。例如,Microsoft.ApplicationServer.Caching.AzureClientHelper.dll 由 Microsoft.ApplicationServer.Caching.Client 在内部使用。即使我有 copyLocal = True ,辅助程序集也不会被复制,因为它没有在我的代码中的任何地方直接引用。为了避免这个问题,你可以创建一个私有类型变量,如下所示:

类型dependsOnThisTypeOfAssembly = typeof(TypeFromDependentAssembly);

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