我有一个引用dll'VMware.Vim.dll'的命令行控制台应用程序,但是这个其他引用的dll就像我的本地计算机上的GAC中保存的VimService41.dll,VimService20.dll等。 我想将此exe部署到任何计算机,并能够通过传递参数来运行它。当我复制exe和VMware.Vim.dll时,它会抱怨其他丢失的dll,尽管它们不属于release文件夹。
我尝试了Publish选项并创建了一个ClickOnce应用程序,将其部署到我想要执行exe的机器上。这创建了一个setup.exe和一个清单文件。当我运行它时,它抱怨外部dll尚未添加到GAC。
如何通过传递参数来运行此clickonce控制台应用程序?
答案 0 :(得分:4)
首先,您不要通过运行EXE来运行ClickOnce应用程序。如果你要这样做,只需将你的构建中的bin文件夹复制到机器上。如果您不需要进行自动更新,那么您正在使用ClickOnce浪费生命。
其次,您可以尝试跟踪所需的所有dll,并将其包含在项目中。这包括所有二级或三级依赖项。将它们添加到项目中,将构建操作设置为“content”,并将“copy to output directory”设置为“always always”。然后,在构建时它们将包含在输出目录中。
某些应用程序的dll在本地部署时会起作用(如DirectX),而某些应用程序则不会(SQLServer Express)。你只需要尝试一下,看看是否这样做。
但是,我会说,使用VMWare程序集可能违反了EULA。这就像尝试包含Office程序集,以便在没有安装的计算机上运行Excel。至于传递参数,如果你真的想把它用作ClickOnce应用程序,这里有一篇博客文章,解释如何将参数传递给离线(或在线)ClickOnce应用程序:
答案 1 :(得分:1)
如果您想使用ClickOnce,您需要添加自定义先决条件,以便应用程序在GAC中安装它的依赖项。
请注意:http://msdn.microsoft.com/en-us/library/ms165429(v=VS.100).aspx
答案 2 :(得分:0)
我不认为此方案适合单击一次。如果您需要安装修改gac的东西,那么您需要使用安装程序。
答案 3 :(得分:0)
如果您可以找到所有依赖项,您可以将它们包含在内(通过将它们设置为在VS中复制本地),然后您就不会有问题。