提问人:Shynord 提问时间:3/6/2023 最后编辑:Jason AllerShynord 更新时间:3/7/2023 访问量:72
t4 模板 多个输出/模板指令警告
t4 Templates Multiple output/templates directives warning
问:
我目前正在研究一个由我没有联系的人开发的旧解决方案。
在解决方案中,使用了 T4 模板。老实说,我以前从未使用过这种模板。其中许多编译时带有有关模板和/或输出指令的警告:
- 在模板中发现了多个输出指令。除第一个之外,所有内容都将被忽略。
- 在模板中发现了多个模板指令。除第一个之外,所有内容都将被忽略。应在一个模板中指定模板指令的多个参数。
对于相同的文件,警告出现多次,并且每次都指示相同的行。但是,每个文件的警告显示的行都不同。
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".wxs" #>
<#@ assembly name="System.Core.dll" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Security.Cryptography" #>
<#+
static string getGUID(string input,string sep="-")
{
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
byte[] inputBytes = Encoding.Default.GetBytes(input);
byte[] hashBytes = provider.ComputeHash(inputBytes);
//generate a guid from the hash:
return (new Guid(hashBytes)).ToString().ToUpper().Replace("-",sep);
}
#>
例如,此文件编译时有 6 条关于输出指令的警告,所有警告都指示第 5 行,即:<#@ import namespace="System.Text" #>
其他文件有相同的问题,指示不同的行,例如: 或者 这让我相信问题实际上并不来自这些行。<#@ assembly name="System.Core.dll" #>
<#@ output extension=".wxs" #>
每个文件都包含输出和模板目录。与警告相关的部分文件包含在其他 .tt 文件中。所以我认为没有必要在包含它们的文件中指示输出指令。因此,我试图删除它们,但这没有用。下面是一个包含上一个文件的 .tt 文件的示例:
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ 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(@"..\UserPrograms", "UserPrograms", @"$(var.SolutionDir)\UserPrograms\", "ProgramDataUserPrograms");
#>
</Wix>
我还尝试在仅包含指令行的文件中编写指令行,并将其从包含的文件中删除。 例:
<#@ assembly name="System.Core.dll" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Security.Cryptography" #>
<#+
static string getGUID(string input,string sep="-")
{
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
byte[] inputBytes = Encoding.Default.GetBytes(input);
byte[] hashBytes = provider.ComputeHash(inputBytes);
//generate a guid from the hash:
return (new Guid(hashBytes)).ToString().ToUpper().Replace("-",sep);
}
#>
但这并不能阻止编译器指示完全相同的警告。
答: 暂无答案
评论