2

約 1 か月前に Visual Studio 2012 から 2015 に移行した非常に大きなプロジェクトがあります。

コードは健全です。このランダムな発生があった最後の 2 日間を除いて、99.9999% の確率でコンパイルされます。

難読化ツール (Eazfuscator 有料版) を使用してソリューションを構築しています。

過去 2 日間、私は仕事をすることができました。すべてが何度も何度もコンパイルされ、問題なく動作しましたが、難読化モードでプロジェクトをコンパイルしようとすると、コンパイラが失敗し、エラー リストに次の情報が表示されます。

重大度コード 説明 プロジェクト ファイルの行エラー
BC30506 Handles 句には、含まれる型またはその基本型の 1 つで定義された WithEvents 変数が必要です。wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmHome.vb 719 エラー
BC30506 Handles 句には、含まれる型またはその基本型の 1 つで定義された WithEvents 変数が必要です。wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 5 エラー
BC30506 Handles 句には、含まれる型またはその基本型のいずれかで定義された WithEvents 変数が必要です。wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 9 エラー
BC30506 Handles 句には、含まれる型またはその基本型の 1 つで定義された WithEvents 変数が必要です。wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 13 エラー
BC30506 Handles 句には、含まれる型またはその基本型の 1 つで定義された WithEvents 変数が必要です。wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 17 エラー
BC30506 Handles 句には、含まれる型またはその基本型のいずれかで定義された WithEvents 変数が必要です。wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 38 エラー
BC30506 Handles 句には、含まれる型またはその基本型の 1 つで定義された WithEvents 変数が必要です。wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 42 Blockquote

[ビルド] メニューから [クリーン] をクリックしても何も変わりません。

フォームで作成して使用した多数のカスタム コントロール (ボタン、チェックボックス、リストなど) があります。Eazfuscator は、コンパイル中にこれらのコントロールの名前を難読化します。これにより、デザイナーでフォームを表示できなくなります (これは常に症状でした)。しかし、上記のエラーが表示された場合、難読化されたソリューションを IDE で再構築することはできず、難読化されていないソリューションを再構築することさえできません。私は立ち往生しています。

残念ながら、これが発生すると、プロジェクトは二度とコンパイルされなくなります。基本的に、プロジェクトをバックアップから復元し、作業を失う必要があります。

これは何が原因ですか?私に何ができる?IDEがソースから直接再構築し、難読化された出力をまったく見ないように、どうにかしてソリューションをクリアできますか?

4

1 に答える 1

1

問題は VS2015 にあります。デバッグ モードでアセンブリを難読化することはできません。ユーザー コントロールのオブジェクト名が意味不明に変更されているため、IDE が「フリークアウト」します。コントロールが削除され、何らかの理由でその周りの標準の WinForms コントロールも削除されます。

解決策は、ビルド後のイベントを次のように編集して (難読化ツールによって異なります)、リリース モードのときにのみ難読化ツールを難読化できるようにすることです。

if /I "$(ConfigurationName)" == "Release" Eazfuscator.NET.exe "$(TargetPath)" --msbuild-project-path "$(ProjectPath)" --msbuild-project-configuration "$(ConfigurationName)" --msbuild-project-platform "$(PlatformName)" --msbuild-solution-path "$(SolutionPath)" -n --newline-flush -v 5.1

残念ながら、この問題に遭遇した場合は、ソース コードが破損しており、バックアップから復元する必要があります。

いくつかの DevOps と定期的なバックアップを用意します。ステートメントを永続的に指定するため:

if /I "$(ConfigurationName)" == "Release" 

私の問題を永久に修正したようです。

Microsoft と EAZfuscator に通知済み

https://connect.microsoft.com/VisualStudio/feedback/details/1833336/obfuscated-assembly-in-debug-mode-causes-ide-to-delete-winforms-controls

UPDATE 2017: 2 年後にここに戻ってくると、IDE に注意を払う必要があることに注意してください。最後にリリース モードでビルドした場合 (そして明らかにアセンブリが難読化されていた場合) は、最初にデバッグ モードで再ビルドするまで、フォームを開かないでください。デバッグ モードでは、アセンブリの状態が難読化されていない状態にリセットされ、問題なくフォームを表示できます。

誤って難読化されたリリース モードでフォームを開いて表示が崩れた場合は、IDE 内のすべてのウィンドウを閉じて、IDE を開いたままにし、デバッグ モードで再構築します。これで問題なく続行できます。

于 2015-09-25T09:42:47.033 に答える