C# 如何通过单击一次链接到部署的DLL

C# 如何通过单击一次链接到部署的DLL,c#,dll,clickonce,C#,Dll,Clickonce,我的程序必须与通过ClickOnce部署的第三方应用程序集成。为了简化这个过程,该应用程序的创建者提供了一个.NET DLL,我可以在程序中引用它。该DLL随应用程序一起提供,与可执行文件位于同一文件夹中。如果我理解正确,就无法预测ClickOnce应用程序将安装在何处。如果我事先不知道DLL将位于哪个文件夹,那么在运行时链接该DLL的最佳策略是什么?一个解决方案是让供应商在安装期间或首次启动时创建一个指向当前应用程序位置的注册表项。我知道这并不漂亮,但这是一个可靠的方法,可以确保你可以找到应用

我的程序必须与通过ClickOnce部署的第三方应用程序集成。为了简化这个过程,该应用程序的创建者提供了一个.NET DLL,我可以在程序中引用它。该DLL随应用程序一起提供,与可执行文件位于同一文件夹中。如果我理解正确,就无法预测ClickOnce应用程序将安装在何处。如果我事先不知道DLL将位于哪个文件夹,那么在运行时链接该DLL的最佳策略是什么?

一个解决方案是让供应商在安装期间或首次启动时创建一个指向当前应用程序位置的注册表项。我知道这并不漂亮,但这是一个可靠的方法,可以确保你可以找到应用程序,更新不会让你指向一个不存在的应用程序

我在click once部署中使用此方法指向应用程序目录和数据目录

只是想到了另一个。。。能否直接从部署点获取dll?我的click once部署点具有.application文件以及所有程序集。这里的问题是,您需要知道最新版本才能找到正确的程序集


祝你好运。

在ClickOnce的EXE项目中

1) 将此DLL添加为“内容”(在生成类型中设置)。 2) 在单击一次的“应用程序文件…”中,找到新添加的DLL添加项,并将发布状态设置为“包括”而不是“包括(自动)”


下次发布click once时,DLL将与EXE放在同一文件夹中。

如果它是GAC程序集,则没有问题。您可以使用System.IO中的组件搜索目录,然后使用System.Reflection.assembly,它为您提供了从文件路径加载DLL的选项。我还建议考虑使用微软的MEF。这是为了帮助使用运行时导入的“插件”dll构建应用程序而设计的。也许你可以将dll与你的程序一起分发…这取决于集成的方法。@T McKeown-根据这篇文章,ClickOnce无法在GAC中安装内容。@Darren-该应用程序的制造商希望控制客户端计算机上安装的内容。这就是他们选择ClickOnce的原因。如果我自己发送dll,他们在更新软件时必须与我协调,这对任何人都不可取。我接受你的回答,因为在与供应商讨论此事后,他们最终按照你的建议在注册表中写入程序集位置。即使它不漂亮,对每个人来说似乎都是最简单的解决方案。是的,我希望我也能找到一个更好的方法,但有时候最好的解决方案并不总是干净的。请记住,当安装了新版本的click once应用程序(自动更新)时,位置会发生变化。这就是为什么他们需要在“首次启动时”更新reg条目的原因,该条目在更新后触发,并且是一个应用程序设置,他们可以单击一次轮询。祝你好运