我遇到的问题是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能以某种方式造成这种情况吗?
答案 0 :(得分:11)
我在外部参考方面遇到了类似的问题。问题是未复制未使用的库。 您是否使用projectB中的Devart库?任何实例,继承,任何东西,......? 请试试这个: 从projectB中的三个库中实现一些模拟类并重新编译。 它对我有用。我想得到正式的解释。
答案 1 :(得分:9)
答案 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文件夹而有些则没有。