5

次のコードに対して ICE03: 文字列オーバーフローの警告が表示されます。

<CustomAction Id="CustomActionID"
          Return="check"
          Property="SomeProperty"
          Value="VERY LONG STRING COMES HERE"
          Execute="immediate"/>

このコードは、別の .wxs ファイルのフラグメントに含まれています。これを「製品」タグ内に直接含めると、警告が消えます。これは、次のコードでも発生します。

<Binary Id="SomeBinaryWithAVeryLongName" SourceFile="SOURCEFILE" />

なぜこれが起こっているのか知りたいのですが?

4

1 に答える 1

9

このCustomAction/@Value属性は、Windows インストーラーで 255 文字に制限されています。そのため、"VERY LONG STRING COMES HERE"255 文字を超える場合は、ICE 警告が表示されます。 Binary/@Idこれらは MSI の「識別子」であり、Windows インストーラーはこれらの識別子に対して 72 文字で標準化されているため、さらに短くなります。

ProductICE 検証は最終的な MSI に対して実行されるため、ICE03warning メッセージが要素の下に配置されたときになぜ異なるのかは謎です。最終的な MSI は、MSI をビルドするために .wxs ソース コードをどのように編成したかは気にしません。Productコードが 内にあるか下にあるかに基づいて、(ICE03 以外の) 他の警告が表示される可能性はありますFragmentか?

Product私がorの違いについて尋ねる理由は、コンパイラがセクションとセクションFragmentをコンパイルするときに異なることを知っているからです。コンパイラは、セクションが .MSI ファイルを作成することを認識しています。一方、.MSI ファイル、.MSM ファイル、または .MSP ファイルを作成することもできます。.MSM および .MSP ファイルには、.MSI ファイル以外の追加の制限があります。ProductFragmentProductFragment

たとえば、.MSM ファイルを作成する場合、すべての識別子の末尾にModule/@Id. これにより、すでに 72 文字に制限されている識別子にさらに 37 文字が追加されます。これBinary/@Idは、.MSM ファイル内のストリームの名前になるため、さらに制限されます。したがって、約 60 文字を超えることはできません。

とにかく、最終的な結果はFragment、コンパイラーが可能なすべてのルールを識別子に適用するときです。ルールは、すべての場合において絶対に必要なものよりもわずかに制限的である可能性があります。ただし、すべての警告/エラーに注意すれば、コードはすべての場合にコンパイルされるはずです。

于 2013-05-09T14:21:09.720 に答える