构建MSI文件时如何更改WixSharp使用的临时文件夹?

问题描述 投票:0回答:1

我正在使用WixSharp v1.9.2.0构建MSI文件,但是当我调用

project.BuildMsi()
方法时,WixSharp会在Windows的
%Temp%
文件夹中创建临时文件。但是我的项目比较大,很快我的C盘就满了,导致创建MSI失败

有没有办法更改 WixSharp 用于临时文件的文件夹?如果是这样,我该怎么做?

c# installation wix windows-installer wixsharp
1个回答
0
投票

Wix# 使用标准的

Path.GetTempPath
Path.GetTempFileName
方法来获取临时文件的位置。

根据文档这些方法按以下顺序检查环境变量是否存在并返回找到的第一个路径:

  1. TMP
    环境变量指定的路径。
  2. TEMP
    环境变量指定的路径。
  3. USERPROFILE
    环境变量指定的路径。
  4. Windows 目录。

因此,您可以通过在构建和 msi 创作期间更改项目的

TMP
环境变量来更改临时文件夹位置。

为此,您需要将以下内容添加到您的 wix# csproj(已针对 sdk 样式项目进行测试)

<UsingTask TaskName="SetEnvironmentVariableTask"
           TaskFactory="RoslynCodeTaskFactory" 
           AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">

  <ParameterGroup>
    <Name ParameterType="System.String" Required="true" />
    <Value ParameterType="System.String" Required="true" />
  </ParameterGroup>
  <Task>
    <Using Namespace="System" />
    <Code Type="Fragment" Language="cs">
      <![CDATA[
      Environment.SetEnvironmentVariable(Name, Value);
    ]]>
    </Code>
  </Task>
</UsingTask>

<Target Name="SampleTarget" BeforeTargets="MSIAuthoring">
  <SetEnvironmentVariableTask Name="TMP" Value="D:\temp\" />
</Target>

这里我们可以看到:

  • SetEnvironmentVariableTask
    内联任务 执行在
    Code
    节点内指定的 C# 代码
  • SampleTarget
    目标在 wix#
    MSIAuthoring
    目标之前调用并调用
    SetEnvironmentVariableTask
    %tmp%
    设置为
    D:\temp\
    .

备注:

  • 您需要在创作 msi 之前创建新的
    %temp%
    文件夹。您可以手动执行此操作,也可以在任何 wix# 操作之前将适当的代码添加到
    Main
    中。
  • 此代码依赖于 wix# 目标名称
    MSIAuthoring
    (source),它可能会在 wix# 端发生变化。因此,您需要在每次 wix# 更新时控制这方面,并相应地更新您的代码。
© www.soinside.com 2019 - 2024. All rights reserved.