ClickOnce清单

5

我们目前正在通过ClickOnce部署WPF 4应用程序,但存在安装失败的情况。

如果用户没有安装.NET 4.0完整版并尝试安装我们的应用程序,则框架会安装成功,但应用程序无法安装。 如果我们重新运行安装,则应用程序可以成功安装。

以下是日志副本:

    PLATFORM VERSION INFO
    Windows             : 6.1.7600.0 (Win32NT)
    Common Language Runtime     : 2.0.50727.4927
    System.Deployment.dll         : 2.0.50727.4927 (NetFXspW7.050727-4900)
    mscorwks.dll             : 2.0.50727.4927 (NetFXspW7.050727-4900)
    dfdll.dll             : 2.0.50727.4927 (NetFXspW7.050727-4900)
    dfshim.dll             : 4.0.31106.0 (Main.031106-0000)

SOURCES
    Deployment url            : [URL REMOVED]
                        Server        : Apache/2.0.54
    Application url            : [URL REMOVED]
                        Server        : Apache/2.0.54

IDENTITIES
    Deployment Identity        : Graphicly.App.application, Version=0.3.2.0, Culture=neutral, PublicKeyToken=c982228345371fbc, processorArchitecture=msil
    Application Identity        : Graphicly.App.exe, Version=0.3.2.0, Culture=neutral, PublicKeyToken=c982228345371fbc, processorArchitecture=msil, type=win32

APPLICATION SUMMARY
    * Installable application.

ERROR SUMMARY
    Below is a summary of the errors, details of these errors are listed later in the log.
    * Dependency Graphicly.WCFClient.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.WCFClient.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Microsoft.Surface.Presentation.Design.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Microsoft.Surface.Presentation.Design.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency GalaSoft.MvvmLight.WPF4.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file GalaSoft.MvvmLight.WPF4.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.Infrastructure.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.Infrastructure.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.AutoUpdater.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.AutoUpdater.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency System.Windows.Interactivity.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file System.Windows.Interactivity.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Microsoft.Surface.Presentation.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Microsoft.Surface.Presentation.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.Fonts.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.Fonts.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.Reader.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.Reader.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Microsoft.Surface.Presentation.Generic.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Microsoft.Surface.Presentation.Generic.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.Controls.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.Controls.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.SocialNetwork.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.SocialNetwork.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.Archive.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.Archive.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency Graphicly.App.exe cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file Graphicly.App.exe: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Dependency GalaSoft.MvvmLight.Extras.WPF4.dll cannot be processed for patching. Following failure messages were detected:
        + Exception occurred loading manifest from file GalaSoft.MvvmLight.Extras.WPF4.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.
    * Activation of [URL REMOVED] resulted in exception. Following failure messages were detected:
        + Exception occurred loading manifest from file GalaSoft.MvvmLight.Extras.WPF4.dll: the manifest may not be valid or the file could not be opened.
        + Cannot load internal manifest from component file.

COMPONENT STORE TRANSACTION FAILURE SUMMARY
    No transaction error was detected.

WARNINGS
    * The file named Microsoft.Windows.Design.Extensibility.dll does not have a hash specified in the manifest. Hash validation will be ignored.
    * The file named Ionic.Zip.Reduced.dll does not have a hash specified in the manifest. Hash validation will be ignored.
    * The file named Newtonsoft.Json.dll does not have a hash specified in the manifest. Hash validation will be ignored.
    * The file named Microsoft.WindowsAzure.StorageClient.dll does not have a hash specified in the manifest. Hash validation will be ignored.
    * The file named Dimebrain.TweetSharp.dll does not have a hash specified in the manifest. Hash validation will be ignored.
    * The file named Microsoft.Windows.Design.Interaction.dll does not have a hash specified in the manifest. Hash validation will be ignored.
    * The file named HtmlAgilityPack.dll does not have a hash specified in the manifest. Hash validation will be ignored.
    * The file named Facebook.dll does not have a hash specified in the manifest. Hash validation will be ignored.

OPERATION PROGRESS STATUS
    * [20/05/2010 09:17:33] : Activation of [URL REMOVED] has started.
    * [20/05/2010 09:17:38] : Processing of deployment manifest has successfully completed.
    * [20/05/2010 09:17:38] : Installation of the application has started.
    * [20/05/2010 09:17:39] : Processing of application manifest has successfully completed.
    * [20/05/2010 09:17:40] : Request of trust and detection of platform is complete.

ERROR DETAILS
    Following errors were detected during this operation.
    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.WCFClient.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Microsoft.Surface.Presentation.Design.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file GalaSoft.MvvmLight.WPF4.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.Infrastructure.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.AutoUpdater.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file System.Windows.Interactivity.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Microsoft.Surface.Presentation.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.Fonts.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.Reader.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:40] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Microsoft.Surface.Presentation.Generic.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:41] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.Controls.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:41] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.SocialNetwork.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:41] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.Archive.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:41] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file Graphicly.App.exe: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:41] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file GalaSoft.MvvmLight.Extras.WPF4.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.FileDownloader.AddFilesInHashtable(Hashtable hashtable, AssemblyManifest applicationManifest, String applicationFolder)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:

    * [20/05/2010 09:17:41] System.Deployment.Application.InvalidDeploymentException (ManifestLoad)
        - Exception occurred loading manifest from file GalaSoft.MvvmLight.Extras.WPF4.dll: the manifest may not be valid or the file could not be opened.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.Manifest.AssemblyManifest.ManifestLoadExceptionHelper(Exception exception, String filePath)
            at System.Deployment.Application.Manifest.AssemblyManifest.LoadFromInternalManifestFile(String filePath)
            at System.Deployment.Application.DownloadManager.ProcessDownloadedFile(Object sender, DownloadEventArgs e)
            at System.Deployment.Application.FileDownloader.DownloadModifiedEventHandler.Invoke(Object sender, DownloadEventArgs e)
            at System.Deployment.Application.FileDownloader.PatchSingleFile(DownloadQueueItem item, Hashtable dependencyTable)
            at System.Deployment.Application.FileDownloader.PatchFiles(SubscriptionState subState)
            at System.Deployment.Application.FileDownloader.Download(SubscriptionState subState)
            at System.Deployment.Application.DownloadManager.DownloadDependencies(SubscriptionState subState, AssemblyManifest deployManifest, AssemblyManifest appManifest, Uri sourceUriBase, String targetDirectory, String group, IDownloadNotification notification, DownloadOptions options)
            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, String& errorPageUrl)
            at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)
        --- Inner Exception ---
        System.Deployment.Application.DeploymentException (InvalidManifest)
        - Cannot load internal manifest from component file.
        - Source:
        - Stack trace:


COMPONENT STORE TRANSACTION DETAILS
    No transaction information is available.

我感到困惑。这可能是什么?

我注意到在安装后运行的dfsvc.exe位于.NET 2文件夹中。当我重新运行安装程序时,dfsvc.exe位于.NET 4文件夹中。


我一直在与微软的支持人员交流,我们发现由于之前安装和卸载了.NET 4的先前版本(在我们的情况下是beta),留下了几个文件。当执行.NET的安装程序时,需要重命名一些文件然后重新启动计算机,但由于这些文件是由以前的版本留下的,因此安装程序认为重命名已经完成,并且不要求重新启动计算机。

3个回答

2

你的解决方案中的所有项目都是针对.NET 4.0吗?
是.NET 4.0客户端框架还是完整的框架?
你是否在先决条件中部署了正确的框架版本?

我将把这个问题提交给产品团队,看看他们是否有任何意见。


我已经与微软的C/O产品负责人交谈过了。他想知道最终用户在安装.NET 4.0后是否重新启动了计算机?.NET 4.0确实需要重新启动。 - RobinDotNet
这是所有项目的完整框架,点击一次需要的前提条件也是它。机器没有重新启动,但没有任何选项/警告提示需要重新启动。 - TWith2Sugars
我猜我的问题是:用户是否被提示重新启动计算机,但选择不重新启动?我安装.NET 4.0的每台计算机都要求重新启动。如果这台计算机没有,则说明.NET 4.0的安装存在问题。这台机器运行的操作系统是什么? - RobinDotNet
机器没有提示。操作系统是Win 7 32 + 64。 - TWith2Sugars
2
好的,那么这些机器上已经安装了.NET 3.5,而C/O则安装了.NET 4.0,但它并没有提示重新启动。这是个问题。你想在http://connect.microsoft.com/VisualStudio上报告一个错误并将链接发回来吗?我会与他们分享的。听起来像个错误。如果你不想发布错误,请回复评论,我会为你发布。(如果你发布它,他们会回复你并让你知道何时修复。) - RobinDotNet
好的,把 bug 发给我吧 :) 谢谢 @RobinDotNet - TWith2Sugars

1

微软现在声称这是一个已知问题,但他们没有时间在Visual Studio 2010中修复它,并且将在“未来版本中考虑”。


0

我们的一小部分客户在应用程序更新或新安装时,在日志中收到了此消息,尽管与.NET 4是否已安装无关。

事实证明,熊猫杀毒软件在某种程度上搞砸了它。

通过暂时禁用它,ClickOnce 安装完成。这对我们起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接