C#WinForms - 应用程序安装错误 - 清单中的引用与下载的程序集的标识不匹配

时间:2011-04-06 13:52:19

标签: c# winforms error-handling failed-installation

背景:我有一个用C#编写的winforms应用程序,它通过从命令行调用第二个完全独立的应用程序ConvertExcelTo.Exe将xlsx文件转换为csv。

错误摘要:

   Application validation did not succeed. Unable to continue.
   - Reference in the manifest does not match the identity of the downloaded assembly
     ConvertExcelTo.exe.    
   - Source: System.Deployment
  • 如何/在何处编辑“清单和参考”部分?
  • 如果没有任何错误,我需要更改哪些内容才能正确安装?

在参考文献中,ConvertExcelTo我有:Assembly ConvertExcelTo - C:\ Users \ bmccarthy \ Documents \ Visual Studio 2008 \ Projects \ CCP Utility 3-31-11 \ CCP Utility \ bin \ Debug \ ConvertExcelTo.exe

在References,ConvertExcelTo.vshost下我有:{} Microsoft.VisualStudio.HostingProcess,EntryPoint,Base Types,Objects:~Object(),Equals(object,object),Equals(object),GetHashCode(),GetType( ),MemberwiseClone(),Object(),ReferenceEquals(object,object),ToString()。

完整错误详情:

      WARNINGS
* The manifest for this application does not have a signature. Signature validation 
      will be ignored.
* The manifest for this application does not have a signature. Signature validation 
      will be ignored.

      ERROR DETAILS
Following errors were detected during this operation.
* [4/6/2011] System.Deployment.Application.InvalidDeploymentException(RefDefValidation)
    - Reference in the manifest does not match the identity of the downloaded assembly 
      ConvertExcelTo.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.FileDownloader.OnModified()
        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)

以下是MainForm.cs中我调用ConvertExcelTo.exe应用程序的代码:

            //Process that creates all the xlsx files in temp folder to csv files.
            Process convertFilesProcess = new Process();

            // command prompt execution for Converting Files from XLSX to CSV 
            //convertFilesProcess.StartInfo.WorkingDirectory = ConfigurationSettings.AppSettings["WorkingDirectory"].ToString();
            convertFilesProcess.StartInfo.FileName = "ConvertExcelTo.exe";
            convertFilesProcess.StartInfo.Arguments = " " + tempfolder + "\\ " + "csv";
            convertFilesProcess.StartInfo.UseShellExecute = false;
            convertFilesProcess.StartInfo.CreateNoWindow = true;
            convertFilesProcess.StartInfo.RedirectStandardInput = true;
            convertFilesProcess.StartInfo.RedirectStandardOutput = true;
            convertFilesProcess.StartInfo.RedirectStandardError = true;
            convertFilesProcess.Start();
            convertFilesProcess.WaitForExit();

            StreamReader sOut = convertFilesProcess.StandardOutput;
            StreamReader sErr = convertFilesProcess.StandardError;
            sOut.Close();
            sErr.Close();

感谢您的期待!

2 个答案:

答案 0 :(得分:1)

感谢您的澄清。请查看此页面here。这将指导您如何编辑部署清单。您应该将ConvertExcelTo.exe安装为另一个应用程序。您可以通过清单将其添加为安装过程的先决条件,并将其引导至安装。关于bootstrapping here的一些信息。它适用于VS 2005,但我认为这个过程并没有改变。 Bootstrap Manifest Generator应用程序为here。只需单击“下载”选项卡即可。希望这会帮助你。

答案 1 :(得分:1)

  

从命令行调用第二个完全独立的应用程序ConvertExcelTo.Exe

这不是你在做什么,你实际上是在尝试加载那个EXE程序集。两次,一次通过可视化工作室托管进程版本的可执行文件,仅在您调试EXE时才相关。再次通过常规EXE。这在.NET中有点奇怪,甚至可能在非常精选的情况下派上用场。不是在这里,CLR对此非常适合。

删除您添加的程序集引用。使用Process类启动此程序。