ASP.NETアプリケーションを Windows フォーム内の Internet Explorer コントロールにラップする「オフライン」Windows アプリケーションがあります。したがって、オンライン/Web アプリケーション全体であるアプリケーション フォルダにサブツリーがあり、これはラッピングされたオフライン アプリケーション EXE ファイル内で起動および実行されます。
これにより、一部のアセンブリが、オフライン アプリケーションの EXE ファイルからの直接参照として、またオンライン アプリケーションのサブフォルダーの一部として存在するようになりました。これは、アプリケーション フォルダ ツリー全体を手動でコピーしてアプリケーションを展開する場合に問題なく機能します。ただし、ClickOnce アプリケーション マニフェストを検証するときに、インストール時に ClickOnce 配置が失敗します。オンライン アプリケーション サブツリーからこれらのアセンブリを削除すると、問題として重複するアセンブリに焦点を当てました (それぞれのコピーを 1 つだけ残します)。ルート フォルダー) を作成し、それらを使用せずにアプリケーション マニフェストを再構築/署名すると、検証が成功し、アプリケーションがインストールされますが、もちろん削除したアセンブリは含まれません。
===更新===
新しいバージョンの mage.exe が.NET 4 用に提供され (新しいコピーは Windows SDK v7.1 の一部であり、NETFX 4.0 Tools フォルダーにあります)、新しいバージョンは重複したアセンブリに対して異なる動作を示します。
Mage v3.xによって作成されたアプリケーション マニフェストでは、次のように「ファイル」要素を使用して重複がリストされます。
<file name="foo.dll" size="123456">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>JFifxtn6vhCtaiom4tzJ+pcgqT0=</dsig:DigestValue>
</hash>
</file>
次の形式の警告が生成されます。
警告 MSB3178: Assembly'\AppFiles\fooApp_2.9.186.3\foo.dll' がファイルとして正しく指定されていません。
実際、両方の重複ファイルがこのようにリストされています。つまり、どちらも「dependentAssembly」としてリストされていません。これは明らかに間違っています。
ただし、Mage v4 は、ファイルとフォームの警告の両方に対して「dependentAssembly」エントリを作成します。
警告 MSB3112: 2 つ以上のアセンブリが同じ ID 'foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0123456789012345, ProcessorArchitecture=msil' を持っています。
2 つのエントリは、パス ('codebase' 属性で定義) を除いて同一ですが、インストール時に、あいまいなエラーでそのようなエントリが配置に含まれている場合、ClickOnce インストーラーは失敗します。
マニフェストが有効でないか、ファイルを開くことができませんでした。