c# - 必须在全局程序集缓存 (GAC) 中安装 Clickonce 部署程序集

标签 c# deployment clickonce

我有一系列应用程序引用我使用 ClickOnce 部署的单个库项目。这个库项目引用了几个库来处理数据处理和硬件接口(interface)等事情。这些被标记为 LocalCopy=False,并且在使用 ClickOnce 时默认成为“应用程序文件...”中的先决条件。

虽然这对于大多数应用程序来说是完美的,但并非我的所有应用程序都需要所有库。例如,仅用于查看数据的程序不需要硬件库。

遵循 this thread 的逻辑我将文件设置为排除,因为我实际上并不需要它们,但收到错误“无法安装或运行应用程序。该应用程序要求首先在全局程序集缓存 (GAC) 中安装程序集 NationalInstruments.Common 8.20.306。 "

如果我将它们设置为包括应用程序将安装,但随后在运行时会出现错误“应用程序无法启动。请联系应用程序供应商”。如果我单击此对话框上的详细信息按钮,我会得到一个日志文件:

PLATFORM VERSION INFO
Windows             : 5.1.2600.196608 (Win32NT)
Common Language Runtime     : 2.0.50727.3623
System.Deployment.dll       : 2.0.50727.3053 (netfxsp.050727-3000)
mscorwks.dll            : 2.0.50727.3623 (GDR.050727-3600)
dfdll.dll           : 2.0.50727.3053 (netfxsp.050727-3000)
dfshim.dll          : 4.0.31106.0 (Main.031106-0000)

SOURCES
Deployment url          : file://nt_server/prog/Publish/ResultsLoader/ATE%20Results%20Loader.application
Deployment Provider url     : file://nt_server/prog/Publish/ResultsLoader/ATE%20Results%20Loader.application
Application url         : file://nt_server/prog/Publish/ResultsLoader/Application%20Files/ATE%20Results%20Loader_1_0_0_5/ATE%20Results%20Loader.exe.manifest

IDENTITIES
Deployment Identity     : ATE Results Loader.application, Version=1.0.0.5, Culture=neutral, PublicKeyToken=67305960c2b2ce03, processorArchitecture=msil
Application Identity        : ATE Results Loader.exe, Version=1.0.0.5, Culture=neutral, PublicKeyToken=67305960c2b2ce03, 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.
* Activation of \\nt_server\prog\Publish\ResultsLoader\ATE Results Loader.application resulted in exception. Following failure messages were detected:
    + Value does not fall within the expected range.

COMPONENT STORE TRANSACTION FAILURE SUMMARY
No transaction error was detected.

WARNINGS
There were no warnings during this operation.

OPERATION PROGRESS STATUS
* [4/23/2012 11:07:42 AM] : Activation of \\nt_server\prog\Publish\ResultsLoader\ATE Results Loader.application has started.
* [4/23/2012 11:07:52 AM] : Processing of deployment manifest has successfully completed.
* [4/23/2012 11:07:52 AM] : Installation of the application has started.
* [4/23/2012 11:07:52 AM] : Processing of application manifest has successfully completed.
* [4/23/2012 11:07:55 AM] : Request of trust and detection of platform is complete.
* [4/23/2012 11:08:02 AM] : Downloading of subscription dependencies is complete.
* [4/23/2012 11:08:02 AM] : Commit of the downloaded application has started.
* [4/23/2012 11:08:05 AM] : Installation of application has successfully completed.

ERROR DETAILS
Following errors were detected during this operation.
* [4/23/2012 11:08:06 AM] System.ArgumentException
    - Value does not fall within the expected range.
    - Source: System.Deployment
    - Stack trace:
        at System.Deployment.Application.NativeMethods.CorLaunchApplication(UInt32 hostType, String applicationFullName, Int32 manifestPathsCount, String[] manifestPaths, Int32 activationDataCount, String[] activationData, PROCESS_INFORMATION processInformation)
        at System.Deployment.Application.ComponentStore.ActivateApplication(DefinitionAppId appId, String activationParameter, Boolean useActivationParameter)
        at System.Deployment.Application.SubscriptionStore.ActivateApplication(DefinitionAppId appId, String activationParameter, Boolean useActivationParameter)
        at System.Deployment.Application.ApplicationActivator.Activate(DefinitionAppId appId, AssemblyManifest appManifest, String activationParameter, Boolean useActivationParameter)
        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)

COMPONENT STORE TRANSACTION DETAILS
* Transaction at [4/23/2012 11:08:05 AM]
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: NRJMNL92.0H4.application
    + System.Deployment.Internal.Isolation.StoreOperationSetDeploymentMetadata
        - Status: Set
        - HRESULT: 0x0
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: ATE Results Loader.exe.manifest
    + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile
        - Status: Installed
        - HRESULT: 0x0
        - File: ATE Results Loader.xml
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: NationalInstruments.Common.Native.dll.genman
    + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile
        - Status: Installed
        - HRESULT: 0x0
        - File: NationalInstruments.Common.Native.dll
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: NationalInstruments.DAQmx.dll.genman
    + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile
        - Status: Installed
        - HRESULT: 0x0
        - File: NationalInstruments.DAQmx.dll
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: NationalInstruments.Common.dll.genman
    + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile
        - Status: Installed
        - HRESULT: 0x0
        - File: NationalInstruments.Common.dll
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: ATE.dll.genman
    + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile
        - Status: Installed
        - HRESULT: 0x0
        - File: ATE.dll
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: NationalInstruments.NI4882.dll.genman
    + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile
        - Status: Installed
        - HRESULT: 0x0
        - File: NationalInstruments.NI4882.dll
    + System.Deployment.Internal.Isolation.StoreOperationStageComponent
        - Status: Installed
        - HRESULT: 0x0
        - Manifest: ATE Results Loader.exe.genman
    + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile
        - Status: Installed
        - HRESULT: 0x0
        - File: ATE Results Loader.exe
    + System.Deployment.Internal.Isolation.StoreOperationInstallDeployment
        - Status: Installed
        - HRESULT: 0x0
        - AppId: file://nt_server/prog/Publish/ResultsLoader/ATE%20Results%20Loader.application#ATE Results Loader.application, Version=1.0.0.5, Culture=neutral, PublicKeyToken=67305960c2b2ce03, processorArchitecture=msil
    + System.Deployment.Internal.Isolation.StoreOperationSetDeploymentMetadata
        - Status: Set
        - HRESULT: 0x0
    + System.Deployment.Internal.Isolation.StoreTransactionOperationType (27)
        - HRESULT: 0x0

最佳答案

我又一次终于找到了解决方案,但仍然无法解释为什么会出现这个问题。

重置应用程序文件后,我注意到这个引用创建了列出的 2 个 DLL 应用程序文件。一种列为 NationalInstruments.Common.Native.dll,另一种没有 native 标记。 dll 的 native 之一默认包含 where,因为其他默认为先决条件。如果我将先决条件更改为排除并将另一个保留为包含,应用程序将安装。其他 NationalInstruments 引用仅生成一个 DLL 应用程序文件,我可以毫无问题地将其排除。

从技术上讲,我的问题已解决,但如果有人可以提供有关此引用产生 2 个 DLL 的原因以及为什么即使未使用也不能排除一个 DLL 的见解,我将不胜感激。

关于c# - 必须在全局程序集缓存 (GAC) 中安装 Clickonce 部署程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283246/

相关文章:

visual-studio - 如何在 ClickOnce 部署中自动重命名 "Application Files"文件夹

c# - ClickOnce 部署自动更新不起作用

python - 更新 PostgreSQL 架构并将其部署到 Heroku

c# - 并发集合和唯一元素

c# - 应用程序停用时如何关闭 BackgroundWorker 线程?

c# - 改进算法执行时间

java - Maven 'deploy' 导致签名操作后代码重新打包(BAD签名)

wcf - 如何从Makefile打包WCF服务?

clickonce - 有没有办法将关键字添加到 ClickOnce 部署创建的开始菜单快捷方式?

c# - 刷新列表<>绑定(bind)微调器 MVVM Xamarin