部署ClickOnce应用程序时出错 – 清单中的引用与下载的程序集的标识不匹配
我试图部署一个ClickOnce应用程序,但安装在客户端上失败。 这里是错误日志:
PLATFORM VERSION INFO Windows : 6.1.7601.65536 (Win32NT) Common Language Runtime : 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 Deployment url : http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application Server : Microsoft-IIS/7.5 X-Powered-By : ASP.NET Deployment Provider url : http://MyProduct.com/Download/Workstation/MyProduct%20Front%20Desk.application Server : Microsoft-IIS/7.5 X-Powered-By : ASP.NET Application url : http://MyProduct.com/Download/Workstation/Application%20Files/MyProduct%20Front%20Desk_1_0_0_7/MyProduct%20Front%20Desk.exe.manifest Server : Microsoft-IIS/7.5 X-Powered-By : ASP.NET IDENTITIES Deployment Identity : MyProduct Front Desk.application, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, processorArchitecture=msil Application Identity : MyProduct Front Desk.exe, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, 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 http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application resulted in exception. Following failure messages were detected: + Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe. COMPONENT STORE TRANSACTION FAILURE SUMMARY No transaction error was detected. WARNINGS There were no warnings during this operation. OPERATION PROGRESS STATUS * [03/17/11 11:51:04] : Activation of http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application has started. * [03/17/11 11:51:04] : Processing of deployment manifest has successfully completed. * [03/17/11 11:51:04] : Installation of the application has started. * [03/17/11 11:51:05] : Processing of application manifest has successfully completed. * [03/17/11 11:51:06] : Found compatible runtime version 4.0.30319. * [03/17/11 11:51:06] : Request of trust and detection of platform is complete. ERROR DETAILS Following errors were detected during this operation. * [03/17/11 11:51:30] System.Deployment.Application.InvalidDeploymentException (RefDefValidation) - Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe. - Source: System.Deployment - Stack trace: 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.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next) at System.Deployment.Application.SystemNetDownloader.DownloadAllFiles() 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) COMPONENT STORE TRANSACTION DETAILS No transaction information is available.
我需要部署的主要exe文件是MyProductFrontDesk.exe
,它对MyProductFrontDesk.exe
有一个依赖关系,而且似乎是引发错误的地方:“清单中的引用与下载的程序集MyProductSiteServer.exe的标识不匹配“。
哪个清单需要更正? 如何?
Visual Studio 2008存在一个问题,通过不embedded默认的清单解决了这个问题 – 对这篇文章的评论之一表明这个问题在Visual Studio 2010中依然存在。
在项目属性 – > 应用程序选项卡 – > 资源 – >checkbox图标和清单 ,设置“embedded清单与默认设置”引起的问题。 将其设置为“不使用清单创build应用程序”可以修复问题。
我遇到了同样的问题,但我的解决scheme非常不同。
我的ClickOnce应用程序引用了我的解决scheme中的另一个EXE文件项目,所以当客户端下载它时,还有另一个EXE文件,那个没有清单。
删除对另一个可执行文件的依赖解决了我的问题。
当我添加对另一个项目的引用时,我遇到了同样的问题。
解决这个问题的方法是在所有被引用的项目中启用ClickOnce安全设置 ,就像Ian 在这里解释的那样。
我相信这是在同一解决scheme中引用另一个项目时修复它的正确方法。
编辑:这是从链接的相关块(重点我的):
对我来说,解决这个问题的方法是确保在解决scheme中暴露其“ 项目属性 ”中的“ 安全选项卡 ”的所有项目都具有选项“ 启用ClickOnce安全设置 ”选项“ 这是一个完全信任应用程序 “选中。 这与正确创buildManifest有关,如果这些选项没有在解决scheme中的所有需要它的项目上设置,应用程序将不会安装。
我确认在Visual Studio 2010中也存在此问题。在“项目属性 – 应用程序 – 资源”中select“不使用清单创build应用程序”。解决了此问题。
如果在项目的不同DLL文件中引用了两个不同版本的NuGet包,也会发生这种情况。 在我的情况下,我使用了一个名为Catel的框架,并且我在一个DLL文件中引用了比另一个(监督)更新的版本,但是这导致ClickOnce吐出这个错误。 引用相同的版本解决了这个问题。
我有同样的问题,但我的解决scheme是将“平台目标”更改为“x86”(项目属性 – >生成选项卡)。 它被设置为任何CPU。 只要我更改设置并重新发布,ClickOnce安装程序就能够完成。
我有完全相同的问题。 我无法删除主项目所需的依赖项。 第二个项目是一个控制台项目。
我改为class级图书馆 ,然后一切正常。
在将项目设置为“debugging”的情况下进行部署时,我遇到了同样的错误。 当它被改回到释放时,没有错误。
也解决了ClickOnce .exe调用.exe调用.exe。
我也有这个问题,在Visual Studio 2010中使用VB.NET。
我有一个ClickOnce Windows窗体应用程序引用第二个Windows窗体应用程序,依次引用第三个Windows窗体应用程序。 (为简单起见,这些第二和第三个应用程序是EXE文件而不是DLL文件,因为它们同样可能独立运行或通过传递给它们的属性来调用。
我不得不按照第二个和第三个应用程序的清单内容注释:
演练:手动部署ClickOnce应用程序
它完美的作品。
我有同样的问题,我在这里尝试了所有以前的build议解决scheme,他们都没有工作。
我通过更改更新位置来修复它。 从项目属性 – > 发布 – > 更新 。 将更新位置更改为发布的文件夹。
另一个解决方法,以防万一具有不良的应用程序清单的依赖性exe不能改变(比如来自NuGet包)。 该二进制文件可以作为内容包含在一个虚拟扩展名中,因此ClickOnce不会尝试validation清单,然后在应用程序启动过程中重命名。
的csproj:
<Content Include="..\packages\<package>\lib\<app>.exe"> <Link><app>.exe.bin</Link> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <ItemGroup> <PublishFile Include="<app>"> <Visible>False</Visible> <Group> </Group> <TargetPath> </TargetPath> <PublishState>Exclude</PublishState> <IncludeHash>True</IncludeHash> <FileType>Assembly</FileType> </PublishFile> </ItemGroup>
App.xaml.cs:
public partial class App : Application { private void Application_Startup(object sender, StartupEventArgs e) { var appDir = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); if (!File.Exists($"{appDir}\\<app>.exe")) { File.Copy($"{appDir}\\<app>.exe.bin", $"{appDir}\\<app>.exe"); } } }
我在Windows 7上使用Visual Studio 2012,需要发布由两个项目组成的解决scheme。
正如Eduardo指出的那样,将两个项目都标记为ClickOnce,并启用完全信任应用程序即可解决问题。
我有一个不同的问题,我能解决,所以我想发布。 我的问题是我从TFS运行3个分支。 我在我的一个分支中升级了Telerik控件,但没有升级其他分支。 一旦我升级了所有3个分支的Telerik控件,并重新发布它的工作,这个错误消失了。
我当时正在运行VS2015。