3

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 インストーラーは失敗します。

マニフェストが有効でないか、ファイルを開くことができませんでした。

4

1 に答える 1

0

いずれかの名前を変更して使用する必要があります。また、アセンブリごとに異なるバージョンと公開鍵トークンを試してください

于 2014-05-26T12:55:11.607 に答える