【发布时间】:2014-05-05 18:01:25
【问题描述】:
[我正在更新标题以反映我找到的答案,但保持问题文本不变]
这与How to output namespace in T4 templates? 基本上是同一个问题,但那里的所有答案都依赖于访问 Visual Studio 主机。正如 Brad Wilson 在 GarethJ 的回答中所做的那样,这些答案在 MSBuild 主机中通过 Visualization and Modeling SDK 不起作用。
我的最终目标是将预生成的视图添加到 edmx 文件中。似乎 VS 具有从 foo.edmx 到 foo.tt 和 foo.Context.tt 的硬编码内部关联。对 foo.edmx 的更改不会触发我的 foo.Views.tt 运行其转换,即使它是项目文件中的
使用 V&M SDK 会导致依赖文本转换在父级更改时运行,但所有命名空间都会从实体类文件中剥离。 EF.Utility.CS.ttinclude 依赖于 VS 主机,如果未找到 namespaceHint,则返回 null 命名空间。 由于我也不希望在我的 MSBuild 项目中依赖 $(DevEnvDir),因此我已将 EF.Utility.CS.ttinclude 复制到源代码控制的文件夹中,并正在对其进行更改以适应 MSBuild 转换主机。
我想检索CallContext.LogicalGetData("NamespaceHint") 或Host.ResolveParameterValue("", "", "namespaceHint") 返回的相同字符串。我目前的计划包括:通过
我正在寻找以下内容之一:
- 一种通过 V&M SDK 检索与 Visual Studio 的 NamespaceHint 相同的值的方法,比上述串联更简单。
- 一种无需使用 V&M SDK 即可在 foo.edmx 和 foo.arbitrary.tt 之间建立正确依赖关系的方法
- 一种排除 foo.tt 和 foo.Context.tt 被 V&M SDK 处理,同时仍被 VS 的内置实体框架工具处理的方法。
后者比前者稍微好一点,但到目前为止,我的研究表明它们是不可能的。我目前的方法运行文本转换两次:VS 执行硬编码 edmx 处理,然后 V&M SDK 执行通用 tt 处理。如果我对其中任何一个都得到了很好的答案,我会为后代更改问题标题。
【问题讨论】:
标签: entity-framework visual-studio msbuild code-generation t4