2

大約一個月前,我有一個非常大的項目,從Visual Studio 2012遷移到2015。爲什麼Visual Studio 2015失敗,出現錯誤代碼BC30506

該代碼是健全的。它編譯了99.9999%的時間,除了最近兩天我有這種隨機事件。

我正在使用混淆器(Eazfuscator支付版本)來構建解決方案。

在過去的兩天裏,我能夠工作,一切都一遍又一遍地編譯,工作得很好,但是當我以混淆模式編譯項目SOMETIMES時,編譯器失敗並填充錯誤列表用下面的:

嚴重性代碼描述項目文件中的行 錯誤
BC30506 Handles子句需要在包含類型或它的基類型之一定義的WithEvents變量。 wRMS D:_Private \ wRMS \ wRMS_Miscellaneous Forms \ Main Application \ frmHome.vb 719 錯誤
BC30506句柄子句需要在包含類型或其基類型中定義的WithEvents變量。 wRMS D:_Private \ wRMS \ wRMS_Miscellaneous Forms \ Main Application \ frmUpdate.vb 5 錯誤
BC30506句柄子句需要在包含類型或其基類型中定義的WithEvents變量。 wRMS D:_Private \ wRMS \ wRMS_Miscellaneous Forms \ Main Application \ frmUpdate.vb 9 錯誤
BC30506句柄子句需要在包含類型或其基類型中定義的WithEvents變量。 wRMS D:_Private \ wRMS \ wRMS_Miscellaneous Forms \ Main Application \ frmUpdate.vb 13 錯誤
BC30506句柄子句需要在包含類型或其基類型中定義的WithEvents變量。 wRMS D:_Private \ wRMS \ wRMS_Miscellaneous Forms \ Main Application \ frmUpdate.vb 17 錯誤
BC30506句柄子句需要在包含類型或其基類型中定義的WithEvents變量。 wRMS D:_Private \ wRMS \ wRMS_Miscellaneous Forms \ Main Application \ frmUpdate.vb 38 錯誤
BC30506句柄子句需要在包含類型或其基類型中定義的WithEvents變量。 WRMS d:_Private \ WRMS \ wRMS_Miscellaneous從生成菜單窗體\主應用程序\ frmUpdate.vb 42 大段引用

點擊清理不會改變任何東西。

我有很多自定義控件(按鈕,複選框,列表等),我已經創建和使用的窗體上。 Eazfuscator在編譯過程中混淆了這些控件的名稱,這使得表單在設計器中不再可見(這一直是一個症狀);但是現在,如果我看到上述錯誤,IDE將不會讓我重新構建解決方案,並且我甚至無法重建它,而無法模糊處理。我只是卡住了。

不幸的是,當這種情況發生時,該項目不會再次編譯,我必須從後備基本恢復項目並失去我的工作。

這是什麼造成的?我能做什麼?我能否以某種方式清除解決方案,以便IDE直接從源代碼重建,而不是根本查看混淆的輸出?

+0

如果你不與混淆所有的罰款,對編譯? – rene

+0

Comment.Useless =真 – Matth3w

+0

不,我現在不能編譯可言,即使沒有混淆。 – Matth3w

回答

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" 

似乎已永久解決了我的問題。

微軟已經通知,以及EAZfuscator

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

UPDATE 2017年: 回到這裏兩年後,值得注意的是,你需要注意你的IDE。如果最後建立在Release模式(明明組件混淆),直到你在調試模式下重建先不要打開任何形式。調試模式將裝配狀態重置爲是非模糊的,你可以查看你的表格沒有問題。

如果不小心打開混淆的發行模式下的形式和它打破上顯示,只需關閉每一個窗口出來在IDE中,留下IDE中打開,並在調試模式下重建。現在你可以繼續沒有問題。

相關問題