Ошибка при развертывании приложения 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, который имеет зависимость от MyProductSiteServer.exe - и, похоже, там, где возникает ошибка: "Ссылка в манифесте не совпадает с идентификатором загруженной сборки MyProductSiteServer.exe".

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

Ответ 1

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

В свойствах проекта → вкладка "Приложение" → "Ресурсы" → "Значок" и "манифест", параметр "Вставить манифест с настройками по умолчанию" вызвал проблему. Установка этого параметра в "Создать приложение без манифеста" устраняет проблему.

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

У меня была такая же проблема, но мое решение заключалось в том, чтобы изменить "Target Platform" на "x86" (Project Properties → Build Tab). Он был настроен на любой процессор. Как только я изменил настройки и переиздал, установщик ClickOnce смог завершить.

Ответ 7

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

Я перешел в библиотеку классов, а затем все это сработало.

Ответ 8

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

Ответ 9

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

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

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

Мне пришлось прокомментировать ОБОИХ содержание второго и третьего приложений за:

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

Он отлично работает.

Ответ 10

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

Я исправил это, изменив местоположение обновления. Из свойств проекта → Опубликовать → Обновления. Измените местоположение обновления в опубликованной папке.

Ответ 11

Другой способ обхода проблемы, если зависимость 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");
        }
    }
}

Ответ 12

Я использую Visual Studio 2012 в Windows 7 и должен опубликовать решение, состоящее из двух проектов.

Как отметил Эдуардо, обозначение обоих проектов как ClickOnce и включение Full Trust Application устраняет проблему.

Ответ 13

У меня была другая проблема, которую я смог решить, и поэтому хотел опубликовать сообщение. Мои проблемы заключались в том, что я запускал 3 ветки из TFS. Я обновил элементы управления Telerik в одном из моих веток, но не в других. Как только я обновил элементы управления Telerik во всех трех ветких и повторно опубликовал его, эта ошибка исчезла.

В то время я запускал VS2015.

Ответ 14

Это интересно. Я просто перераспределяю приложение и проблему. Возможно, повреждение файла из-за сети.

Ответ 15

Я использую mage.exe для создания своего манифеста. Добавление этого в мой .csproj исправило проблему. Вы также можете попробовать -nowin32manifest флаг компилятора; Я его не тестировал. Я не вижу stuartd "Создать приложение без манифеста" в Visual Studio 2017; Я думаю, что это то, что он делает, хотя.

<PropertyGroup>
  <NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>

У меня также есть это в моем .csproj:

<GenerateManifests>false</GenerateManifests>