共用方式為


編譯器警告 (層級 1) CS1699

更新:2007 年 11 月

錯誤訊息

使用命令列選項 "compiler_option" 或適當的專案設定,而不使用 "attribute_name"

為了簽署組件,您需要指定金鑰檔。在 Microsoft Visual C# 2005 之前,您會使用原始程式碼中的 CLR 屬性 (Attribute) 指定金鑰檔。這些屬性現在都已被取代。

從 Microsoft Visual C# 2005 開始,您應該使用 [專案設計工具] 的 [簽署頁面] 或 [組件連結器] 來指定金鑰檔。

[專案設計工具] 的 [簽署頁面] 是偏好的方法;如需詳細資訊,請參閱專案設計工具、簽署頁管理組件和資訊清單簽署

HOW TO:使用強式名稱簽署組件會使用下列編譯器選項:

下列原因導致這些屬性被取代:

  • 因為這些屬性內嵌於編譯器產生的二進位檔中,所以產生安全性問題。他人取得您的二進位檔時,也會取得其中儲存的金鑰。

  • 因為屬性中指定的路徑是相對於目前的工作目錄或輸出目錄 (而工作目錄可在整合式開發環境 (IDE) 中變更),因此會產生可用性問題。因此,在大部分情況下,金鑰檔可能是 ..\\..\\mykey.snk。屬性也使得專案系統難以簽署附屬組件。當使用編譯器選項代替這些屬性時,您可以為金鑰使用完整路徑及檔案名稱,無需在輸出檔案中內嵌屬性。當專案移動時,專案系統和原始程式碼控制系統可以適當管理該完整路徑。專案系統可以維持金鑰檔案的專案相關路徑,同時將完整路徑傳遞給編譯器,其他建置程式可以將適當路徑直接傳遞給編譯器以簡化簽署輸出,而不必使用正確屬性產生原始程式檔。

  • 以 friend 組件使用屬性可能會降低編譯器使用效益。當您使用屬性時,編譯器必須決定是否授與夥伴關係,但是不知道金鑰為何,因此會猜測。編譯結束時,一旦取得正確金鑰資料,編譯器就能確認先前的猜測。以編譯器選項指定金鑰檔時,編譯器可以立即判斷是否要授與夥伴關係。

範例

下列範例會產生 CS1699。若要解決這個問題,請移除屬性並使用 /delaysign 編譯。

// CS1699.cs
// compile with: /target:library
[assembly:System.Reflection.AssemblyDelaySign(true)]   // CS1699

請參閱

工作

HOW TO:使用強式名稱簽署組件

參考

專案設計工具、簽署頁

其他資源

管理組件和資訊清單簽署