Visual studio 2012 使用第三方DLL部署WPF应用程序

Visual studio 2012 使用第三方DLL部署WPF应用程序,visual-studio-2012,dll,windows-installer,clickonce,cefsharp,Visual Studio 2012,Dll,Windows Installer,Clickonce,Cefsharp,我在尝试部署我创建的一个C#/WPF应用程序时遇到了极大的挫折,该应用程序引用了一些第三方DLL。我在项目中创建了一个名为lib的文件夹,在那里我放置了所有这些DLL。在VS2012中,我通过浏览该文件夹并选择所有DLL来添加引用本地复制设置为所有的true。当我构建并运行时,一切都很好,但当我选择发布并创建一个一键式安装程序时,事情就不那么顺利了。在发布向导期间,我将其设置为从磁盘安装,并将其设置为从不检查更新。我把文件夹放在闪存驱动器上,插入另一台电脑,运行安装程序,它会抛出一个异常。我相信

我在尝试部署我创建的一个C#/WPF应用程序时遇到了极大的挫折,该应用程序引用了一些第三方DLL。我在项目中创建了一个名为
lib
的文件夹,在那里我放置了所有这些DLL。在VS2012中,我通过浏览该文件夹并选择所有DLL来添加引用<代码>本地复制设置为所有的
true
。当我构建并运行时,一切都很好,但当我选择发布并创建一个一键式安装程序时,事情就不那么顺利了。在发布向导期间,我将其设置为从磁盘安装,并将其设置为从不检查更新。我把文件夹放在闪存驱动器上,插入另一台电脑,运行安装程序,它会抛出一个异常。我相信我知道发生了什么,但我不知道如何打包以正确部署它

<>我的DLL是一个C++程序包,它是为C++项目设计的一个DLL。我们会说,
Application
需要
DLL1
DLL1
需要
DLL2
<由于不是
.NET
DLL,因此无法将code>DLL2添加为项目中的引用
DLL1
要求
DLL2
位于同一文件夹中才能拾取它。我用的是哪种包装

我已尝试将CefSharp.dll所需的dll放在
发布/应用程序文件
目录中,但不起作用。我注意到VS2012中的所有DLL都有一个
.deploy
扩展,我甚至在上面添加了该扩展,以查看它是否正在扫描以获取该扩展,但它也不起作用。这是我第一次为Windows应用程序进行开发和部署,我读过的MSDN或博客文章中的所有教程似乎都没有介绍这种情况,而且我在部署管理器中也没有看到任何其他选项来处理这些类型的情况

如果有帮助,抛出的异常代码是:CLR20r3

当我捕获并显示异常时,提供的所有信息基本上都是
CefSharp.dll或它的一个依赖项无法加载
。以前当
DLL2
DLL1
不在同一文件夹中时,我就得到了它

在这种情况下,有人能提供关于如何从VS2012部署的帮助吗

提前谢谢

编辑:信息更新


我试图在未安装VisualStudio的情况下将调试生成版本推送到测试机器上。当为<代码> CEFSARP或任何其他C++运行时<代码> DLL <代码>时,它将查找<>代码> DLL < /C> >的所有调试版本,这些名称通常是相同的名称,但在结尾添加了字母“D”。如下所述,C++运行时的调试版本不能重新分配。并不是说您不能手动将那些
dll
添加到您的项目中,并将它们设置为
Copy Always
,而是这是一种黑客工作。我从头开始了一个新项目,添加了DLL的所有发布版本,构建了,一切都很好

你可以试试这个,它为我解决了一个类似的问题:

将非.NET库的DLL作为文件添加到解决方案中:

Right click project > Add > Existing Item
然后将其构建操作设置为内容,将“复制到输出目录”设置为“始终复制”


这样,库将包含在输出目录中。

因为您已经尝试手动添加可疑dll,但仍然无法运行,接下来我要做的是运行fusion,看看它到底在抱怨什么,换句话说,无法加载的依赖关系到底是什么。下面是一个很好的教程,介绍如何查找这些类型的错误:


也许你可以从资料中找到答案

他们至少有一个为他们的应用程序工作的团队。我知道,因为它就是这样安装在我的机器上的

更新刚刚在评论中看到,你说你缺少的是VC Redist,这似乎是相关的


此外,我似乎还模糊地记得,出于“vcredit原因”,您不应该分发应用程序的调试版本。你不能从调试版本切换到发布版本吗?有了它,我认为您可以按照CefSharp FAQ中的建议捆绑所需的VCRedist文件,或者在安装程序中添加VCRedist作为先决条件。DownmarkerWPF通过他们的WIX安装程序实现了这一点,您可以在他们的GitHub repo中的一个分支上找到这个安装程序。如果您使用的是VStudio捆绑安装程序,那么类似的情况也很可能发生。

今天早上,我一直在努力解决这个问题,最终找到了解决方案。似乎你已经知道哪些DLL等,你需要CefSharp工作,但我想我会通过这一点,以防其他人有同样的问题。我有一个C#WPF应用程序,我使用CefSharp作为web视图。我使用CefSharp v1是因为我需要他们提供的JavaScript->C#桥,这在v3中还没有实现。以下是我在设置项目时所经历的粗略步骤(我使用的是VS2013,但这可能在VS2012中起作用)

安装CefSharp
  • 通过NuGet安装CefSharp.Wpf(我使用的是v1.25.7)
  • 这将把相关文件放入
    $(SolutionDir)packages\CefSharp.Wpf.1.25.7\cef
配置构建
  • 要将CefSharp DLL复制到我们的生成文件夹,请右键单击您的项目,选择属性->生成事件,并在“生成后事件命令行”中输入以下内容:

    xcopy“$(SolutionDir)packages\CefSharp.Wpf.1.25.7\cef*”“$(TargetDir)”/s/y/i

  • 现在应该从cef文件夹以及
    devtools\u resources.pak
    文件和
    locales
    文件夹及其内容中复制所有必需的DLL。我需要他们在我的项目,因为我需要铬开发工具

  • 仔细检查您的项目引用是否包含<!-- BEGIN: CUSTOM ITEM GROUP INCLUDES INTO THE PROJECT (SO CLICK-ONCE PUBLISHES THEM) --> <ItemGroup> <Content Include="$(SolutionDir)packages\cef.redist.x86.3.2704.1432\CEF\**\*" Exclude="$(SolutionDir)packages\cef.redist.x86.3.2704.1432\CEF\x86\**\*;$(SolutionDir)packages\cef.redist.x86.3.2704.1432\CEF\locales\**\*.pak"> <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> <Visible>false</Visible> </Content> </ItemGroup> <ItemGroup> <Content Include="$(SolutionDir)packages\cef.redist.x86.3.2704.1432\CEF\**\en-GB.*;$(SolutionDir)packages\cef.redist.x86.3.2704.1432\CEF\**\en-US.*"> <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> <Visible>false</Visible> </Content> </ItemGroup> <ItemGroup> <Content Include="$(SolutionDir)packages\cef.redist.x86.3.2704.1432\CEF\x86\**\*"> <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> <Visible>false</Visible> </Content> </ItemGroup> <ItemGroup> <Content Include="$(SolutionDir)packages\CefSharp.Common.51.0.0\CefSharp\x86\**\CefSharp.BrowserSubprocess.*"> <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> <Visible>false</Visible> </Content> </ItemGroup> <ItemGroup> <Content Include="$(ProjectDir)lib\Microsoft.VC120.CRT\**\*"> <Link>%(Filename)%(Extension)</Link> <Visible>false</Visible> </Content> </ItemGroup> <!-- END: CUSTOM ITEM GROUP INCLUDES INTO THE PROJECT (SO CLICK-ONCE PUBLISHES THEM) -->
    C:\Documents and Settings\<UserName>\Local Settings\Apps\2.0\<auto-gen ostificated ID>