2011-02-02 6 views
2

SharePoint dllファイルを使用するクイックコンソールアプリケーションを作成しました。もし私がdllファイルを持っていないマシンでそれを実行しようとすると、アプリケーションはすぐに開かれるとクラッシュします。回避方法:アプリケーションに依存しないexeが存在することをユーザーに通知しますか?

私は確かに初心者ですが、ハードクラッシュする前に間違ったマシンでアプリケーションを使用していることをアプリケーションに伝える方法があれば、私は好きです。問題のアプリケーションの前に実行される、依存関係をスキャンするために2番目のアプリケーションを作成する以外に、これを行う方法はありますか?アプリケーションが正しいコンピュータ上にあることをチェックするまで、依存関係を必要とするコードをインスタンス化しないでください。アプリケーションが開いてもすぐに失敗しますか?確かに誰かがこのような状況の回避策を見つけました。

答えて

1

+0

これは完璧に機能しました、ありがとうございます! – ep1033

+0

@ ep1033私の答えを正しいものとしてチェックしてください(大きな緑色のチェックマーク)! :) – dexter

2

残念ながら、ランチャーアプリケーションを作成する必要があります。これについて考えるなら、必要なDLLがメインアプリケーションが起動するためにそこにいる必要があります。メインアプリケーションにスキャンを埋め込むと、DLLが見つからないためスキャンが開始されません。

必要なDLLをスキャンして動的にロードするプラグインアーキテクチャを使用することができます(MEFが気になります)。

try { 
     Assembly.Load(..); 
} 
catch(TypeLoadException ex) { 

     //Let the user know which type from what dll was not loaded. 
} 

あなたが実際にかかわらず、それを行うために、実行時にそのDLLをロードする必要があります:にそのDLLの荷を包装についてどのように

+0

したがって、exeを起動する2番目のアプリケーションを作成するときに、この2つのアプリケーションをまとめてバンドルする方法があるので、ユーザーは1つのアイテムのみをコピーして貼り付ける必要がありますか?または、2つのexeファイルを作成して、ユーザーが同じディレクトリにコピーするように指示する必要があります。 – ep1033

+0

@ ep1033 - exeには1つのエントリポイントしかないため、静的にリンクされたDLLを使用する場合は別々の実行可能ファイルにする必要があります。両方をバンドルするアプリケーション用の設定をいつでも作成できます。 – Oded

+0

をバンドルすると、ILMergeのようなものがありますか? – ep1033

0

アセンブリをsharepointの出力ディレクトリにコピーすることができます。したがって、参照はローカルで行われます。

0

アプリケーションがSharePoint dllまたはアセンブリを直接参照する場合、静的にリンクされた必要なアセンブリがない場合、.NET CLRはコードを実行しないため、ユーザーに通知する方法はありません。

SharePointアセンブリとタイプの動的ロードのいずれかを使用することができます。起動時にアプリケーションでそのアセンブリを実行する必要はありません。また、チェックを行うアプリケーションのランチャーを作成します。 OKをクリックするとアプリケーションが起動し、そうでなければユーザーに通知されます。

関連する問題