用于 Wix 设置的 T4 模板

T4 Templates for Wix Setup

提问人:Shynord 提问时间:6/19/2023 最后编辑:Shynord 更新时间:6/19/2023 访问量:32

问:

我目前正在研究一个 C# 解决方案,该解决方案多年前被我没有联系过的 somone 放弃了。 它使用 Wix 生成 msi 并包含一个名为“TemplatingWixSetup”的整个项目,其中包括 T4 模板。请注意,我对 Wix 设置很有经验。 其中一部分包含方法,但这些方法未包含在任何类定义中。这不是编译,所以我将所有方法都包含在一个以每个模板的 .tt 文件名命名的类中。在这里,WixDirectoryTree.tt 包含所需的方法,因此我将其包含的所有方法都包含在名为 WixDirectoryTree 的类中。

然后,我收到其中一个模板的错误很少。它仅使用其中一种方法来检查目录是否存在,并在需要时创建它。

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".wxs" #>
<#@ assembly name="System.Core.dll" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Security.Cryptography" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ include file="WixDirectoryTree.tt" #>
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<#
  TryAndGenerateDirectory(@"..\MatterSlice", "OpenSourceMatterSlice", "$(var.SolutionDir)MatterSlice", "ProgramFilesOpenSourceMatterSlice");
  TryAndGenerateDirectory(@"..\t4", "OpenSourceMonoT4", "$(var.SolutionDir)t4", "ProgramFilesOpenSourcet4");
#>
</Wix>

我通过创建包含在 WixDirectoryTree 中的类的实例来纠正其中的一部分,但仍然存在一个错误。请参阅以下代码,该代码是整个相关文件:

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".wxs" #>
<#@ assembly name="System.Core.dll" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Security.Cryptography" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ include file="WixDirectoryTree.tt" #>
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<#  var wixDirectoryTree = new WixDirectoryTree();
    wixDirectoryTree.TryAndGenerateDirectory(@"..\MatterSlice", "OpenSourceMatterSlice", "$(var.SolutionDir)MatterSlice", "ProgramFilesOpenSourceMatterSlice");
    wixDirectoryTree.TryAndGenerateDirectory(@"..\t4", "OpenSourceMonoT4", "$(var.SolutionDir)t4", "ProgramFilesOpenSourcet4");
#></Wix>

出现以下错误:

Erreur CS1022 编译转换:类型或命名空间定义,或文件末尾 TemplatingWixSetup C:\Users\Admin\Documents\cola\TemplatingWixSetup\OpenSource.tt 350 Actif

老实说,我不知道该怎么做,或者是什么原因导致了这个问题。我确保标签“”后面没有任何东西。 我想知道这是否与我引入 befor 类这一事实有关,但这也意味着编译错误。

C# 可视化工作室-2022 T4 Wix3

评论

0赞 jdweng 6/19/2023
原始 xml 文件是什么样子的?您发布的内容不是有效的 xml。
0赞 Shynord 6/19/2023
@jdweng刚刚添加了原始文件。正如我所说,它是 Wix Setup 项目中使用的许多 T4 模板之一。我没有如何使用它们的经验,并且很难找到解释在这种情况下使用 .tt 文件的 tuto。我想重点是生成 .wxs 文件,这将是 msi 的基础。
0赞 jdweng 6/19/2023
看看这是否有帮助:stackoverflow.com/questions/48424953/...

答: 暂无答案