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

我是部署.NET应用程序的新手,所以请让我知道是否需要更多的细节。

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

系统更新要求:

无法安装或运行该应用程序。 应用程序需要首先在全局程序集caching(GAC)中安装程序集MySql.Data V6.5.4.0。

我已经做了一些Googlesearch,我不认为这是所提到的任何问题 – 没有防火墙,没有防病毒,具有所有权限的pipe理员帐户。 我检查了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)dfdll。 dll:4.0.30319.1(RTMRel.030319-0100)dfshim.dll:4.0.31106.0(Main.031106-0000)

来源部署url:file:/// C:/GearBox/app/publish/ClockworksConsoleApplication.application应用程序url:file:/// 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,types= win32的

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

错误摘要下面是错误摘要,这些错误的详细信息在日志中稍后列出。 *激活C:\ GearBox \ app \ publish \ ClockworksConsoleApplication.application导致exception。 检测到以下故障消息:+加载运行时失败。 (从HRESULTexception: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]:find兼容的运行时版本2.0.50727。

错误详细信息在此操作过程中检测到以下错误。 System.Runtime.InteropServices.COMException – 无法加载运行时。 (从HRESULTexception:0x80131700) – 来源:System.Deployment – 堆栈跟踪:在System.Deployment.Application.NativeMethods.IClrMetaHostPolicy.GetRequestedRuntime(MetaHostPolicyFlags policyFlags,stringbinaryPath,IStream configStream,StringBuilder版本,Int32和versionLength,StringBuilder imageVersion,Int32和imageVersionLength ,Int32&pdwConfigFlags,Guid interfaceId)at System.Deployment.Application.NativeMethods.GetAssemblyCacheInterface(String CLRVersionString,Boolean FetchRuntimeHost,CCorRuntimeHost&RuntimeHost)在系统上的System.Deployment.Application.PlatformDetector.VerifyPlatformDependencies(AssemblyManifest appManifest,AssemblyManifest deployManifest,String tempDir)。部署.Application.ApplicationActivator.DownloadApplication(SubscriptionState子状态,ActivationDescription actDesc,Int64 transactionId,TempDirectory&downloadTemp)在System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState&subState,ActivationDescription ac System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri,Boolean isShortcut,String textualSubId,String deploymentProviderUrlFromExtension,BrowserSettings browserSettings,String&errorPageUrl)在System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object状态)

零部件商店交易详情无交易信息。

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

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

不过,我改变了我的设置,从CD而不是网站发布,似乎已经解决了这个问题,但我还是得到了GAC错误。

有任何想法吗?

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

这种方式,当您的ClickOnce应用程序部署时,该DLL与本地一起部署,不会在GAC中查找它。

通常情况下,GAC中的东西安装在那里,以供其他应用程序共享,就ClickOnce而言,通常作为先决条件进行安装。 无需在应用程序中包含组件,当然可以减少部署的大小,并允许应用程序使用已在GAC中共享的组件。

你所面对的问题显然与ClickOnce和WinXP有关,解决办法是只包含你的应用程序中的MySQL组件,并在本地使用它到你的应用程序。

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

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

在编译/发布项目2时,GAC中不存在v6.9.4的情况。 所以,我所要做的只是移除Project 1中的v6.9.4,并将引用改为项目2中正在使用的MySql.Data v6.9.7。因此,无论何时我更新一个,它们都会被更新。 之后,我刚刚重建了项目1,重新发布了项目2,工作得很好。

我的建议是检查您的主要应用程序中的所有引用,并确保任何子项目/类库也参考您使用的DLL的相同版本(如果这是有道理的)。

希望这可以帮助别人!

Application Files文件夹里面有一个.application文件(或者.manifest – 对不起,我现在不在机器前面,所以我不能检查)。 该文件是XML内部,所以你可以打开它并编辑它。 它将包含对失踪者的引用。 请确保它指定的版本是正确的,因为我已经看到如果每次发布到同一个位置的情况下该文件不会被重新生成的情况。 如果您确定这是正确的,那么您需要确保您的一次性包中包含正确的MySQL程序集。 (更多来)