CLR via C 讀書筆記2 2

2021-06-14 07:01:19 字數 2550 閱讀 7555

把型別編譯成乙個模組

先假設有這麼乙個簡單的程式:

public sealed class program 

}

該程式定義乙個名為 program 的型別,它擁有乙個公有靜態 (public, static) 方法 main,該方法參照 system.console。把源**存為 program.cs 執行以下命令列:

csc.exe /out:program.exe /t:exe /r:mscorlib.dll program.cs
該命令列有以下功能:

響應檔案(response file)

響應檔案包含了一系列編譯器的命令列開關,呼叫csc.exe 時通過乙個 @ 符號來告訴編譯器使用指定的響應檔案。例如:有乙個名為 myproject.rsp 幷包含以下內容的響應檔案。

/out:myproject.exe

/target:winexe

使用以下命令告訴 csc.exe 來使用這個檔案:

csc.exe @myproject.rsp codefile1.cs codefile2.cs
c# 編譯器支援多個響應檔案,除了你在命令列中指定的檔案,編譯器還自動查詢 csc.rsp(作為全域性設定),一些需要適用到所有工程的設定可以寫在這個檔案中。如果同時存在互相矛盾的設定,那麼本地設定比全域性設定有更高的優先順序,與此類似的是直接通過命令列指定的設定優先順序比本地設定要高。

當你安裝 .net framework 時,乙個全域性的 csc.rsp 檔案被安裝到 %systemroot%\microsoft.net\framework(64)\vx.x.x 目錄 (x.x.x 為.net framework 版本號)。通常這個檔案包含以下內容:

# this file contains command-line options that the c#

# command line compiler (csc) will process as part

# of every compilation, unless the "/noconfig" option

# is specified.

# reference the common framework libraries

/r:accessibility.dll

/r:microsoft.csharp.dll

/r:system.configuration.dll

/r:system.configuration.install.dll

/r:system.core.dll

/r:system.data.dll

/r:system.data.datasetextensions.dll

/r:system.data.linq.dll

/r:system.data.oracleclient.dll

/r:system.deployment.dll

/r:system.design.dll

/r:system.directoryservices.dll

/r:system.dll

/r:system.drawing.design.dll

/r:system.drawing.dll

/r:system.enterpriseservices.dll

/r:system.management.dll

/r:system.messaging.dll

/r:system.runtime.remoting.dll

/r:system.runtime.serialization.dll

/r:system.runtime.serialization.formatters.soap.dll

/r:system.security.dll

/r:system.servicemodel.dll

/r:system.servicemodel.web.dll

/r:system.serviceprocess.dll

/r:system.transactions.dll

/r:system.web.dll

/r:system.web.extensions.design.dll

/r:system.web.extensions.dll

/r:system.web.mobile.dll

/r:system.web.regularexpressions.dll

/r:system.web.services.dll

/r:system.windows.forms.dll

/r:system.workflow.activities.dll

/r:system.workflow.componentmodel.dll

/r:system.workflow.runtime.dll

/r:system.xml.dll

/r:system.xml.linq.dll

最後如果想無視本地/全域性響應檔案,只需在編譯命令列中使用 /noconfig 命令列。

CLR via C 讀書筆記1 9

與非託管 的互操作 clr 提供3種與非託管 的互動方案 託管 通過使用 p invoke 機制 來呼叫dll檔案中的非託管函式 許多 fcl 中定義的型別內部都有呼叫到 kernel32.dll,user32.dll 等等檔案中的函式。同時許多程式語言會提供託管 呼叫非託管 的簡便途徑,比如 c ...

CLR via C 讀書筆記目錄

一口氣寫了clr via c 兩章的筆記,有些內容自己也似懂非懂,有些則覺得很好很強大,所以趁此機會作個目錄同時為每篇文章打個評分 clr via c 讀書筆記1 1 託管模組 managed modules 定義 clr via c 讀書筆記1 2 程式集 assemblies 定義 clr vi...

《CLR via C 》讀書筆記 09 引數

如果提取的乙個方法,目的是 傳入乙個值,然後加工計算後返回 這是乙個常見的行為 傳入的值如果是 值型別 那是建立的副本,因為所以需要返回的時候再次賦值 使用 out 修飾形參,這樣傳入的是該值的位址,避免建立副本,返回 開發中,會遇到給乙個方法傳的引數大於7個,雖然這樣寫的次數少,但我幹過 引數多,...