ClickOnce是否只查看应用程序清单文件以确定要将哪些dll文件复制到客户机器,还是询问程序集的内部以确定相关性文件?ClickOnce - 文件已经存在错误 - 为什么DLL文件试图通过ClickOnce复制两次?
我问的原因是因为在尝试启动已使用ClickOnce发布的WPF .NET 4应用程序时,出现以下ClickOnce错误: 文件C:\Users\CNelson\AppData\Local\Temp\Deployment\PGX6P33A.35N\AJQL8AC8.D60\tx16_rtf.dll
已存在。
这个错误开始于我已经引用了两个引用非托管dll文件(tx16_rtf.dll)的第三方.NET dll的引用。我想将tx16_rtf.dll复制到客户端PC上的bin文件夹中,以便将其包含在我的项目中,并将生成操作设置为“内容”,并将“复制到输出目录”设置为“始终复制”。
但是,由于某些原因,当我尝试启动应用程序时ClickOnce试图复制文件'tx16_rtf.dll'两次,这会导致错误。
如果我看看部署清单文件,我可以清楚地看到文件'tx16_rtf.dll'的一个条目。所以,我的问题是,为什么ClickOnce尝试复制文件'tx16_rtf.dll'两次,如果它只在部署清单文件中存在一次?
下面是部署清单文件中引用“tx16_rtf.dll”的一个片段:
<file name="tx16_rtf.dll" size="839680">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>V6i2QcARl3+1SJHCugoazb9zrOY=</dsig:DigestValue>
</hash>
</file>
你对这个问题的解决方案是什么? –
我的解决方案是不参考我的项目中的非托管dll。因此,ClickOnce不会将它们包含在清单中。相反,我所做的是将非托管dll文件包含在一个zip文件中(将Build Action设置为'Content'),当我的应用程序启动时,它将解压非托管dll到正确的执行目录中......并且所有工作都像魅力。 – ChrisNel52