【茶包射手日記】aspnet_compiler的ODP.NET參照版本問題

案情如下:

公司有台CruiseControl.NET伺服器,負責ASP.NET Web Site網站的自動化建置及部署。最近因部分專案將使用EF for Oracle,新裝ODAC 11.2.0.3,然而部分仍使用ODP.NET 2.112.1版的專案,建置後出現App_Code.dll參照2.112.3版,其他資料夾Build的DLL卻參照2.112.1版的狀況,部署到正式主機時便會因該主機尚未安裝2.112.3版導致錯誤。

檢視建置所得的DLL,證實確有兩種版本並存情況:


App_Code參考2.112.3


HS0101.dll參考2.112.1

由Log找到Build Server使用的aspnet_compiler.exe指令,手動執行發現aspnet_compiler偵測到版本衝突並曾提出警告:

D:\Test\src>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -v
 ./2010Web -p D:\test\src\2010Web -u -f -d d:\test\TempBuildDir
Utility to precompile an ASP.NET application
Copyright (C) Microsoft Corporation. All rights reserved.

(0): warning CS1702: Assuming assembly reference 'Oracle.DataAccess, Version=2.1
12.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342' matches 'Oracle.DataAc
cess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342', you
may need to supply runtime policy

檢查web.config,其指定ODP.NET版本為2.112.1.0無誤:

<assemblies>
  <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
... 略 ....
  <add assembly="Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89B483F429C47342"/>
</assemblies>

會被導向2.112.3,推測是安裝新版ODAC後,GAC被放入發行者原則Publisher Policy強制導向的緣故:


試著在web.config中加上組件繫結導向設定,將2.112.3再導回2.112.1:

<dependentAssembly>
  <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
  <bindingRedirect oldVersion="2.112.1.0-2.112.3.0" newVersion="2.112.1.0"/>
</dependentAssembly>
     

測試無效,此舉並未能阻止導向2.112.3。研判發行者原則的效力優先於web.config設定,查詢MSDN文件,找到護身符<publisherPolicy apply="no" />一枚,可形成結界忽略發行者原則,web.config再調整如下:

      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342"/>
        <bindingRedirect oldVersion="2.112.1.0-2.112.3.0" newVersion="2.112.1.0"/>
        <publisherPolicy apply="no"/>
      </dependentAssembly>     

經以上修改,aspnet_compiler編譯時即不再出現Oracle.DataAccess版本警示,編譯結果也一致指向2.112.1,問題排除~

歡迎推文分享:
Published 30 April 2013 07:25 AM 由 Jeffrey
Filed under:
Views: 7,364



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<April 2013>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication