我很抱歉,如果這之前已經問過,或者現在是否可以回覆。C#編譯智能編譯
我正在使用一個龐大的代碼庫(大部分是在開始編寫它之前由其他軟件工程師編寫的,標準的事務)。我爲這個項目添加了很多代碼,其中大部分都是將現有的方法封裝到對象/庫中以便重用。通過包裝,我的意思是我將它們複製到一個新的對象/庫中,對它們進行編輯以使它們作爲獨立對象或庫(在適用的情況下)工作,並在原始代碼庫中適當調用/實例化它們。例如,而不是一個巨大的方法(foo),它提供了一些主要exe文件的一個.cs文件中包含的一次性函數,我將它包裝在自己的類中並將其分開,所以它可以(理論上)用於其他項目或解決方案的不同部分。
IE從這個打算:
/* somewhere in Main */
void Main()
{
...
foo (arg1, arg2, arg3)
...
}
foo (arg1, arg2, arg3)
{
//some massive functionality
}
這樣的:今天
/* somewhere in Main or any other part of the code base */
Foo myFoo = new Foo (arg1, arg2, arg3);
myFoo.DoSomething();
,我已經開始期待通過基礎代碼和註釋掉所有的老方法(一個就是我已經被包裝進了對象/庫),努力弄清楚我們可以從原始代碼庫中刪除哪些。我使用的是版本控制軟件,我一次只做幾個,然後重新編譯並執行一些測試,以檢查我沒有損壞任何東西。我的問題是這樣的: 當我編譯時,C#編譯器(使用3.5版本)足夠聰明,它不會包含永遠不會調用,實例化或使用的方法/函數/對象/庫嗎?
我還是要補充/清除現在不推薦使用的方法/函數,但我只是想知道編譯器是否可以生成不包含這些方法/函數的輸出。
TL; DR:如果我有以下Main.cs
/*using statements here*/
public void Main()
{
foo();
}
foo()
{
/*Some commands*/
}
bar()
{
/*Never called*/
}
難道我的編譯輸出包含任何引用吧?
謝謝你。我以爲是這樣,但我覺得最好檢查一下。 – 2012-03-22 11:58:02
@JamieTaylor如果你很好奇,你可以使用像[ILSpy](http://wiki.sharpdevelop.net/ILSpy.ashx)這樣的工具來查看你的二進制文件,看看它裏面的內容。 – 2012-03-22 12:04:31