C# 另一个ClickOnce GAC参考问题

C# 另一个ClickOnce GAC参考问题,c#,clickonce,C#,Clickonce,我正试图部署一个更新,突然我得到消息说log4net.dll版本1.2.10.0需要安装在GAC中。这是版本号38,我将属性设置为Copy Local=true,并将值设置为包含在应用程序文件设置中。我甚至放弃了,将log4net.dll注册到目标机器上的GAC中。有趣的是,这一更新在另外两台计算机上也能正常运行 我不确定自上次更新以来可能发生了什么变化 干杯 鲍勃 编辑:我在log4net的清单文件中找到了这个条目。它不在我使用log4net的其他应用程序的任何其他清单文件中?但是,如果我试图

我正试图部署一个更新,突然我得到消息说log4net.dll版本1.2.10.0需要安装在GAC中。这是版本号38,我将属性设置为Copy Local=true,并将值设置为包含在应用程序文件设置中。我甚至放弃了,将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>


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

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

  • log4net是在这些其他计算机上的gac中注册的吗?随机事件-将“Copy Local”更改为false,然后再更改为true-这能修复它吗?如果它有效的话,我会解释更多:)其他计算机上的GAC中没有log4net。我在一台计算机上解决这个问题是愚蠢的万岁努力。将本地副本更改为false并返回。无更改,谢谢您的尝试。版本不匹配肯定是问题的原因。我猜你需要卸载并在故障机器上重新安装应用程序,而不是让它更新,或者挖掘你曾经使用过的log4net的旧副本。你是对的,它是另一个在GAC中引用log4net的库。我在尝试安装MSI并绕过ClickOnce时发现了它。那个项目显示了对log4net的两个引用,我能够找到它。然而,我仍然感到困惑,为什么它只是一台计算机上的问题,而不是任何其他计算机上的问题?但它现在正在发挥作用,我想这是底线。谢谢你,我真高兴。我猜机器上安装了不同版本的log4net.dll,但我想你已经检查过了。好吧,我想我终于找到了。SAP Crystal Reports for.NET 4.0的运行时似乎在GAC中放置了一份log4net的副本。我对这个问题不是很肯定,但我所看到的一切都指向这一点。cheers bobI我不确定,我认为.NET 4.0的CR运行时需要它,但是默认情况下,.NET 4.0框架没有安装log4net库,因为这个版本的框架不是累积的(它不包括以前版本的框架),而log4net实际上是一个.NET 1.1(或2.0,不确定)库。因此,如果您没有.NET的任何累积版本(1.1、2.0或3.5),CR将无法工作,即使理论上它适用于.NET 4.0。不管怎样,我现在正转向报告服务:)