ClickOnceアプリケーションの展開エラー-マニフェストの参照がダウンロードされたアセンブリのIDと一致しません


105

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のIDと一致しません。」

どのマニフェストを修正する必要がありますか?そしてどうやって?


MySiteServer.exeプロジェクトは、MyProductFrontDesk.exeと同じVisual Studioソリューションにありますか?もしそうなら、あなたのビルド構成はビルドするために両方のアセンブリが選択されていますか?
ジェイ

@ジェイ-はい、同じソリューションで、どちらもビルドするように選択されました。
Shaul Behr 2011年

回答:


111

デフォルトのマニフェストを埋め込まないことで解決するVisual Studio 2008の問題がありまし -その記事へのコメントの1つは、問題がVisual Studio 2010にまだ存在していることを示唆しています。

プロジェクトのプロパティ-> アプリケーションタブ-> リソース ->チェックボックスアイコンとマニフェストで、「デフォルト設定でマニフェストを埋め込む」設定が問題の原因でした。「マニフェストなしでアプリケーションを作成する」に設定すると、問題が解決します。


私が見つかりました。コメント488301は特に便利:<assemblyIdentity/>カスタムの要素は、マニフェスト(コンパイラが正しいアセンブリのIDを発光させるために、または省略)を調整することができるカスタムで.manifestファイル、のようなものを指定するために1つを可能にする<requestedExecutionLevel/>のClickOnceを壊すことなく。
binki 2013

4
私のシナリオは、コンソールアプリである2番目のアプリを必要とするGUIアプリでした。私のようにデフォルト設定を変更したくない場合は、その2番目のアプリケーションを手動で公開すると、プロパティフォルダーに表示されるapp.manifestが作成され、マニフェストを埋め込むというデフォルト設定を変更せずに、最初のアプリケーションを再度公開できました。
アイベ2014年

7
VS 2013でも同じ問題がありました。このソリューションは機能しました。
EagleBeak 14

2
@EagleBeak VS2013のこのメニューはどこにありますか?「マニフェストなしのアプリケーションの作成」については何も
見当たら

3
2016年6月現在、正しい答えはClickOnceのセキュリティ設定を構成することです(Mauroによって投稿された回答を参照)。
Pierre Arnaud

57

別のプロジェクトへの参照を追加したときにも同じ問題が発生しました。

これを解決する方法は、Ianがここで説明しように、すべての参照プロジェクトでClickOnceのセキュリティ設定を有効にすることでし(強調は私)

私にとって、これが解決された方法は、「プロジェクトのプロパティ」の「セキュリティタブを公​​開したソリューションの下のすべてのプロジェクトに、「ClickOnceセキュリティ設定を有効にする」オプションが選択されていることを確認することでした。これは完全な信頼ですアプリケーション」が選択されました。これは、マニフェストを正しく作成することに関係しており、ソリューションを必要とするすべてのプロジェクトでこれらのオプションが設定されていない場合、アプリケーションはインストールされません。

これは、同じソリューションで別のプロジェクトを参照するときに修正する適切な方法だと思います。

リンクされたフォーラムの投稿は今では期限切れですが、こちらのアーカイブから入手できます


1
非常に多くの解決策を試した後、この解決策だけが私のために機能します。だから私はこれも受け入れられる答えになるはずだと思います...
Tareq

あなたは、変更と同じことを行うことができます.cprojし、ファイルを<PropertyGroup><TargetZone>LocalIntranet</TargetZone></PropertyGroup>
VMAtm

をいじくり回している間、これら2つの設定を無効にしていましたhttps://github.com/Squirrel。私の(非プロダクション)ClickOnce配置が機能しなくなったとき、私はこれについてすべて忘れていました。
Walter Stabosz、2018年

35

私は同じ問題に直面していましたが、私の解決策は非常に異なっていました。

ClickOnceアプリケーションがソリューション内の別のEXEファイルプロジェクトを参照していたため、クライアントがそれをダウンロードしたときに別のEXEファイルがあり、そのファイルにはマニフェストがありませんでした。

別の実行可能ファイルへの依存関係を削除すると、問題が解決しました。


2
2つのEXEもあります。依存関係を削除すると、参照されたEXEがビルドから除外されます。それを含める方法はありますか?
Uri Abramson 2013

10
これが私の解決策でした。私のメインEXEが参照していたプロジェクトの1つは、それ自体が「Windowsアプリケーション」でした。そのプロジェクトを「クラスライブラリ」に変更して再公開すると、すべてが機能しました。
Chris Ray

私はVS2012で@ChrisRayの提案を使用し、プログラムは問題なくインストールされました。ありがとう!
Rolan、2015

1
ユーザー@Aybeが別の回答のコメントで言及しているように、2番目のアプリケーションをダミー公開すると、独自のマニフェストが取得され、最初のアプリケーションを公開でき、両方のプログラムが連携します。(私の場合、2つのプログラムがあり、一方が他方を呼び出します。)
Dave Cousineau 2017

私にとっての解決策は本当に両方(thisと@stuartd)でした-私は参照アセンブリとしてEXEを持っていますが、マニフェストはありません。しかし、この参照を使用する必要があるため、この参照を「削除」することはできません。したがって、私はこのEXE依存関係のプロジェクトに行かなければならず、スチュワートの提案を適用しました。その後、すべてがうまくいきます。
KFL 2018

11

この問題はVisual Studio 2010にも存在することを確認しました。プロジェクトのプロパティ-アプリケーション-リソースで[マニフェストなしでアプリケーションを作成]を選択すると、問題が解決しました。


8
エラーメッセージが表示されたプロジェクトでこのプロパティを変更する必要があったことに注意してください。これは、実際に公開しようとしているプロジェクトではなく、実際に公開しようとしているプロジェクトによって参照されているプロジェクトです。 。
deadlydog

6

これは、プロジェクトの異なるDLLファイルで参照されるNuGetパッケージの2つの異なるバージョンがある場合にも発生する可能性があります。私の場合、Catelと呼ばれるフレームワークを使用していて、あるDLLファイルで別のバージョンよりも新しいバージョンが参照されていました(見落とし)、これによりClickOnceがこのエラーを吐き出しました。同じバージョンを参照することで問題は解決しました。


4

同じ問題がありましたが、私の解決策は「プラットフォームターゲット」を「x86」に変更することでした(プロジェクトのプロパティ->ビルドタブ)。Any CPUに設定されました。設定を変更して再公開するとすぐに、ClickOnceインストーラーが完了しました。


1
非常によく似た問題:「32ビット優先」を有効にしました。オフにすると問題が解決しました。
Roman Starkov 16

4

プロジェクトをデバッグに設定してデプロイすると、同じエラーが発生しました。それがリリースに戻されたとき、エラーはありませんでした。


4

私はまったく同じ問題を抱えていました。メインプロジェクトで必要なため、依存関係を削除できませんでした。2番目のプロジェクトはコンソールプロジェクトです。

私はClass Libraryに変更しましたが、すべてうまくいきました。


このコメントで問題が解決しました。ありがとうございました!
casaout 2015

2

別の回避策。悪いアプリマニフェストを含む依存関係の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

私は同じ問題を抱えており、以前に提案されたすべての解決策をここで試しましたが、それらすべてが機能しませんでした。

更新場所を変更して修正しました。プロジェクトのプロパティ-> 公開 -> 更新から。更新場所を公開フォルダーに変更します。


1

.exeを呼び出す.exeを呼び出すClickOnceについても解決

Visual Studio 2010でVB.NETを使用して、この問題も発生しました。

ClickOnce Windowsフォームアプリケーションがあり、これが2番目のWindowsフォームアプリケーションを参照し、次に、3番目のWindowsフォームアプリケーションを参照しています。(これらの2番目と3番目のアプリケーションは、単純化のためにDLLファイルではなくEXEファイルです。これらは、スタンドアロンで実行されるか、プロパティが渡されて呼び出される可能性が高いためです。)

2番目と3番目のアプリケーションのマニフェストコンテンツの両方をコメントアウトする必要がありました。

チュートリアル:ClickOnceアプリケーションの手動展開

それは完全に動作します。


1

別のプログラムを参照するメインプログラムがある場合は、メインプログラムのプログラムで「マニフェストなしでアプリケーションを作成する」トリックを実行する必要があります。

プロジェクト->プロパティ->アプリケーションタブ->リソース->マニフェスト->ドロップダウン[マニフェストなしでアプリケーションを作成]

次に、参照されているプログラムのプロジェクトプロパティに切り替えて、プロセスを繰り返します。


0

Windows 7でVisual Studio 2012を使用していて、2つのプロジェクトで構成されるソリューションを公開する必要があります。

Eduardoが指摘したように、両方のプロジェクトをClickOnceとしてマークし、完全信頼アプリケーションを有効にすると問題が解決します。


0

解決できる問題が少しあったので、投稿したいと思いました。私の問題は、TFSから3つのブランチを実行していたことでした。私は自分のブランチの1つでTelerikコントロールをアップグレードしましたが、他のブランチはアップグレードしませんでした。3つのブランチすべてでTelerikコントロールをアップグレードして再公開すると、機能し、このエラーはなくなりました。

当時、私はVS2015を実行していました。


0

それは面白いです。アプリケーションを再デプロイするだけで問題は解決しました。ネットワークが原因でファイルが破損している可能性があります。


0

mage.exeマニフェストを生成するために使用します。これを私.csprojの問題に追加しました。-nowin32manifest コンパイラフラグを試すこともできます。私はそれをテストしていません。Visual Studio 2017でstuartdの「マニフェストなしでアプリケーションを作成する」が表示されません。私はこれが何をしているのかと思います。

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

私もこれを持っています.csproj

<GenerateManifests>false</GenerateManifests>

0

私のバージョンのVisual Studio 2017、バージョン15.6.6(以前にあった可能性があります)で、アプリケーションファイルが右クリックのExeプロジェクトとパブリッシュではなく、プロジェクトプロパティの[パブリッシュ]タブの下にあることを確認しました。インストールに含めるアプリケーションファイルの一覧。

だから問題のあるものを取り出してください。このアプリがインストールされるコンピューターに何かが既にインストールされている場合は、それを実行するための参照が必要な場合を除いて、とにかくそれを再インストールしようとする理由はありません。PCに既にインストールされているものをインストールする場合、別のフォルダーにインストールすると機能しない可能性があります。他のアプリケーションまたはDLLアセンブリは、以前にインストールされていたのと同じ場所に使用するのが最善です。


0

私は数分前に同じ問題を抱えていましたが、以下はそれを解決するために使用した手順です。

キー

  • a =メインプロジェクト(公開するプロジェクト、たとえばmyProduct)
  • b =参照プロジェクト(例:MyProductSiteServer)

チェックリスト

  1. プロパティ->アプリケーション->リソース->アイコンとマニフェスト(aとbの両方)に移動します。

  2. プロパティに移動->ビルド:aとbが同じターゲットプラットフォームにあることを確認します

  3. プロパティ->セキュリティに移動し、aとbで次の設定がオンになっていることを確認します。「ClickOnceセキュリティ設定を有効にする」と「これは完全信頼アプリケーションです」

  4. プロパティに移動します->公開:公開フォルダのパスを変更することをお勧めします


0

私のVS 2019アプリケーションでもまったく同じ問題がありました。

マニフェストなしでアプリケーションを作成しようとしましたが、機能しませんでした。

しかし、うまくいったのは次のとおりです。

  1. ビルド->公開->アプリケーションに移動します
  2. 「Assembly Information」ボタンをクリックしてください
  3. [アセンブリをCOM-Visibleにする]オプションをチェックします

うまくいけば、これが役立ちます!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.