又一个ClickOnce GAC参考问题

时间:2011-08-17 17:26:03

标签: c# clickonce

我正在尝试部署更新,突然间我收到有关需要在GAC中安装的log4net.dll版本1.2.10.0的消息。这是版本号38,我将属性设置为Copy Local = true,并将值设置为Include on Application Files设置。我甚至放弃了将log4net.dll注册到目标机器上的GAC中。有趣的是这个更新在另外两台计算机上推出就好了。

我不确定自上次更新以来可能有哪些变化?

欢呼声

鲍勃

编辑:我在log4net的清单文件中找到了这个条目。它不在我使用log4net的其他应用程序的任何其他清单文件中?然而,如果我尝试修改文件,则clickonce知道并说安装已损坏。

<dependency>
<dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
  <assemblyIdentity name="log4net" version="1.2.10.0" publicKeyToken="692FBEA5521E1304" language="neutral" processorArchitecture="x86" />
</dependentAssembly>

1 个答案:

答案 0 :(得分:2)

我最好的猜测是你有两个依赖log4net.dll。 On直接来自您的项目,它引用了它,一个是来自另一个库的隐式引用(通常是为.net 1.1编译的库,在我的情况下,它发生在Crystal Reports中)。我的猜测是这两个引用指向不同的版本。

  1. 您可以尝试在目标计算机上安装log4net,并在ClickOnce项目中的“应用程序文件”中排除。这样,ClickOnce安装就不需要它了(但是我不清楚在安装时,在尝试运行应用程序时会发生什么)。
  2. 如果它不起作用或者在运行时失败,那么可能在引用它的项目中将Copy Local和Specific Version设置为false就可以了。 但是GAC中的log4net将是应用程序运行的先决条件,这意味着您需要安装.NET 1.1(或2.0 / 3.5完整版)。 350MB的先决条件非常重......
  3. 您在发布后更改清单文件的想法可以 工作。为了避免ClickOnce说安装已损坏,您 需要使用MAGE(Manifest Editing and)来辞退出版物 生成工具,通常可从“开始”菜单组中获取 视觉工作室)。我不知道你的申请会发生什么 在运行时确实需要log4net而无法找到它。