gpt4 book ai didi

c# - 在 T4 模板中获取引用项目的路径?

转载 作者:可可西里 更新时间:2023-11-01 07:50:34 24 4
gpt4 key购买 nike

我有一个包含几个项目的解决方案。我想在我的一个测试项目中创建一些 T4 模板,以根据另一个项目中的代码生成测试。测试项目具有对其他项目的项目引用。我遇到的问题是我不知道如何获取我需要从中生成代码的 edmx 文件的文件路径。

示例(假设这是一个基于 ASCII 的解决方案资源管理器):

MySolution.sln
-> MyTests.csproj (C:\a\b\c\)
----> GeneratedTests.tt (C:\a\b\c\GeneratedTests.tt)
-> MyDAL.csproj (C:\x\y\z\)
----> MyModel.edmx (C:\x\y\z\MyModel.edmx)

我的 GeneratedTests.tt 如何能够利用其项目引用获取 MyModel.edmx 的文件路径?

最佳答案

此答案仅适用于 Visual Studio。

设置 T4 模板的“hostspecific”属性。这使您可以访问 Host 属性。将 Host 类型转换为 IServiceProvider 以调用 GetService(typeof(DTE))。这使您可以遍历解决方案的内容。

<#@ template language="c#" hostspecific="true"  #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
These are the projects in this solution:
<#
var serviceProvider = this.Host as IServiceProvider;
var dte = serviceProvider.GetService(typeof(DTE)) as DTE;
foreach (Project p in dte.Solution.Projects)
{
#>
<#=p.Name#> at <#=p.FullName#>
<#
}
#>

另请参阅 ITextTemplatingEngineHost interface on MSDN 的示例和 T4 Architecture by Oleg Synch .

关于c# - 在 T4 模板中获取引用项目的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3548026/

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