2017-02-13 123 views
0

我使用DotfuscatorCLI和Visual Studio 2015 Update 3 Post Build事件命令混淆了一個.Net DLL。它似乎成功地被混淆了,因爲在該命令後沒有出現錯誤。引用混淆DLL

下面是一個命令:

dotfuscatorcli.exe/Q /P = SourceDirectory = 「$(TARGETDIR)\」 的SourceFile = $(TargetFileNa我) 「$(PROJECTDIR)Dotfuscator的。 XML」

這裏是Obfuscator.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v1.1.dtd"> 
<dotfuscator version="1.1"> 
    <propertylist> 
     <property name="SourceDirectory" value="This Path Will Be Replaced By Visual Studio" /> 
     <property name="SourceFile" value="This Filename Will Be Replaced By Visual Studio" /> 
    </propertylist> 
    <trigger> 
     <filelist> 
     <file dir="${SourceDirectory}\" name="${SourceFile}" /> 
     </filelist> 
    </trigger> 
    <output> 
     <file dir="${SourceDirectory}\Dotfuscator\" /> 
    </output> 
</dotfuscator> 

現在,當我引用的DLL在另一個項目,並嘗試訪問其公衆成員;我無法再訪問它們。就好像它們沒有在該DLL中定義/公開,並且它們在智能感知中也不可用。

如果我在對象瀏覽器中查看該DLL,它將顯示具有一些奇怪名稱的類,例如h,我,米,n等

我在這裏失蹤的東西,爲了消耗該DLL?

任何迴應,暗示或解決方案將不勝感激。

+3

公共類型和成員不應該被混淆。通常一個混淆器知道......你在用什麼? –

+0

另外,不要只是鏈接到另一篇文章,並讓我們去那裏弄清楚....鏈接是好的,但也提供實質性的細節*在這裏*在你的問題身上。 –

+0

我更新了問題並編寫了我正在使用的命令。請告訴我是否需要其他信息。 –

回答

0

在@Nathan的幫助下,我可以解決我遇到的問題。以下是來自更新的Obfuscator.xml文件的內容。

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
    <!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v2.3.dtd"> 
    <dotfuscator version="2.3"> 
     <propertylist> 
      <property name="SourceDirectory" value="This Path Will Be Replaced By Visual Studio" /> 
      <property name="SourceFile" value="This Filename Will Be Replaced By Visual Studio" /> 
     </propertylist> 
     <input> 
     <asmlist> 
      <inputassembly> 
      <option>library</option> 
      <file dir="${SourceDirectory}\" name="${SourceFile}" /> 
      </inputassembly> 
     </asmlist> 
     </input> 
     <output> 
      <file dir="${SourceDirectory}\Dotfuscator\" /> 
     </output> 
    </dotfuscator> 

我知道如果我使用dotfuscator UI,它會自動啓用庫模式,但我會故意選擇CLI方法。我想自動化併爲我在一個項目中引用的35多個DLL提供通用解決方案。 所以現在用這種方法,我希望這不僅能夠讓我的混淆處理自動化,而且還可以加快處理速度,因爲這是一種後期構建事件命令方法。簡而言之,我需要做的就是按建立解決方案按鈕,然後完成。

希望這會幫助別人。如有任何含糊或疑慮,或者您有任何其他建議,請告知我。

0

這聽起來像你可能已經禁用Library Mode該組件。嘗試重新啓用它,這將告訴Dotfuscator自動從重命名中排除公共類型和成員。

+0

謝謝@Nathan。我更新了我的問題,並且您可以看到該XML文件。我沒有明確禁用任何模式。 –

+1

@AzazulHaq,問題是在配置文件級別,你必須*啓用*庫模式。如果您使用UI生成配置文件,則默認情況下會啓用它。該博客文章中的配置文件沒有提供,所以這是混淆的根源。如果您想了解如何通過手動編輯XML來啓用它,請參閱[用戶指南中的相關部分](https://www.preemptive.com/images/stories/Dotfuscator/webframe.html# Library_Mode_By_Assembly.html)。 –