簡體   English   中英

不能參考其他項目

[英]Can not reference other projects

我想在 Visual Studio 解決方案中創建 3 個項目:

  • Windows 服務(參考業務層、公共層、log4net.dll)
  • 業務層(參考通用層、log4net.dll)
  • 公共層(參考 log4net.dll)

腳步:

  1. 我使用向導創建了業務層和公共層,沒有做任何修改。 我設置了參考,一切正常。

  2. 然后我創建一個新的 Windows 服務項目添加到解決方案。 我注意到它添加了目標平台 x86 而不是任何 CPU。 我引用了這 3 件事,代碼顏色正確,預編譯錯誤消失:這意味着引用被識別。

  3. 但是,當我構建解決方案時,Windows 服務項目有編譯錯誤:找不到任何引用的程序集。

這里發生了什么? x86 配置是否導致“找不到類型或命名空間名稱‘log4net’(您是否缺少 using 指令或程序集引用?)”錯誤?

我強制 Windows 服務項目使用任何 CPU 配置。 我仔細檢查了每一個參考,它們是正確的。 我仍然無法引用任何內容。

系統規格:

  • Windows 7 x64 SP1 Visual Studio 2010
  • 最終的

好吧,你已經找到了答案。 Log4net 依賴於 System.Web.dll,這是一個在客戶端配置文件中不可用的程序集。 這種依賴的可能核心原因是 log4net.Appender.AspNetTraceAppender class,它使用 HttpContext class 並且需要 System.Web。

現在,這是您需要從庫的文檔中或通過艱難的方式找到它來了解的內容。 構建會產生警告,但它只是警告而不是錯誤,很容易錯過:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9):警告 MSB3253:引用的程序集“C:\projects\WindowsFormsApplication2\ClassLibrary1\bin\Debug\ClassLibrary1.dll”無法解決,因為它依賴於“System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”,它不在當前目標框架“.NETFramework,Version=v4.0,Profile=Client”中”。 請刪除對不在目標框架中的程序集的引用,或考慮重新定位您的項目。

隨后是代碼中嘗試引用包含 log4net 引用的程序集中的類的任何語句的錯誤。

C:\projects\WindowsFormsApplication2\WindowsFormsApplication2\Form1.cs(12,9):錯誤 CS0246:找不到類型或命名空間名稱“ClassLibrary1”(您是否缺少 using 指令或程序集引用?)

如果您在編寫代碼時沒有增量構建,您也不會錯過任何內容,並且可能會出現很多錯誤。 您專注於錯誤並且不會意識到警告是錯誤的真正來源。 另一個令人討厭的陷阱是 IntelliSense 一開始很高興,它確實正確地解析了程序集引用。 有一些證據表明警告並不總是產生,純粹是因為許多程序員似乎錯過了它。 不過,我還沒有找到這種情況。 沒有把握。

在失去了幾把頭發后,我發現了這個 Stackoverflow答案,它解決了這個問題。 但是為什么 Visual Studio 會添加一個 Windows 服務,其中x86作為目標平台, .Net Framework 4 Client Profile作為目標框架?

檢查解決方案是否已構建。 您可以通過右鍵單擊解決方案 > 屬性 > 配置屬性來執行此操作。 確保構建所有解決方案

暫無
暫無

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

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