gpt4 book ai didi

.net - T4:在 Visual Studio 和 MSBuild 中使用属性

转载 作者:行者123 更新时间:2023-12-04 21:42:15 28 4
gpt4 key购买 nike

我在创建 T4 模板时遇到问题,该模板可用于从 Visual Studio 和 MSBUild 生成相对简单的 C# 代码。该模板引用一个 DLL,该 DLL 位于项目的输出路径中。除此之外,它是一个相当简单的模板,它循环遍历域对象的集合并为每个对象输出一个测试方法。

MSDN suggests在两个主机中使用属性的以下方法:

<!-- Define a project property, myLibFolder: -->
<PropertyGroup>
<myLibFolder>$(MSBuildProjectDirectory)\..\libs</myLibFolder>
</PropertyGroup>

<!-- Tell the MSBuild T4 task to make the property available: -->
<ItemGroup>
<T4ParameterValues Include="myLibFolder">
<Value>$(myLibFolder)</Value>
</T4ParameterValues>
</ItemGroup>

不幸的是,这不起作用。通过 MSBuild 执行时,出现以下错误:
Compiling transformation: Metadata file '$(myLibFolder)Cmc.SpeedWays.Core.Testing.dll' could not be found   

有没有人设法解决这个问题,或者至少找到了一个可以接受的解决方法?我们使用的是 VS2012 和 MSBUild 4.0。

最佳答案

我遇到了同样的问题,很遗憾地说我没有得到一个明显的解决方案。然而问题确实消失了,这似乎是一系列可能的问题。

我认为关键是这种类型的属性声明仅在您使用 MSBuild 构建解决方案/项目时才有效,如果您使用 Visual Studio,则属性将为空。我想这就是我的困惑。最后,我在我的模板中调用了调用,在那里我尝试获取 MSbuild 声明的属性,如果这作为 VS 失败

var configName = Host.ResolveParameterValue("-", "-", "configuration");
if (String.IsNullOrEmpty(configName)==true)
{
WriteLine ("// Generated from Visual Studio");
IServiceProvider serviceProvider = (IServiceProvider)this.Host;
DTE dte = serviceProvider.GetService(typeof(DTE)) as DTE;
configName = dte.Solution.SolutionBuild.ActiveConfiguration.Name ;
}

需要注意的另一件事是使用字符串连接构建无效字符串,很容易以空值结束

关于.net - T4:在 Visual Studio 和 MSBuild 中使用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569141/

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