2

私のアプリケーションは、依存関係としてSystem.Data.SqlServerCe4.0.0.0を持つライブラリプロジェクトを参照しています。

アプリをプライベートデプロイしようとしていますが、System.Data.SqlServerCe4.0.0.1が必要です。

そこで、System.Data.SqlServerCe 4.0.0.1が出力ディレクトリ(実行可能ファイルと同じフォルダー)にコピーされるようにアプリを設定し、AssemblyBindingをApp.configファイルに追加しました。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  ...
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity
          name="System.Data.SqlServerCe.dll"
          publicKeyToken="89845dcd8080cc91" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.0.1" />
        <codeBase version="4.0.0.1" href="System.Data.SqlServerCe.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

残念ながら、次のエラーが発生します。

ファイルまたはアセンブリ'System.Data.SqlServerCe、Version = 4.0.0.0、Culture = neutral、PublicKeyToken=89845dcd8080cc91'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0X80131040)

質問

実行時にSystem.Data.SqlServerCe4.0.0.0をバージョン4.0.0.1と交換して、プライベート展開を可能にすることは可能ですか?

4

2 に答える 2

3

CodeBaseタグを削除しようとしましたか:http://blogs.msdn.com/b/sqlservercompact/archive/2010/05/12/troubleshooting-problem-with-private-deployment-of-sql-server-compact-3 -5sp2-entity-dll.aspx 名前からも.dllを削除する必要があるようです。以下の構成ファイルは、Exportsqlce40.exeを強制的にプライベートdllファイルに対して実行することができます(これらのファイルは、.exeと同じフォルダーに存在する必要があります)。

<?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" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.0.1" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
于 2011-05-21T15:41:28.810 に答える
1

再コンパイルせずにバージョン番号が異なる場合、アセンブリを交換することはできないと思います。

申し訳ありませんが、とにかく私の答えは間違っていたようです。私は、ビルド時に作成されたアセンブリマニフェストの静的参照のみを認識していました。

ErikEJの答えは、あなたがやろうとしていることに対して正しいように見えます。また、assemblyIdentityに*.dllは必要ないと思います。私が読んだドキュメントから、codeBaseは、リモートアセンブリまたはアプリケーションに関連する別のフォルダー内のアセンブリを参照しようとしている場合にのみ必要です。

それでも問題が解決しない場合は、assemblyIdentity要素のpublicKeyToken属性を削除するか、VSコマンドラインから「sn–TSystem.Data.SqlServerCe.dll」を実行して公開鍵を確認できます。

于 2011-05-21T01:19:40.127 に答える