【发布时间】:2014-05-15 12:21:31
【问题描述】:
在尝试部署我创建的 C#/WPF 应用程序时,我感到非常沮丧,该应用程序对 3rd 方 DLL 有一些引用。我在项目中创建了一个名为lib 的文件夹,其中放置了所有这些DLL。在 VS2012 中,我通过浏览到该文件夹并选择所有 DLL 添加了引用。 Copy Local 全部设置为 true。当我构建和运行时一切都很好,但是当我选择发布并创建 OneClick 安装程序时,事情就不那么顺利了。在发布向导期间,我将其设置为从磁盘安装,并将其设置为从不检查更新。我拿那个文件夹,把它放在闪存驱动器上,把它插到另一台电脑上,运行安装程序,它会抛出一个异常。我相信我知道发生了什么,但我不知道如何打包它以正确部署它。
我的一个 DLL 是为 C++ 项目设计的 DLL 的 C# 包装器。我们会说,Application 需要 DLL1 和 DLL1 需要 DLL2。 DLL2 不能作为引用添加到项目中,因为它不是 .NET DLL。 DLL1 要求 DLL2 在同一个文件夹中才能获取它。我正在使用CefSharp,它包装了Chromium Embedded Framework。
我尝试将 CefSharp.dll 所需的 DLL 放在 publish/Application Files 目录中,但没有成功。我注意到 VS2012 中的所有 DLL 都有一个 .deploy 扩展名,我什至去添加了该扩展名以查看它是否正在扫描以获取该扩展名,但它也不起作用。这是我第一次为 Windows 应用程序进行开发和部署,我读过的 MSDN 上的所有教程或博客文章似乎都没有涵盖这种情况,而且我在部署管理器中看不到任何其他选项来处理这些问题案例类型。
如果有帮助,抛出的异常代码是:CLR20r3
当我捕获并显示异常时,我提供的所有信息基本上都是CefSharp.dll or one of it's dependencies cannot be loaded。当DLL2 与DLL1 不在同一个文件夹中时,我已经得到了。
在这种情况下,任何人都可以提供有关如何从 VS2012 进行部署的帮助吗?
提前致谢!
编辑:信息更新
我试图在未安装 Visual Studio 的情况下将调试版本推送到测试机器。在为CefSharp 或任何其他C++ 运行时DLL 构建时,它将查找DLL 的所有调试版本,这些版本通常名称相同,但末尾添加了字母“d”。如下所述,C++ 运行时的调试版本不可再分发。并不是说您不能手动将这些DLLs 添加到您的项目中并将它们设置为Copy Always,但这是一种黑客工作。我从头开始了一个新项目,添加了所有发布版本的 DLL,构建,一切都很好。
【问题讨论】:
-
@EricScherrer 还没有时间去看看。我要再过几个小时才能回到那个项目。无论我发现什么,我都会更新信息。谢谢,顺便说一句。
标签: visual-studio-2012 dll windows-installer clickonce cefsharp