2

まず、Visual Studio 2010、Measurement Studio 2010プラグイン、C#、および.NET4.0を使用しています。

私のアプリケーションはUSBデバイスからデータを受信し、WaveformPlot()[MeasurementStudioの一部]を使用してデータをグラフ化します。binデバッグモードとリリースモードでアプリケーションを正常に実行でき、開発用コンピューターのフォルダー内のEXEファイルを使用して直接正常に実行することもできます。

ただし、別のコンピューターで実行することはできません。ClickOnceを使用してインストールファイルとフォルダーを作成し、発行フォルダーを開発用コンピューターからクライアントコンピューターにコピーします。次に、インストールファイルを実行し、ClickOnceが.NETをダウンロードして(まだインストールされていない場合)、アプリケーションを開きます。アプリケーションは、利用可能な多くのCOMポートからCOMポートを選択するように求める最初のダイアログを表示します。これを行うと、コードが実行され、InitializeComponent()その後、メインフォームが表示されます。

最初のボックスの後でメインフォームが開きません。ステートメントを使用Debug.WriteLineして、私はそれをに絞り込むことができました

this.waveformPlot = new NationalInstruments.UI.WaveformPlot();

ここでクラッシュします。エラーメッセージなどは表示されません。他のコンピューターではなく、開発用コンピューターで正常に動作します。National Instruments DLLファイルを含めましたが、他のNationalInstrumentsコンポーネントは正常に初期化されています。そうでないのはこれだけです。アプリケーションはWindowsタスクマネージャーにしばらく表示され、10秒ほどで消えます。

私は何をすべきか?

アップデート1

Application.runStack Overflowに関する別の無関係な質問を読んだ後、とform1 mainform = new form1()をtry-catchブロックに入れることができることに気付きました。

System.TypeInitializationException:「NationalInstruments.UI.Internal.WaveformPlotElement」の型初期化子がスローして例外をスローしました。-> System.IO.FileNotFoundException:ファイルまたはアセンブリ'NationalInstruments.Common.Native.dll'またはその依存関係の1つを読み込めませんでした。指定されたモジュールが見つかりませんでした。

少なくとも今は例外だとわかっているので、それに取り組み、不足しているDLLとその理由を特定し、この質問を更新します。

アップデート2

公開フォルダにあるアプリケーションファイルを確認しましたが、「NationalInstruments.Common.Native.dll」が含まれています。なぜロードできないのかわかりません。

アップデート3

クライアントコンピューターでNationalInstruments.Common.Native.dllFusionLogViewerを実行したところ、が正常に読み込まれたことがわかりました。それでも、デバッグ例外メッセージはOPに示されているように表示されます。

ファイルまたはアセンブリ'NationalInstruments.Common.Native.dll'またはその依存関係の1つを読み込めませんでした

Fuslogvw.exeが示すもののスクリーンショット


Fuslog Viewerは、すべてのアセンブリが正常にロードされたことを示しています。クライアントコンピュータをチェックしました。ただし、National Instruments DLLファイルには、「GACルックアップが失敗しました」という行がありますが、他のアセンブリにはありません。

DebugViewerは、を使用して印刷した例外を表示しますDebug.writeLine。これは、NationalInstruments.Common.Native.dllまたはその依存関係の1つをロードできなかったことを示しています。

私は非常に混乱しています。


プロジェクトへの参照を追加しようとしました。逆コンパイラーを使用して参照を確認し、他のインストールプログラム(ClickOnce以外)を使用しましたが、どれも私をどこにも連れて行ってくれないようです。:(


アップデート4

昨日、アプリケーションが64ビットシステムに正常にインストールされ、実行されていることがわかりました。以前に試した2台のコンピューターは、32ビットのWindows7システムでした。私はそれがどういうわけか私を助けることができるかどうかを見たいと思っています。アプリケーションは、64ビットのWindows7開発ラップトップでコンパイルされました。プロジェクトプロパティの下の「ビルド」の「プラットフォーム」ドロップダウンメニューに「アクティブ(x86)」と表示され、プラットフォームターゲットとして「任意のCPU」があります。

4

6 に答える 6

4

この問題に多くの時間を費やした後、私はNational Instrumentsの誰かと話をしました、そして彼は私が抱えていた問題を解決するのを手伝ってくれました。のモジュール依存関係をチェックすることで、ファイルを探してmstudiocommon.2010.msmいることに以前気づきましたが、インストーラーは(インストーラープロジェクトの「検出された依存関係」で)を検出(および追加)しました。インストーラープロジェクトを右クリックしてVS100.msmファイルを手動で追加すると、私が抱えていた問題が修正されました。mstudiocommon.2010.msmvs100_crt_x86.msmvs90_crt_x86.msm

以下は、モジュールmstudiocommonmstudiouiマージモジュール で確認できるモジュールの依存関係のスクリーンショットです。<code> mstudiocommon</code>および<code>mstudioui</code>マージモジュールで確認できるモジュールの依存関係のスクリーンショット。

Visual StudioがVS100ではなくVS90を検出した理由はよくわかりませんでしたが、最終的にこの問題を修正できたことを嬉しく思います。これは別の日に残しておきます。

于 2011-11-11T17:29:15.260 に答える
2

SDKのFusionLogViewerを試して、問題の原因となっているライブラリを特定してください。

于 2011-10-31T21:11:51.517 に答える
0

ログとエラーメッセージがないと、何が問題なのかを見つけるのは非常に困難です。try catchライブラリコンポーネントにアクセスしwaveformPlot てエラーメッセージとスタックトレースを出力しようとするコードにを挿入する必要があります。あなたが欠けているものを見ることができた後。

于 2011-10-31T15:18:21.900 に答える
0

ReflectorまたはJustDecompileのいずれかを使用して、「NationalInstruments.Common.Native.dll」が必要とする参照を取得できます。それの音から、DLLの名前にNativeという単語が含まれているので、他のネイティブWin32Cdllのラッパーである可能性があります。同じフォルダにそれらがありますか?また、登録されていない可能性のあるCOM dllのラッパーである可能性がありますか?

于 2011-11-04T14:01:14.297 に答える
0

誰かが最新のNIコンポーネントのサブセットのみを使用しているターゲットシステムにアプリケーションをインストールしたことが起こっていると思います。この問題を修正するために、app.configにbindingRedirectを追加しました。機能した。

<?xml version="1.0"?>
<configuration>
 <startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
 </startup>
 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <dependentAssembly>
    <assemblyIdentity name="NationalInstruments.Common" publicKeyToken="DC6AD606294FC298" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-13.0.40.190" newVersion="9.1.40.159"/>
   </dependentAssembly>
   <dependentAssembly>
    <assemblyIdentity name="NationalInstruments.Common.Native" publicKeyToken="DC6AD606294FC298" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-13.0.40.190" newVersion="9.1.40.159"/>
   </dependentAssembly>
  </assemblyBinding>
 </runtime>
</configuration>
于 2015-02-03T20:12:26.513 に答える
0

私も同じ問題を抱えていました。プロジェクトに大量の参照がある場合、実際にどのアセンブリが欠落しているかを見つけるのは非常に困難です。特に、VisualStudioのないクライアントコンピューターでこの問題が発生している場合。

fuslogvw.exeを1〜2時間いじって明確な答えを得ることができなかった後、私は「不足しているアセンブリ.netアプリケーションを検出する」とグーグルで検索し、http://www.amberfish.net/を見つけました

それは魅力のように機能し、無料トライアルがあり、開発者はそれに対して非常に民主的な価格を要求するだけです...非常にクールです!!

PS。私はアンバーフィッシュとは一切関係がありません。今日、このツールについて知ったのは初めてです。この人が作成したツールは、Windowsのデフォルトのツールキットに含まれている必要があります。ちょうど私が必要なもの。

于 2015-08-30T11:00:13.623 に答える