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。」
どのマニフェストを修正する必要がありますか?そしてどうやって?
デフォルトのマニフェストを埋め込まないことで解決されるVisual Studio 2008の問題 -その記事のコメントの1つは、問題がVisual Studio 2010にまだ存在することを示唆しています。
プロジェクトのプロパティ->Applicationタブ->Resources->チェックボックスアイコンとマニフェスト、「デフォルト設定でマニフェストを埋め込む」の設定が問題の原因でした。 「マニフェストなしでアプリケーションを作成」に設定すると、問題が修正されます。
別のプロジェクトへの参照を追加したときに同じ問題が発生しました。
これを解決する方法は、Ianが説明したように、すべての参照プロジェクトでClickOnceセキュリティ設定を有効にすることでした here (強調強調):
私にとって、これが解決された方法は、「Security Tab」を「プロジェクトのプロパティ "には、オプション"ClickOnceセキュリティ設定を有効にする "があり、オプション"これは完全信頼アプリケーションです "選択済み。これは、マニフェストを正しく作成することに関係しており、これらのオプションがソリューション内のそれを必要とするすべてのプロジェクトに設定されていない場合、アプリケーションはインストールされません。
これは、同じソリューションの下で別のプロジェクトへの参照を作成するときに修正する適切な方法だと思います。
リンクされたフォーラムの投稿は今では期限が切れていますが、アーカイブで利用可能です here 。
私は同じ問題に直面していましたが、私の解決策は非常に異なっていました。
ClickOnceアプリケーションはソリューション内の別のEXEファイルプロジェクトを参照していたため、クライアントがそれをダウンロードしたときに別のEXEファイルがあった場合、そのプロジェクトにはマニフェストがありませんでした。
別の実行可能ファイルへの依存関係を削除すると、問題が解決しました。
この問題はVisual Studio 2010にも存在することを確認しました。[プロジェクトのプロパティ]-[アプリケーション]-[リソース]で[マニフェストなしでアプリケーションを作成]を選択すると、問題が解決しました。
これは、プロジェクトの異なるDLLファイルで参照される NuGet パッケージの2つの異なるバージョンがある場合にも発生する可能性があります。私の場合は、Catelというフレームワークを使用していました。そして、あるバージョンで参照されている新しいバージョンがありましたDLL=別のファイル(監視)よりも、これによりClickOnceがこのエラーを吐き出しました。同じバージョンを参照することで問題は解決しました。
私は同じ問題を抱えていましたが、私の解決策は「プラットフォームターゲット」を「x86」に変更することでした(プロジェクトプロパティ->ビルドタブ)。 Any CPUに設定されました。設定を変更して再公開するとすぐに、ClickOnceインストーラーを完了できました。
私はまったく同じ問題を抱えていました。メインプロジェクトに必要な依存関係を削除できませんでした。 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");
}
}
}
.exeを呼び出す.exeを呼び出す.exeを呼び出すClickOnce .exeも解決しました。
Visual Studio 2010でVB.NETを使用して、この問題も発生しました。
2番目のWindows Formsアプリケーションを参照するClickOnce Windows Formsアプリケーションがあり、3番目のWindows Formsアプリケーションを順番に参照しています。 (これらの2番目と3番目のアプリケーションは [〜#〜] exe [〜#〜] DLL file)ではなく、同じように実行される可能性が高いファイルです。スタンドアロンまたはプロパティが渡されて呼び出されます。)
私は2番目と3番目のアプリケーションのマニフェストコンテンツの両方をコメントアウトする必要がありました。
ウォークスルー:ClickOnceアプリケーションの手動展開
完璧に機能します。
私は同じ問題を抱えていたので、以前に提案した解決策をすべてここで試しましたが、すべてうまくいきませんでした。
更新場所を変更して修正しました。プロジェクトのプロパティから-> 公開-> 更新。更新場所を公開フォルダーに変更します。
Windows 7でVisual Studio 2012を使用していますが、2つのプロジェクトで構成されるソリューションを公開する必要があります。
Eduardoが指摘したように、両方のプロジェクトをClickOnceとしてマークし、Full Trust Applicationを有効にすると問題が解決します。
私は解決することができた少し異なる問題があったので、投稿したいと思いました。私の問題は、TFSから3つのブランチを実行していたことです。ブランチの1つでTelerikコントロールをアップグレードしましたが、他のブランチではアップグレードしていません。 3つのブランチすべてでTelerikコントロールをアップグレードして再公開すると、機能し、このエラーはなくなりました。
VS2015を実行していました。
私のバージョンのVisual Studio 2017、バージョン15.6.6(ただし、以前に存在していた可能性があります)では、アプリケーションファイルは右クリックエグゼプロジェクトと公開ではなく、プロジェクトプロパティの下にある「公開」タブを設定できますインストールするアプリケーションファイルの一覧。
だから問題のあるものを取り出してください。このアプリがインストールされるコンピューターに何かが既にインストールされている場合、実行するための参照が必要な場合を除き、とにかく再インストールを試みる理由はありません。すでにPCにあったものを別のフォルダにインストールする場合、動作しない可能性があります。他のアプリケーションまたはdllアセンブリは、以前にインストールした場所と同じ場所で使用するのが最適です。
別のメインプログラムを参照するメインプログラムがある場合、メインプログラムのプログラムで「マニフェストなしでアプリケーションを作成」トリックを実行する必要があります。
プロジェクト->プロパティ->アプリケーションタブ->リソース->マニフェスト->ドロップダウン「マニフェストなしでアプリケーションを作成」
参照されているプログラムのプロジェクトプロパティに切り替えて、プロセスを繰り返します。
それは面白いです。アプリケーションを再デプロイするだけで、問題は解決しました。ネットワークによるファイル破損の可能性があります。
mage.exe
を使用してマニフェストを生成します。これを.csproj
に追加すると、問題が修正されました。 -nowin32manifest
コンパイラフラグ も試してください。私はそれをテストしていません。 Visual Studio 2017にstuartdの「マニフェストなしでアプリケーションを作成」が表示されません。私はこれが何をするかだと思います。
<PropertyGroup>
<NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>
.csproj
にもこれがあります:
<GenerateManifests>false</GenerateManifests>
数分前に同じ問題が発生しましたが、以下に解決に使用した手順を示します。
キー
チェックリスト
プロパティに移動->アプリケーション->リソース->アイコンとマニフェストをチェック(aとbの両方)
プロパティに移動->ビルド:aとbが同じターゲットプラットフォーム上にあることを確認します
[プロパティ]-> [セキュリティ]に移動し、aおよびbで[ClickOnceセキュリティ設定を有効にする]および[これは完全信頼アプリケーションです]の設定がオンになっていることを確認します
プロパティに移動->公開:公開フォルダーのパスを変更することをお勧めします