【问题标题】:Use T4 .tt templates with reflection使用带有反射的 T4 .tt 模板
【发布时间】:2014-11-10 09:44:49
【问题描述】:

在网上搜索,我发现从 2007 年到 2010 年左右的许多问题都与 T4 发动机锁定组件有关。这个问题是这样引起的:

  1. 创建 .tt T4 模板
  2. 反映同一解决方案中的某些程序集,并使用它来生成代码
  3. T4在ctrl+s上生成代码
  4. T4 现在已反映程序集锁定
  5. 构建解决方案将失败,因为生成的反射程序集 .dll 文件现在已锁定,Visual Studio 无法释放它。

Oleg Sych(T4 首席开发人员)的解决方案是

  • 使用 EnvDTE(与 Visual Studio 对话的 API)
  • FxCop 的自省(自定义 .NET 反射 API)

两种解决方案都不适合我的用例。我们的合约已经有了很多反射代码。此外,作为 API 的反射已经够难了,更不用说要求开发人员理解一个 API 来推理代码结构了。

有没有办法仍然利用我们的用例?这个用例是:

  • 使用 T4
  • 反思与 T4 生活在同一项目中的装配
  • Visual Studio 2013

【问题讨论】:

    标签: c# .net reflection visual-studio-2013 t4


    【解决方案1】:

    您可以在新的AppDomain 中加载您的程序集以进行反射,该AppDomain 会从原始位置复制二进制文件。

    Shadow Copying Assemblies

    显然如果你使用T4 Assembly Directive,卷影复制是handled for you starting with Visual Studio 2010 SP1

    【讨论】:

    • 确实,这就是我所做的。 dll文件被阻止没有问题。但是,反射 + T4 可能是魔鬼,因为如果您在 C# 中出现错误,反射将不起作用,将不会生成新代码来修复该错误。小心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多