cod*_*fun 39 .net msbuild log4net
最近将log4net.dll添加到我们的数据对象.我们的数据对象构建完美,但是当您尝试构建引用我们的数据对象的任何内容时,您会收到以下错误:
无法解决"log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 692fbea5521e1304"和"log4net,Version = 1.2.9.0,Culture = neutral,PublicKeyToken = b32731d11ce58905"之间的冲突.任意选择"log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 692fbea5521e1304".
我发现以下线程使我能够获得有关该问题的更多信息.
log4net用于我们项目中的各种事情.例如,晶体在GAC中安装了1.2.9.我知道infragictics使用1.2.10.
我们有一个特定的目录 - 调用它c:\references
- 我们构建所有的dll,并且我们所有的应用程序都用来引用我们的内部dll.所以我特意在数据对象中将我的引用设置为c:\ references\log4net.dll,即版本1.2.11.这很奇怪,因为在上面的错误消息中你没有看到1.2.11.dll以特定版本引用:= True&Copy Local:= True.我检查了构建目录和log4net的1.2.11确实被正确移动了.
如果它有帮助,这里有一些详细的错误消息:
There was a conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905".
No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily.
References which depend on "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" [C:\Windows\assembly\GAC_32\log4net\1.2.10.0__692fbea5521e1304\log4net.dll].
C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Shared.dll
References which depend on "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905" [C:\Program Files (x86)\Business Objects\Common\4.0\managed\log4net.dll]. c:\references\DBObjectAdoNet.dll
Project file item includes which caused reference "c:\references\DBObjectAdoNet.dll".
Run Code Online (Sandbox Code Playgroud)
更新:到目前为止,我发现修复错误的唯一方法是在引用DBObjectAdoNet.dll的任何内容中引用log4net.这对我们来说并不是一个真正有用的解决方案,因为我们整个系
第二次更新:尝试将log4net放入GAC思考,以解决问题,但仍然没有.
第三次更新:我已经向微软发起了支持电话.他们要我用Assembly.LoadFrom(),我感到非常,非常犹豫做到,因为我们做一个应用程序超过30万电话和需要为每次调用这会慢下来不少反映.
我发现如果我在我的机器上卸载了水晶运行时,错误消失了,这没有多大意义,因为据我所知,它唯一能做的就是从GAC下删除log4net 1.2.10.0 .NET framework 2.0文件夹,这应该无关紧要,因为该应用程序是一个.NET framework 4应用程序.
KMo*_*raz 16
打开项目文件(.csproj
在C#或.vbproj
VB.NET中)进行编辑.
确保log4net引用是完全限定类型名称,具有HintPath
和SpecificVersion=True
.
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\references\log4net.dll</HintPath>
<SpecificVersion>True</SpecificVersion>
</Reference>
Run Code Online (Sandbox Code Playgroud)
保存文件并尝试重建.
我们发现水晶运行时肯定是问题所在。如果我们在安装的 crystal 运行时卸载 log4net %windir%\assembly
,则警告消息就会消失。奇怪的是,如果我从 log4net 站点将 log4net 1.2.10 安装到 GAC 中,则警告消息不会再次出现。如果有人可以解释这一点,请添加到此线程。Crystal 使用自己的强名称密钥对 log4net 进行签名(公钥令牌不同)。
解决log4net问题的关键是log4net是一个开源项目。这意味着我们可以简单地从源代码构建具有不同名称的 dll。还没有尝试过,但这应该可以解决问题。每次我们想要更新 log4net 时,我们都会有从源代码构建的额外步骤,但考虑到我们要更新 dll 的数量,这并不是什么大问题。
归档时间: |
|
查看次数: |
32978 次 |
最近记录: |