【问题标题】:Release not working, referencing FW 2.0 dll into FW 4.0 winform发布不起作用,将 FW 2.0 dll 引用到 FW 4.0 winform
【发布时间】:2013-08-30 17:59:20
【问题描述】:

通过跟踪,这意味着我需要使语言环境保持中立,以便引用的 dll 工作。关于如何设置它的任何想法?还是您将中性设置为某种东西?

我做了一个测试程序。我在 Windows 窗体中使用 VS2010、VB.net、.Net Framework 4.0。这是一个本地测试应用程序,最低限度可以工作(带有几个标签和几个按钮的表单)。 我得到了一个在 .net framework 2.0 中制作的 .dll。所以我参考了它。它没有用。所以我搜索了解决方案,发现它与另一个有点不同,因为我必须做两件事才能让它工作:

在 app.config 中添加“startup useLegacyV2RuntimeActivationPolicy="true"”,并将目标框架从“.NetFW4.0 客户端”更改为“.NetFW4.0”。这使它在我的开发 PC 中工作。通过 VStudio 或 .exe 调试并正常工作。

现在:我生成可执行文件并将其移至测试 PC,但它不起作用。该程序只是不会加载。我的意思是它永远不会到达负载手柄而只是关闭。经过一些调整以测试一条消息:

无法加载文件或程序集“banortepinpad.dll”或其依赖项之一。 该应用程序无法启动,因为它的并排配置不正确。请查看应用程序事件日志或使用命令行 sxstrace.exe 工具了解更多详细信息。 (HRESULT 异常:0x800736B1)

我确实在文件夹中有 dll。我在 google 和其他网站上不知疲倦地搜索无济于事,确实找到了 1 个有相同错误但没有人可以回答的人,其他一些发现不适用于此案例,因为仍然无法正常工作。有没有人能这么友善地解释一下这件事?

提前致谢

编辑:我运行了 sxstrace 并发现了这个:

=================
Start Activation context generation .
Input parameter :
Flags = 0
ProcessorArchitecture = x86
CultureFallBacks = es-ES , is
ManifestPath = C : \ Banorte \ BanortePinPad.dll
AssemblyDirectory = C : \ Banorte \
Application Config File =
-----------------
INFO: analyzing manifest file C : \ Banorte \ BanortePinPad.dll .
INFORMATION : defining the identity of the manifesto is (null ) .
INFO: Reference :Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Reference :Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50608.0"
INFORMATION : resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195".
INFO: x86 solving ProcessorArchitecture reference .
INFORMATION : solving Neutral culture .
INFORMATION : binding policy applied .
INFO : Find publisher policy at C:\Windows\WinSxS\manifests\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4940_none_516d712b0f495a45.manifest
INFO: not found redirection binding policy .
INFO: start assembly poll .
INFORMATION : Could not find the assembly in WinSxS .
INFO : Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC80.CRT\8.0.50727.6195__1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.DLL.
INFO : Attempt to probe manifest at C: \ Banorte \ Microsoft.VC80.CRT.DLL .
INFO : Attempt to probe manifest at C: \ Banorte \ Microsoft.VC80.CRT.manifest .
INFO : Attempt to probe manifest at C: \ Banorte \ Microsoft.VC80.CRT \ Microsoft.VC80.CRT.DLL .
INFO : Attempt to probe manifest at C: \ Banorte \ Microsoft.VC80.CRT \         Microsoft.VC80.CRT.manifest .
INFORMATION : Could not find the manifest of the culture Neutral .
INFORMATION : complete assembly poll .
ERROR : can not resolve the reference
ERROR: Activation context generation .
Finish Activation context generation .

这是我的 app.exe.config 内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    </startup>
</configuration>

那个痕迹是我在编辑和修复app.exe.config后得到的,如上所示。

这是否意味着我需要程序集的清单才能使其工作?

我还没有找到方法。我已经检查了程序集并在目标 pc 上安装了 vc++ reditributable。有人知道我的安装程序包含 VSMC80 库吗?

有人对可能发生的事情有任何其他想法吗?任何输入都会得到更多的重视。

【问题讨论】:

  • 我已经更新了整个东西,有人可以帮我吗?
  • 您有一个混合模式程序集,其中还包含非托管 C++ 代码。在 VS2005 中创建。您需要通过下载并运行 VS2005 的 vcredist_x86.exe 安装程序来安装所需的 DLL。您需要修订版 6195,安全更新 available here
  • 好吧。这就是诀窍。非常感谢,如果您可以将此作为答案发布,请给它评分并选择它作为答案。

标签: vb.net winforms .net-assembly side-by-side


【解决方案1】:

现在:我生成可执行文件并将其移至测试 PC,但它不起作用。该程序只是不会加载。我的意思是它永远不会到达负载手柄而只是关闭。经过一些调整以测试一条消息:

有两个潜在的问题。

  1. 确保在部署计算机上部署 app.Config。这将是一个名为 YourApplication.exe.config 的文件,并且需要位于 .exe 文件旁边。这就是在部署时正确设置运行时策略的原因。

  2. 确保您的目标是正确的 CPU 架构,因为您使用的是混合模式程序集。如果您的系统是 x86,并且部署是 x64,并且您的应用程序以 AnyCPU 为目标,那么混合模式程序集将无法加载。将其设置为显式使用 x86 将更正此问题。

  3. 确保混合模式程序集使用的任何本机 DLL 在目标系统上也可用。这通常包括安装正确的 VC++ 运行时。

【讨论】:

  • 1 它已经在里面了。我什至复制了 realease bin 和 debug bin 中的每个文件。我知道它们对任何东西都不起作用,但我还是做了,比抱歉更安全=) 2. 程序集 dll 是为 x86 制作的,所以整个东西必须在 x86 中,它不适用于“anyCPU”,我坚持使用 x86从乞讨。所以我得到了覆盖。
  • 感谢您的快速回复。有没有一种快速知道的方法,而无需询问我将需要什么特定的运行时?。
  • @user2532535 Dependnecy Walker 应该让你看到。
  • 我已经运行了 c++ 可再发行组件,但它没有工作。所以我运行了跟踪,发现我的 app.exe.config 中有一个错误,所以我删除了它,然后再次运行它。我找到了我编辑的内容
  • 我想我忘了引用你的话
猜你喜欢
  • 2011-12-21
  • 2013-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多