2009-07-22 13 views
5

特定のdllバージョンを強制的に使用する方法はありますか? app.configから?dll版を強制的に使用する方法はありますか?

(backstory)私たちはSQL Compact 3.5を使用しており、ビジネス上の理由で(そうです、わかっています)、SQL Compact 3.5 SP1に移行することはできません。私たちはSystem.Data.SqlServerCeとすべての管理されていないDLLをビルドディレクトリに持っていますが、SP1がインストールされている場合、アプリケーションはロードされ、SP1の管理対象DLLを使用します(また、管理対象外のDLLも想定します)。

SP1以前のDLLのバージョン番号は3.5.0.0で、SP1バージョンは=私がCopyLocalにSystem.Data.SqlServerCeを=真および特定のバージョンへの参照を設定した3.5.1.0

ですtrueですが、pre-sp1バージョンがビルドディレクトリにある場合でも、SP1バージョンを使用します(GACのものを使用するものと仮定します)。私はGACからリファレンスを追加しようとしましたが、手動でファイルシステムに入り、dllを直接参照していました。

は(ちょうどそれを明確にするために、クライアントはそれを必要とする他のソフトウェアのサービスパックをインストールしているが、我々はまだ、サービスパックがインストールされていてもSP1以前のバージョンを実行する必要があります)

いずれかがあります私たちがビルドディレクトリに持っているものを.netで使用するように強制する方法?

UPDATE:

私はthis questionのようなアプリの設定でオーバーライドを置くが、ログビューアを結合アセンブリを実行すると、私はこれを与える:

LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\Projects\ConsoleApplication11\bin\Debug\ConsoleApplication11.exe.Config 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Redirect found in application configuration file: 3.5.0.0 redirected to 3.5.0.0. 
LOG: Publisher policy file is found at C:\Windows\assembly\GAC_MSIL\policy.3.5.System.Data.SqlServerCe\3.5.0.0__89845dcd8080cc91\publisher.config. 
LOG: Publisher policy file redirect is found: 3.5.0.0 redirected to 3.5.1.0. 
LOG: ProcessorArchitecture is locked to MSIL. 
LOG: Post-policy reference: System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL 
LOG: Found assembly by looking in the GAC. 
LOG: Binding succeeds. Returns assembly from C:\Windows\assembly\GAC_MSIL\System.Data.SqlServerCe\3.5.1.0__89845dcd8080cc91\System.Data.SqlServerCe.dll. 
LOG: Assembly is loaded in default load context. 

それは3.5の設定のように見えます。 1アセンブリがGACでオーバーライドしています。私のapp.configから問題を強制する方法はありますか?

答えて

5

解決策が見つかりました。ヘンクの答え(here)のリンクとfusionログの出力を見ると、3.5 SP1インストーラがパブリッシャポリシーファイルをインストールして、pre-sp1 dllが要求されていてもsp1 dllのロードを強制しているようです。 app.configをでこれを置く

は、発行者ポリシーを無視するように.NETを伝え、3.5.0.0バージョン使用して終わる:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" /> 
       <publisherPolicy apply="no"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
0

プロジェクトで参照されている3.5.1.0のバージョンがあるようです。私は3.5.1.0の参照を、プロジェクトの参照の下にリストされている場合は削除して、代わりに使用する3.5.0.0のDLLを直接参照するようにします。ただし、サーバーが既にSP1にアップグレードされている場合は、古いDLLを対象にすることはお勧めしません(ただし、サービスパックはAPIの観点からの下位互換性を維持する必要があります)。

+1

いや、我々は3.5.0.0を参照しています。サーバはsp1クライアントとpre-sp1サーバを使用して複製が中断するため、問題となるpre-sp1になります(サーバのアップグレードは、今後数か月以内に行われます) – Gareth

関連する問題