gpt4 book ai didi

t4 - 在运行 T4 模板时确定解决方案配置(调试/发布)

转载 作者:行者123 更新时间:2023-12-03 10:56:21 26 4
gpt4 key购买 nike

我有一个 T4 模板,可以根据标志输出优化内容或标准内容。目前我正在根据我的需要手动更改标志。

我想做的是根据 Visual Studio 中解决方案的配置设置标志。如果设置为在 Debug模式下构建,我将输出标准内容。如果设置为在 Release模式下构建,我会改为优化内容。我发现了另一个看起来很有希望的 T4 问题:T4 Text Template - Is it possible to get compilation symbols from host?

但是,就我而言,我想做以下事情:

<#@ template language="C#" hostspecific="True" 
compilerOptions="/d:$(ConfigurationName)" #>

因为我可以在汇编指令中使用 $(SolutionDir) :
<#@ assembly name="$(SolutionDir)\myreference.dll" #>

我认为/d:$(ConfigurationName) 会让我到达我需要去的地方,然后我可以执行以下操作来设置我的标志:
<#
#if Debug
optimize = false;
#else
optimize = true;
#endif
#>

唉,这似乎不起作用。我也尝试过使用:
Host.ResolveParameterValue("-", "-", "ConfigurationName");

也无济于事。有任何想法吗?

最佳答案

对于试图在设计时(文件保存)以及 at build-time 完成这项工作的人(F5/F6),需要两种方法。

Emil 描述了设计时方法。对于构建时,您首先必须在项目文件中指定 T4 参数:

<ItemGroup>
<T4ParameterValues Include="BuildConfiguration">
<Value>$(Configuration)</Value>
<Visible>false</Visible>
</T4ParameterValues>
</ItemGroup>

然后你必须在你的 .tt 顶部引用它:
<#@ parameter type="System.String" name="BuildConfiguration" #>

然后查找恰好提供了其中的任何一个:
string configurationName = Host.ResolveParameterValue("-", "-", "BuildConfiguration");
if (string.IsNullOrWhiteSpace(configurationName))
{
var serviceProvider = (IServiceProvider)Host;
var dte = (DTE)serviceProvider.GetService(typeof(DTE));
configurationName = dte.Solution.SolutionBuild.ActiveConfiguration.Name;
}

如果您希望您的模板在这两种情况下都工作,则必须包含两者的逻辑。设计时方法在构建时不起作用(DTE Host 不在附近提供解决方案),而构建时方法在设计时不起作用(MSBuild 不在附近提供参数)。

关于t4 - 在运行 T4 模板时确定解决方案配置(调试/发布),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com