C#アプリケーションを作成し、テストボックスにインストールしました。私のアプリは開発ボックスで完璧に動作しますが、別のマシンにインストールすると、Main()でクラッシュします。 EventType:CLR20r3を取得します
こちらがイベントメッセージです
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: logfileviewer.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 4f356c9c
Problem Signature 04: LogFileViewer
Problem Signature 05: 1.0.0.0
Problem Signature 06: 4f356c9c
Problem Signature 07: 94
Problem Signature 08: 44
Problem Signature 09: System.IO.FileNotFoundException
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
詳細を使用して、IL逆アセンブラーでエラーコードを調べ、次のようにカムバックしました...
Method #5 (06000094)
-------------------------------------------------------
MethodName: .ctor (06000094)
Flags : [Public] [HideBySig] [ReuseSlot] [SpecialName] [RTSpecialName] [.ctor] (00001886)
RVA : 0x000081d0
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
.NET 4.0はアンインストールされ、システムに再インストールされたため、何も変更されていません。私はネット上で検索しましたが、同じ問題を抱えている人は誰も解決策がないようです。私はこの問題に1日半を費やしました。私はアプリケーションを起動できないために私の締め切りを逃したくない。
これは私のMain()の唯一のコードです
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
イベントビューアーの詳細を以下に示します。
Application: LogFileViewer.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack:
at LogFileViewer.frmMain.InitializeComponent()
at LogFileViewer.frmMain..ctor()
at LogFileViewer.Program.Main()
EventData
Application: LogFileViewer.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack: at LogFileViewer.frmMain.InitializeComponent() at LogFileViewer.frmMain..ctor() at LogFileViewer.Program.Main()
デザイナーがFileNotFound例外をどのように持つことができるかはわかりません。私はDotNetBar.dllを使用しており、インストールディレクトリから参照しているので、それで十分でしょう。必要に応じてデザイナーを投稿することもできますが、かなりの量があります。
私のアプリケーションが、展開マシンに存在しない参照アセンブリに依存しているときに、同じ問題が発生しました。 「インストールディレクトリからDotNetBarを参照する」ことの意味がわかりません-プロジェクトで CopyLocal = true に設定されているか、開発と開発の両方で同じフルパスに存在することを確認してください生産機械。
以前にXPマシンで保守されていたWindows 7ボックスでアプリケーションをビルドしたときに、同じ問題が発生しました。
デバッグ用にビルドした場合、プログラムは正常に動作しましたが、リリース用にビルドした場合、このエラーで失敗しました。プロジェクトのプロパティページで答えを見つけました。 [ビルド]タブに移動し、プラットフォームターゲットを[任意のCPU]から[x86]に変更してみます。
.NETには2つのCLR 2.0および4.0があります。 CLR 2.0は、.NET framework 3.5まで動作します。 CLR 4.0は.NET 4.0以降で動作します。ソリューションが参照アセンブリとは異なるCLRを使用している可能性があります。ローカル開発環境では、両方のCLRが存在する可能性があるため、問題は発生していません。ただし、展開環境に移動した場合、単一のCLRのみが存在する可能性があり、このエラーが発生しました。
午前中ずっと戦い続けてきましたが、今では解決し、なぜ起こったのでしょうか。他の人に役立つことを願って投稿する
Visual Studioツールボックスにツールを自動的に追加するKrypton.Toolkitをインストールしました。次に、ツールをデザイナーに追加し、自動的にDLLをプロジェクト参照に追加しましたが、ツールキットはCopyLocal = falseとしてマークされていました
リリースビルドフォルダー内のすべてのdllを使用してインストーラーをビルドしました(もちろん、上記のdllはありませんでした)。
Copylocal = trueを設定してからインストーラーを再構築すると、すべてが正常に機能しました。