3

我是部署 .NET 应用程序的新手,所以如果需要更多详细信息,请告诉我。

我在 Visual Studio 中使用 MySql 开发了一个 C# 控制台应用程序。这是通过 ClickOnce 应用程序部署在 2 台 Windows 7 机器上的,并且工作正常。尝试在 Windows XP 机器上安装并得到以下错误:

需要系统更新:

无法安装或运行应用程序。应用程序要求首先将程序集 MySql.Data 版本 6.5.4.0 安装在全局程序集缓存 (GAC) 中。

我已经进行了一些谷歌搜索,但我认为这不是已经提到的任何问题 - 没有防火墙,没有防病毒,在具有所有权限的管理员帐户上。我检查了 C:\Windows\Assembly 并列出了 MySql.Data.CF.dll V 6.5.4.0。

同事还挖出了以下错误日志:

平台版本信息 Windows:5.1.2600.196608 (Win32NT) 公共语言运行时:4.0.30319.1 System.Deployment.dll:4.0.30319.1 (RTMRel.030319-0100) clr.dll:4.0.30319.1 (RTMRel.030319-0100).dll dll : 4.0.30319.1 (RTMRel.030319-0100) dfshim.dll : 4.0.31106.0 (Main.031106-0000)

源 部署网址:file:///C:/GearBox/app/publish/ClockworksConsoleApplication.application 应用程序网址:file:///C:/GearBox/app/publish/Application%20Files/ClockworksConsoleApplication_1_0_0_6/ClockworksConsoleApplication.exe.manifest

IDENTITIES 部署身份:ClockworksConsoleApplication.application,版本=1.0.0.6,Culture=neutral,PublicKeyToken=efa8c6cf1fc52128,processorArchitecture=msil 应用程序身份:ClockworksConsoleApplication.exe,版本=1.0.0.6,Culture=neutral,PublicKeyToken=efa8c6cf1fc52128,processorArchitecture=msil,类型=win32

应用程序摘要 * 可安装的应用程序。

错误摘要 下面是错误摘要,这些错误的详细信息在日志后面列出。* C:\GearBox\app\publish\ClockworksConsoleApplication.application 的激活导致异常。检测到以下失败消息: + 加载运行时失败。(来自 HRESULT 的异常:0x80131700)

组件存储事务失败摘要未检测到事务错误。

警告 此操作期间没有警告。

操作进度状态 * [8/31/2012 9:56:00 AM]:C:\GearBox\app\publish\ClockworksConsoleApplication.application 的激活已开始。* [8/31/2012 9:56:02 AM]:部署清单的处理已成功完成。* [8/31/2012 9:56:02 AM]:应用程序的安装已经开始。* [8/31/2012 9:56:02 AM]:应用程序清单的处理已成功完成。* [8/31/2012 9:56:08 AM]:找到兼容的运行时版本 2.0.50727。

错误详细信息 在此操作期间检测到以下错误。* [8/31/2012 9:56:08 AM] System.Runtime.InteropServices.COMException - 无法加载运行时。(来自 HRESULT 的异常:0x80131700)-来源:System.Deployment-堆栈跟踪:在 System.Deployment.Application.NativeMethods.IClrMetaHostPolicy.GetRequestedRuntime(MetaHostPolicyFlags policyFlags,String binaryPath,IStream configStream,StringBuilder 版本,Int32& versionLength,StringBuilder imageVersion,Int32& imageVersionLength , Int32& pdwConfigFlags, Guid interfaceId) 在 System.Deployment.Application.NativeMethods.GetAssemblyCacheInterface(String CLRVersionString, Boolean FetchRuntimeHost, CCorRuntimeHost& RuntimeHost) 在 System.Deployment.Application.PlatformDetector。

组件商店交易详情 没有可用的交易信息。

我之前在安装时遇到了另一个错误,

URLDownloadToCacheFile 失败,HRESULT '-2146697211' 错误:尝试下载 'http://station52/clockworksEXE/ClockworksConsoleApplication.application' 时出错。

但是,我将设置更改为从 CD 而不是网站发布,它似乎已经解决了这个问题,但我仍然收到 GAC 错误。

有任何想法吗?

4

3 回答 3

6

一种解决方案是将 MySQL dll 作为应用程序的一部分。在发布应用程序设置下将 dll 设置为“包含本地”和/或“包含”。

这样,当您的 ClickOnce 应用程序部署时,该 dll 将与它一起在本地部署,并且不会在 GAC 中查找它。

通常,GAC 中的内容安装在那里以供其他应用程序共享,并且就 ClickOnce 而言,通常作为先决条件安装。当然,不必在应用程序中包含组件会减少部署的大小,同时允许应用程序使用已在 GAC 中共享的组件。

您遇到的问题显然与 ClickOnce 和 WinXP 有关,解决方案是将 MySQL 组件包含在您的应用程序中,并将其在本地用于您的应用程序。

于 2012-09-05T19:37:17.250 回答
1

以为我会添加我的答案,以防它对其他人有帮助。最后发现 MySql.Data.dll 文件是子项目中的旧版本,该文件正用于解决方案中的当前项目。换句话说,我的解决方案是这样设置的:

  • 项目 1 - 类库(用于其他几个项目;不经常构建),包含对MySql.Data v6.9.4
  • 项目 2 - 主程序,参考项目 1,还包含参考MySql.Data v6.9.7

在编译/发布项目 2 时,GAC 中没有 v6.9.4 并不令人高兴。因此,我所要做的就是删除项目 1 中的 v6.9.4 并更改对项目 2 中使用的 MySql.Data v6.9.7 的引用。因此,每当我更新一个时,它们都会得到更新。在那之后,我只是重建了项目 1 并重新发布了项目 2,它工作得很好。

我的建议是检查您的主应用程序中的所有引用,并确保任何子项目/类库也引用您正在使用的相同版本的 DLL(如果有意义的话)。

希望这对其他人有帮助!

于 2015-10-13T16:25:12.277 回答
0

Application Files 文件夹内是一个.application文件(或 .manifest - 抱歉,我现在不在机器前,所以无法检查)。该文件是内部的 XML,因此您可以打开它并对其进行编辑。它将包含对所有缺失的引用。确保它指定的版本是正确的,因为我见过如果您每次发布到同一个位置,该文​​件不会重新生成的情况。如果您确定这是正确的,那么您需要确保您的单击一次包中包含正确的 MySQL 程序集。(更多来)

于 2012-09-04T20:48:43.043 回答