none
app.config之<dependentAssembly>設定問題 RRS feed

  • 問題

  • 因有許多專案要同時起跑,目前設計的一些核心函式庫希望放置在Client 電腦上的D槽的固定位置而不要註冊進GAC

    故程式執行時需要利用app.config中的<dependentAssembly>設定來指定執行時期需要參考的組件位置

    但本人測試時發生了一個例外錯誤,狀況是這樣的

    1.開啟一個新的方案,隨意建立一個A專案(類別庫)及B專案(Windows應用程式)

    2.A專案內任意寫一個Class,接者B專案參考A專案

    3.在B專案的void main方法中撰寫程式碼任意建立一個A專案中的型別變數

    4..將B專案建置路徑修改為D:\Temp\Application\,將A專案建置路徑修改為D:\Temp\

    5.在B專案中新增app.config設定

      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="A" publicKeyToken="null" culture="neutral"/>
            <codeBase version="1.0.0.0" href="D:\Temp\A.dll"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>


    6.接著執行程式,就會收到以下例外錯誤訊息

    無法載入檔案或組件 'A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 或其相依性的其中之一。 在 Appbase 目錄外找到私用組件。 (發生例外狀況於 HRESULT: 0x80131041)

    後來測試發現

    只要A專案的輸出位置不是在B輸出目錄或子目錄時,就會發生這個例外錯誤

    如果程式碼不是寫在void main或物件的建構凾式就不會發生錯誤(例如寫在Form Load事件中)

    關鍵的錯誤應該是『在 Appbase 目錄外找到私用組件』

    請問造成這個錯誤具體原因是什麼呢?是否有解決方式可以達成我的需求呢?



    • 已編輯 MAGYC 2013年7月14日 上午 09:31 補充說明
    2013年7月14日 上午 09:25

所有回覆