2017-06-14 59 views
7

我有一個功能,我只想發生在調試,但不想運送該功能需要的DLL。這可能嗎?C#在#if中使用語句調試但不是裝運

我:

當然
#if DEBUG 
using MyAssembly; 
#endif 

中MyAssembly程序是由該項目引用。我希望MyAssembly.dll不能在發佈模式下發貨。這可以實現嗎?將在這方面使用條件(「DEBUG」)的幫助?

+2

'使用'指令不會在程序集方面做任何事情 - 它們只是關於名稱空間。您可能希望在項目文件中使程序集引用有條件...儘管如果沒有任何代碼*引用*以在發佈模式下的程序集代碼,那麼C#編譯器將不會使用該引用,至於I'意識到。 (你應該檢查一下 - 不管怎樣,我都會調整參考值來驗證) –

+0

謝謝!感謝Jon的反饋! – Bati

回答

8

不需要的引用通常會被編譯器自動刪除,但是:通過更改csproj以在PropertyGroup上包含Condition,您可以更加明確。喜歡的東西:

<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> 
    <Reference Include="YourReference" /> 
</PropertyGroup> 

(也有可能是一個<PackageReference>等)

+0

Marc,當你說「引用通常被刪除」時,你是什麼意思 - 如果我的代碼在#if DEBUG下,那麼這個代碼將不能在Release中運行。但該組件仍在部署。我仍然在嘗試你的語法..得到一些錯誤.. – Bati

+0

@Bati你需要檢查IL,但實際的參考應該被刪除;但是,您還需要檢查部署配置,因爲您可以部署不是引用的東西。如果沒有真正的文件,不可能說更多。 –

+0

將Condition添加到參考節點的方法如下: Bati

5

這是完全正常的把一個using指令在#if DEBUG部分,編譯調試時刪除指令。

但是,這只是故事的一部分;它不會單獨完成你的目標。 Visual Studio中的解決方案資源管理器還有一個參考文獻部分。您還需要刪除程序集的引用,或者在構建時仍會包含該引用。

我不記得任何在Visual Studio的用戶界面,可以讓你這樣做,但我希望它應該有可能以某種方式,如果你手動編輯項目文件(它只是一個MSBuild文件)。就我個人而言,我很努力地避免做需要手動編輯項目文件的事情。 Visual Studio希望能夠擁有這些文件,並且最終可能會產生衝突,您和Visual Studio將在其中更改對方的更改。

+0

感謝您的意見 – Bati