ClickOnce应用程序抛出错误“..需要首先在全局程序集缓存(GAC)中安装程序集MySql.Data版本6.5.4.0。”

时间:2012-09-04 20:30:06

标签: c# asp.net .net mysql windows

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

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

  

需要系统更新:

     

无法安装或运行该应用程序。该应用程序需要   程序集MySql.Data版本6.5.4.0将安装在Global中   首先是汇编缓存(GAC)。

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

Coworker还挖出了以下错误日志:

  

平台版本信息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)     dfdll.dll:4.0.30319.1(RTMRel.030319-0100)dfshim.dll:   4.0.31106.0(Main.031106-0000)

     

SOURCES部署网址:   文件:/// C:/GearBox/app/publish/ClockworksConsoleApplication.application     申请网址:   文件:/// C:/GearBox/app/publish/Application%20Files/ClockworksConsoleApplication_1_0_0_6/ClockworksConsoleApplication.exe.manifest

     

IDENTITIES部署标识:   ClockworksConsoleApplication.application,Version = 1.0.0.6,   Culture = neutral,PublicKeyToken = efa8c6cf1fc52128,   processorArchitecture = msil应用程序标识:   ClockworksConsoleApplication.exe,Version = 1.0.0.6,Culture = neutral,   PublicKeyToken = efa8c6cf1fc52128,processorArchitecture = msil,   类型= win32的

     

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

     

错误摘要以下是错误摘要,详细信息   错误将在日志中稍后列出。 *激活   C:\齿轮箱\程序\发布\ ClockworksConsoleApplication.application   导致例外。检测到以下失败消息:+   无法加载运行时。 (HRESULT异常:0x80131700)

     

COMPONENT STORE TRANSACTION FAILURE SUMMARY没有交易错误   检测

     

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

     

操作进度状态* [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]:处理   应用程序清单已成功完成。 * [2012年8月31日   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)at   System.Deployment.Application.NativeMethods.GetAssemblyCacheInterface(字符串   CLRVersionString,Boolean FetchRuntimeHost,CCorRuntimeHost&   RuntimeHost)at   System.Deployment.Application.PlatformDetector.VerifyPlatformDependencies(AssemblyManifest   appManifest,AssemblyManifest deployManifest,String tempDir)at   System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState   subState,ActivationDescription actDesc,Int64 transactionId,   TempDirectory&安培; downloadTemp)at   System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState&安培;   subState,ActivationDescription actDesc)at   System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(URI   activationUri,Boolean isShortcut,String textualSubId,String   deploymentProviderUrlFromExtension,BrowserSettings browserSettings,   字符串和放大器; errorPageUrl)at   System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(对象   状态)

     

COMPONENT STORE TRANSACTION DETAILS没有交易信息   可用。

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

  

URLDownloadToCacheFile因HRESULT' -2146697211'而失败错误:An   尝试下载时出错   ' HTTP://station52/clockworksEXE/ClockworksConsoleApplication.application' ;.

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

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:1)

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

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

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

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

希望这有助于其他人!

答案 2 :(得分:0)

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