You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Wix自定义操作生成的CA DLL打包到NuGet包中?

解决Wix4自定义Action CA DLL的NuGet打包问题

首先明确两个生成文件的作用:

  • WixInstallTools.dll:普通.NET类库,包含自定义动作的代码逻辑,但无法直接被Windows Installer调用。
  • WixInstallTools.CA.dll:Wix DTF工具生成的特殊版本,嵌入了原生引导代码,是Windows Installer实际需要调用的自定义动作DLL,必须包含在NuGet包中。

要让dotnet pack正确打包CA DLL,需修改项目文件调整打包规则:

步骤1:禁用默认构建输出打包

在<PropertyGroup>中添加属性,避免默认打包普通的WixInstallTools.dll:

<IncludeBuildOutput>false</IncludeBuildOutput>

步骤2:显式指定要打包的CA相关文件

添加新的<ItemGroup>,将CA DLL、调试pdb文件(可选)和CustomAction.config纳入NuGet包:

<ItemGroup>
  <!-- 打包CA DLL到NuGet的lib目录 -->
  <None Include="$(OutputPath)\$(AssemblyName).CA.dll" Pack="true" PackagePath="lib\$(TargetFramework)" />
  <!-- 可选:打包调试pdb文件 -->
  <None Include="$(OutputPath)\$(AssemblyName).CA.pdb" Pack="true" PackagePath="lib\$(TargetFramework)" Condition="Exists('$(OutputPath)\$(AssemblyName).CA.pdb')" />
  <!-- 打包CustomAction.config配置文件 -->
  <None Include="$(OutputPath)\CustomAction.config" Pack="true" PackagePath="lib\$(TargetFramework)" Condition="Exists('$(OutputPath)\CustomAction.config')" />
</ItemGroup>

最终修改后的项目文件示例

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
    <OutputPath>bin\$(Configuration)\$(Platform)</OutputPath>
    <Version>1.0.0.0</Version>
    <Authors>author</Authors>
    <Company>company</Company>
    <GenerateAssemblyInfo>true</GenerateAssemblyInfo>
    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
    <DebugType>embedded</DebugType>
    
    <PackageId>WixInstallTools</PackageId>
    <PackageDescription>Wix Custom Action Library</PackageDescription>
    <PackageTags>WixInstallTools;Wix Install Tools;Wix;Install;Tools</PackageTags>
    <RepositoryUrl>https://github.com/company/nuget</RepositoryUrl>
    <!-- 禁用默认构建输出打包 -->
    <IncludeBuildOutput>false</IncludeBuildOutput>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="CustomAction.config" CopyToOutputDirectory="PreserveNewest" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="WixToolset.Dtf.CustomAction" Version="4.0.4" />
    <PackageReference Include="WixToolset.Dtf.WindowsInstaller" Version="4.0.4" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="PresentationFramework" />
    <Reference Include="System.DirectoryServices.AccountManagement" />
  </ItemGroup>

  <!-- 显式打包CA相关文件 -->
  <ItemGroup>
    <None Include="$(OutputPath)\$(AssemblyName).CA.dll" Pack="true" PackagePath="lib\$(TargetFramework)" />
    <None Include="$(OutputPath)\$(AssemblyName).CA.pdb" Pack="true" PackagePath="lib\$(TargetFramework)" Condition="Exists('$(OutputPath)\$(AssemblyName).CA.pdb')" />
    <None Include="$(OutputPath)\CustomAction.config" Pack="true" PackagePath="lib\$(TargetFramework)" Condition="Exists('$(OutputPath)\CustomAction.config')" />
  </ItemGroup>
</Project>

验证打包结果

运行dotnet pack命令后,用NuGet包浏览器打开生成的.nupkg文件,检查lib/net472目录下是否包含WixInstallTools.CA.dll、对应pdb文件和CustomAction.config,确认无误后即可推送到你的NuGet仓库。

内容的提问来源于stack exchange,提问作者Ultratrunks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:22:47