23

サードパーティの.NETDLL(この特定のケースでは)に依存するCustomAction C#DLLファイルを作成したいと思いますMySql.Data.dll。以下のWiXフラグメントで動作するC#カスタムアクションDLLファイルがあります。カスタムアクションに依存関係を安全に追加する方法を理解しようとしています。注:インストールされたアプリケーションを実行するために、このサードパーティのDLLファイルファイルは実際には必要ありません。

  <Binary Id="MyCustomAction.dll" SourceFile="MyCustomAction.CA.dll" />

  <CustomAction Id="FixupConfigForMysql" Return="check" />

  <InstallExecuteSequence>
     <Custom Action='FixupConfigForMysql' After='InstallFiles'>NOT Installed</Custom>
  </InstallExecuteSequence>

MySql.Data.dllカスタムアクションを実行するには、サードパーティのDLLファイル()をインストールする必要がありますか?

サードパーティのDLLファイルを使用して別のバイナリタグを追加できますか?

4

4 に答える 4

25

WiXツールセットのDTFには、カスタムアクションアセンブリとそのすべての参照を単一のバイナリ(基本的には自己解凍型dll)に含めるメカニズムがあります。私はマネージドカスタムアクションを作成しません(C / C ++は依存関係の少ないカスタムアクションを作成し、成功率を高めます)が、VSでビルドするときにのみ機能するはずです。

于 2009-10-20T04:18:25.587 に答える
5

<Binary />カスタムアクションを実行するために必要なファイルを追加するために使用できます。これは、必要なサードパーティのdllにも当てはまります。バイナリ要素を使用して含まれるファイルは、インストール中にのみ使用され、インストールされるアプリケーションの一部とは見なされません。

更新: CustomActionとBinaryの間の接続は、BinaryKey属性を使用してカスタムアクションからバイナリを参照することによって行われます。

複数のBinaryKey属性を持つことができない限り(私はこれを試しておらず、MSIカスタムアクションテーブルでこれのサポートを直接確認していません)、 1つのバイナリに依存するカスタムアクションしか持つことができません。したがって、そのバイナリは、それ自体の中で必要なすべての依存関係を保持する必要があります。

とはいえ、dllがすべて.Netアセンブリである場合は、ILMergeを使用してそれらを1つの単一のアセンブリにパッケージ化することをお勧めします。

于 2009-10-20T00:13:47.030 に答える
5

VisualStudioでハードリファレンスの「ローカルコピー」プロパティをTrueに設定します。

于 2010-03-05T08:33:48.863 に答える
1

Mensching氏のコメントに続いて、もう少し詳しく説明します。

少なくともWix3.0を使用している場合は、MakeSfxCA.exeを使用して依存関係を単一のDLLにパッケージ化できます。(これは、DFT --Deployment Tools Foundationからのアドインでした。)基本的に、プロジェクトが依存するDLLをコピーしていることを確認することから始めます。CustomAction.configファイルを作成します。次のような単純な.batファイルでテストします。

REM MyMakeSfxCA.bat - Run under $(TargetDir); abs. paths reqd.
"%WIX%\SDK\MakeSfxCA" ^
    %cd%\Managed_custom_action_pkg.dll ^
    "%WIX%\SDK\x86\sfxca.dll" ^
    %cd%\Managed_custom_action.dll  ^
    %cd%\Dependent1.dll ^
    %cd%\Dependent2.dll ^
    %cd%\Microsoft.Web.Administration.dll ^
    %cd%\Microsoft.Deployment.WindowsInstaller.dll ^
    %cd%\CustomAction.config 

それが機能したら、ビルド後のイベントに変換します。

"$(WIX)\SDK\MakeSfxCA" ^
    $(TargetDir)\Managed_custom_action_pkg.dll ^
    "$(WIX)\SDK\x86\sfxca.dll" ^
    $(TargetDir)\Managed_custom_action.dll  ^
    $(TargetDir)\Dependent1.dll ^
    $(TargetDir)\Dependent2.dll ^
    $(TargetDir)\Microsoft.Web.Administration.dll ^
    $(TargetDir)\Microsoft.Deployment.WindowsInstaller.dll ^
    $(TargetDir)\CustomAction.config

.wxsファイルでは、バイナリキーは次のようになります。

<Binary Id="Managed_custom_action_CA_dll" 
        SourceFile="$(var.Managed_custom_action.TargetDir)$(var.Managed_custom_action.TargetName)_pkg.dll" />

CustomAction.configについては、オンラインで例を見つけることができます。

これは私が見つけた最良の方法です。

于 2015-06-18T15:47:24.540 に答える