我正在使用WixSharp v1.9.2.0构建MSI文件,但是当我调用
project.BuildMsi()
方法时,WixSharp会在Windows的%Temp%
文件夹中创建临时文件。但是我的项目比较大,很快我的C盘就满了,导致创建MSI失败
有没有办法更改 WixSharp 用于临时文件的文件夹?如果是这样,我该怎么做?
Wix# 使用标准的
Path.GetTempPath
和 Path.GetTempFileName
方法来获取临时文件的位置。
根据文档这些方法按以下顺序检查环境变量是否存在并返回找到的第一个路径:
TMP
环境变量指定的路径。TEMP
环境变量指定的路径。USERPROFILE
环境变量指定的路径。因此,您可以通过在构建和 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\
.备注:
%temp%
文件夹。您可以手动执行此操作,也可以在任何 wix# 操作之前将适当的代码添加到Main
中。MSIAuthoring
(source),它可能会在 wix# 端发生变化。因此,您需要在每次 wix# 更新时控制这方面,并相应地更新您的代码。