0

ClickOnce で WPF アプリケーションを発行できないという問題があります。

アプリケーションは Nuget パッケージ MVVM Light 4.1.26.1、Unity 2.1.505.2、CommonServiceLocator 1.0 を使用します。

問題は、公開するとすべて正常にビルドされることですが、clickonce パッケージをインストールしようとすると次のエラーが発生することです。

アプリケーションをインストールまたは実行できません。アプリケーションでは、最初にアセンブリ Microsoft.Practices.ServiceLocation バージョン 1.0.0.0 をグローバル アセンブリ キャッシュ (GAC) にインストールする必要があります。

掘り下げたところ、マニフェストにそのアセンブリへの参照が2つあり、そのうちの1つは削除できない前提条件としてマークされていることがわかりました。

<dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
      <assemblyIdentity name="Microsoft.Practices.ServiceLocation" version="1.0.0.0" publicKeyToken="59D6D24383174AC4" language="neutral" processorArchitecture="msil" />
    </dependentAssembly>
  </dependency> 

<dependency>
    <dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Microsoft.Practices.ServiceLocation.dll" size="29760">
      <assemblyIdentity name="Microsoft.Practices.ServiceLocation" version="1.0.0.0" publicKeyToken="31BF3856AD364E35" language="neutral" processorArchitecture="msil" />
      <hash>
        <dsig:Transforms>
          <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
        </dsig:Transforms>
        <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
        <dsig:DigestValue>eee+a+dQmhpSY/ApLxRipXdEp8UsTaZHXHClBU0Iwyc=</dsig:DigestValue>
      </hash>
    </dependentAssembly>
  </dependency>

ClickOnce の問題は、同じバージョンのこのアセンブリへの参照が 2 つあることにあると確信しています (ただし、公開キー トークンが異なることに注意してください)。

次のように非常に単純な再現を作成しました。

  1. 新しい WPF アプリケーションを作成する
  2. Nuget パッケージ MVVM Light を追加
  3. Nuget パッケージ Unity を追加します (CommonServiceLocator という依存パッケージも追加します)
  4. WPF アプリケーションをビルドして公開する
  5. 公開された MyApp.application clickOnce パッケージをインストールしてみてください....上記のエラーが表示されます

ここに再現プロジェクトがあります:

スカイドライブ再現プロジェクト

これを乗り越える方法はありますか?

4

4 に答える 4

1

もう一度やり直してください。利用可能な場合は、公式のCommonServiceLocatorパッケージに依存する新しいビルド(4.1.27.0)をNugetにプッシュしました。これで問題が解決するはずです。さらに問題が発生した場合は、必ずお知らせください。

乾杯ローラン

于 2013-02-14T20:27:40.283 に答える
1

はい。MVVMLight ServiceLocation アセンブリは、他のすべてのパブリック実装とは異なる公開キー トークンを使用します。それは私の人生をかなり長い間悪夢にしました。最終的に、すべてのナゲット アセンブリを取り出して、今のところ共通ディレクトリ内のファイル参照に戻る必要がありました。ローランがこれを修正するのを待っています。

于 2013-02-11T16:17:47.073 に答える