Ошибка развертывания приложения ClickOnce - ссылка в манифесте не соответствует идентификатору загруженной сборки - PullRequest
90 голосов
/ 17 марта 2011

Я пытаюсь развернуть приложение 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.

Основной исполняемый файл, который мне нужно развернуть, это MyProductFrontDesk.exe, который зависит от MyProductSiteServer.exe - и именно там создается ошибка: «Ссылка вманифест не соответствует идентификатору загруженной сборки MyProductSiteServer.exe. "

Какой манифест необходимо исправить?И как?

Ответы [ 18 ]

102 голосов
/ 17 марта 2011

Была проблема с Visual Studio 2008, которая была решена путем отсутствия встраивания манифеста по умолчанию - один из комментариев к этой статье предполагает, что проблема все еще существует в Visual Studio 2010.

В свойствах проекта -> Приложение * вкладка -> Ресурсы -> флажок Значок и манифест , проблема вызвана настройкой «Встраивать манифест с настройками по умолчанию» , Установка «Создать приложение без манифеста» устраняет проблему.

45 голосов
/ 20 мая 2015

У меня была такая же проблема, когда я добавил ссылку на другой проект.

Чтобы решить эту проблему, нужно было включить Настройки безопасности ClickOnce во всех ссылочных проектах, как объяснил Иан здесь (выделено мной):

Для меня решение этой проблемы состояло в том, чтобы все проекты в рамках Решения, которые отображали вкладку " Безопасность " в своих " Свойствах проекта ", имели параметр "Включить настройки безопасности ClickOnce Выбрано «Ticked with Option» Это приложение с полным доверием .Это связано с правильным созданием манифеста, и приложение не будет установлено, если эти параметры не установлены для всех проектов в рамках решения, для которых оно требуется.

Я считаю, что это правильный способ исправитьэто при ссылке на другой проект под тем же решением.

Срок действия ссылки на форуме истек, но он доступен в архиве здесь .

35 голосов
/ 16 апреля 2013

Я столкнулся с той же проблемой, но мое решение было совсем другим.

Мое приложение ClickOnce ссылалось на другой проект файла EXE в моем решении, поэтому, когда клиент загрузил его, и был другой файл EXE, у него не было манифеста.

Удаление зависимости от другого исполняемого файла решило мою проблему.

9 голосов
/ 12 мая 2011

Я подтвердил, что проблема также существует в Visual Studio 2010. Выбор «Создать приложение без манифеста» в Свойства проекта - Приложение - Ресурсы решил эту проблему.

6 голосов
/ 14 мая 2014

Это также может произойти, если у вас есть две разные версии пакета NuGet , на которые есть ссылки в разных файлах DLL в вашем проекте.В моем случае я использовал фреймворк под названием Catel, и у меня была более новая версия, указанная в одном файле DLL, чем в другом (недосмотр), но это заставило ClickOnce выдать эту ошибку.Ссылка на ту же версию решила проблему.

4 голосов
/ 14 июля 2014

У меня была та же проблема, но я решил изменить «Цель платформы» на «x86» (Свойства проекта -> вкладка «Сборка»). Было установлено любое ЦП. Как только я изменил настройки и переиздали, установщик ClickOnce смог завершиться.

4 голосов
/ 14 ноября 2013

У меня была точно такая же проблема.Я не мог удалить зависимость, так как это было необходимо для основного проекта.Второй проект был консольным.

Я изменил на Библиотека классов , и тогда все заработало.

3 голосов
/ 21 октября 2015

Я столкнулся с той же ошибкой при развертывании с проектом, установленным на Debug.Когда он был изменен на Release, ошибки не было.

2 голосов
/ 03 января 2016

Другой обходной путь, если exe зависимости с неверным манифестом приложения изменить нельзя (скажем, из пакета NuGet). Двоичный файл может быть включен в качестве содержимого с фиктивным расширением, поэтому ClickOnce не пытается проверить манифест и затем переименовывается при запуске приложения.

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");
        }
    }
}
1 голос
/ 04 января 2015

ТАКЖЕ РЕШЕНО ДЛЯ ClickOnce .exe, вызывающего .exe, вызывающего .exe.

У меня также была эта проблема при использовании VB.NET в Visual Studio 2010.

У меня есть приложение ClickOnce Windows Forms, которое ссылается на второе приложение Windows Forms, которое, в свою очередь, ссылается на третье приложение Windows Forms. (Эти вторые и третьи приложения для простоты представляют собой EXE файлы, а не DLL-файлы, так как они с равной вероятностью будут выполняться автономно или вызываться со свойствами, переданными им.)

Я должен был закомментировать ОБА * манифест содержания второго и третьего приложений per:

Пошаговое руководство. Развертывание приложения ClickOnce вручную

Работает отлично.

...