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 つあることにあると確信しています (ただし、公開キー トークンが異なることに注意してください)。
次のように非常に単純な再現を作成しました。
- 新しい WPF アプリケーションを作成する
- Nuget パッケージ MVVM Light を追加
- Nuget パッケージ Unity を追加します (CommonServiceLocator という依存パッケージも追加します)
- WPF アプリケーションをビルドして公開する
- 公開された MyApp.application clickOnce パッケージをインストールしてみてください....上記のエラーが表示されます
ここに再現プロジェクトがあります:
これを乗り越える方法はありますか?