繁体   English   中英

Dll不要复制到bin文件夹

[英]Dll not copying to bin folder

我有一个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>

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

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

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

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

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

类型dependsOnThisTypeOfAssembly = typeof(TypeFromDependentAssembly);

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM