2017-05-03 13 views
2

私はローカルのSQLiteとEntity Frameworkコアで動作するWPFアプリケーションを持っています。私はClickOnceを使って自分のアプリを配布したい。WPF ClickOnceの参照がありません

Visual Studio 2017を使用して実行するとすべてうまく動作しますが、ClickOnceを使用したときにアプリが起動時にクラッシュしました。クラッシュはとても早かったので、例外を記録することさえできませんでした。しばらくすると、私はいくつかのDLLが公開されていないことが分かった。たとえば、System.Runtimeです。すべての参照はNuGetパッケージです。それから、私のプロジェクトClickOnceアプリケーションファイルリストのdllへの参照が含まれているにもかかわらず、それが見つかりました。

私が今見つけた唯一の解決策は、プロジェクトのルートにファイルとして欠落したdllを追加し、ビルドアクションをコンテンツに設定することです。 ClickOnceアプリケーションファイルのダイアログで、私はパブリッシュステータスをIncludeに設定しました。

これはうまくいきますが、それを行う最良の方法ではないようです。問題は、なぜ彼らが最初に逃したのかということです。私は何かを逃した可能性が高い、または私は問題の根本を理解していない。

UPD:

あなたがサンプルコードhereを見つけることができます。

Visual Studioからは動作しますが、ClickOnceアプリケーションとしてインストールすると、起動時にクラッシュします。

+0

@Pikohを再発行:「私は私のプロジェクトのClickOnceアプリケーションファイルリスト内のDLLへの参照を持っているのにもかかわらず、しない、それを含む」 –

+0

@Pikoh私は持っていませんでしたそれをプロジェクトの共通ファイルとして追加する前に、リスト内のすべてのファイルを削除する必要があります。 –

+0

「ローカルコピー」という参照をtrueに設定していますか? – Pikoh

答えて

2

を解決する方法が2つあります。あなたが性質を行かなければならない最初の

>はあなたのdllのは、プロジェクト内の this Place

を含むが、それは動作しない場合は、DLL CopyLocalをrefrenceして作るために行かせる>アプリケーションファイルと、この場所での公開します= Falseの、あなたのプロジェクトに存在するアイテムのようなDLL を追加し、それらにコピーを作成し、常に

あなたがそれら

のためにこれを行う必要がある4 DLLを持って

enter image description here

それが正しく

に動作しますが、あなたのサンプルのために、私はこれを見て、私は 表情このイメージでそれを解決しました

System.Diagnostics.Tracing.dll 
System.Reflection.dll 
System.Runtime.dll 
System.Runtime.Extensions.dll 

最初にあなたのレフェレンスに行って、コピーローカル偽

enter image description here

薄い行く各DLLのパスへと存在するアイテムのようにそれらを追加し、出力するために、すべてのそれらのF コピーを作るDirectoey CopyAlways

enter image description here

それと実行を公開それはこの写真のように私はそれを実行する公開ファイルとその仕事から

+0

私が質問したところでは、プロパティ>公開>アプリケーションにはライブラリがありません。 2番目の解決策は機能しますが、それは質問に記載されています。 –

+0

あなたは私のチームビューアを私に渡すことはできますか?あなたのシステムはリモートであり、あなたのシステム上でコードとシステムが見えますか? –

+0

あなたの興味と時間をありがとう!質問では、[githab](https://github.com/ichepikov/ClickOnceTest/tree/missing-dlls)へのリンクが追加されていますか?例を確認できますか?それともあなたの環境で動作しますか? –

0

ローカルにコピーするようにdllを設定しても、実際にコードでdllを使用しない限り、dllはコピーされません。このようなコードでSystem.Runtimeを追加しようとするかもしれませんか?

 var dummytest = System.Runtime.GCSettings.IsServerGC; 
+0

私のコードはライブラリへの直接参照を持っていませんが、私のコードで使用している他のライブラリで使用されているため追加する必要があります。 –

0

号9号に基づいてMicrosoft.BclまたはMicrosoft.Bcl.Asyncパッケージを参照の.NET Framework 4.0をターゲット

ClickOnceアプリケーションがインストールされた後TypeLoadExceptionまたはその他のエラーが発生することがあり

症状:3210私は、次の操作を行うことができました。

解決方法

これは、ClickOnceが特定の必要なアセンブリを展開できないために発生します。

  1. プロジェクトを右クリックし、フォルダSystem.Runtimeに既存の項目に
  2. 参照の追加]を選択します:回避策として、次の手順を実行します。ファイルのパスにファイル名テキストボックスペーストで
  3. に住んでいる dllが
  4. を保持し、ソリューションエクスプローラでリンク
  5. として追加[追加]ボタンの横にある下矢印をクリックしてを選択しますCTRLは、選択範囲を右クリックし、[プロパティを選択して出力ディレクトリコピーを変更System.Runtime.dll
  6. を選択私が言ったようにコピー常に
関連する問題