【问题标题】:Deploying XBAP with win32 DLL使用 win32 DLL 部署 XBAP
【发布时间】:2011-06-13 02:45:05
【问题描述】:

我的 XBAP 应用程序使用两个 win32 dll 和通常的许多 .Net dll。由于我们将 .net 引用添加到项目本身,这不是问题,因为它们都会在发布项目时自动部署;只是他们的名字从mydotnet.dll变成了mydotnet.dll.deploy

但问题是,win32 dll 没有被部署,它们的名称也没有改变。我明白原因。这是因为我使用 p/invoke 技术调用它们,并且它们没有添加到项目中。事实上,Visual Studio 2010 不允许我将它们添加到引用中。所以我手动将它们复制到发布文件夹,并尝试试验是否可行。但它没有用。浏览器显示的错误是这样的:

System.DllNotFoundException: 无法 加载 DLL 'Player.dll':指定的 找不到模块。 (例外 来自 HRESULT:0x8007007E)

在 Player.PlayerProxy.Initialize()
atRunaware.WpfBrowserApp.Player.Page1.PlayFile(对象 发送者,RoutedEventArgs e)

谁能解释一下这是怎么回事?有什么解决办法吗?


以前我试图在 Silverlight 中做我想做的事情,但Austin 建议我使用 XBAP 来实现同样的事情。上一主题的网址:

Handle to Silverlight UserControl

【问题讨论】:

  • 客户端计算机是否安装了 Visual Studio 运行时二进制文件?检查原生 DLL 的依赖关系,看看是否需要部署其他任何东西。

标签: c# c++ wpf pinvoke xbap


【解决方案1】:

你可以试试:

  1. 检查“发布”>“应用程序文件”部分下的项目属性,如果您的本地 dll 出现在此处,请确保它们已设置为包含。

  2. 尝试将 dll 作为内容文件包含在您的项目中,并将复制到输出目录设置为始终复制(我认为这可能会使它们出现在第 1 点中提到的引用列表中,允许您将它们设置为“包括”)。

【讨论】:

  • 没有。本机 dll 不会出现在那里。只有 .net dll 存在,它们的 Publish StatusInclude(Auto)
  • 右键单击项目并为每个本机 dll 添加现有项。然后当它们被添加时,选择每一个并选择 Build Action 作为 Content 和 Copy To Output Directory 作为 Copy Always。然后它们应该出现在项目属性的应用程序文件部分中,因此您可以确保将它们设置为包含。
  • @Jeff825:尝试做同样的事情(带有自定义 dll 的 XBAP 用于与远程服务器互操作,目前使用共享公用文件夹部署)。在本地运行,但不在本地网络中的另一台机器上运行!错误是 System.DllNotFoundException:无法加载 DLL(异常 0x8007007E)。完全按照所说的去做 - 我可以看到清单包含 dll,即使传输到远程机器 IE 浏览器的数据也比 dll 的大小大!但是不行!
  • 我面临着完全相同的问题。你解决过这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多