簡體   English   中英

預處理程序指令是否可以保護客戶端的服務器代碼?

[英]Do pre-processor directives protect server code from the client?

我正在開發客戶端服務器庫。 某些類可由客戶端或服務器使用,但執行方式不同,並且每個類產生的結果略有不同。 同樣,服務器代碼可能包含其他方法,這些方法不會從客戶端版本中調用。

一個類可能看起來像這樣:

public class StuffDoer {

    public void DoStuff(object msg)
    {
        ServerDoStuff(msg);
        ClientDoStuff(msg);
    }

    [Conditional("SERVER")]
    private void ServerDoStuff(object msg) 
    {
        // Do secret server stuff...
    }

    [Conditional("CLIENT")]
    private void ClientDoStuff(object msg)
    {
        // Do client sutff...
    }

    [Conditional("SERVER")]
    public void DoCoolStuff(object msg)
    {
        // server does cool stuff...
    }

}

我已經讀到,Conditional屬性仍然可以編譯代碼,因此可以在構建中使用,這與預處理器指令不同,后者可以完全刪除代碼,甚至不編譯代碼。

我擔心不誠實的客戶端可能會通過混淆源代碼並弄清楚服務器的工作方式來入侵產品。

我的擔心是沒有根據的,還是需要放置預處理程序指令才能隱藏源代碼?

根據文檔

將ConditionalAttribute應用於方法會向編譯器指示,除非定義了與ConditionalAttribute相關的條件編譯符號,否則不應將對方法的調用編譯為Microsoft中間語言(MSIL)。

當您使用定義的CLIENT進行編譯時,在最終程序集中將不會包含用於調用標記為SERVER的方法的代碼。 但是將顯示該方法的代碼。 您無法以這種方式實現所需的功能。

如果未定義“ SERVER”,則標記為“ SERVER”的方法將始終編譯為最終程序集,但對該方法的所有調用將被刪除。

這是代碼

這是反編譯結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM