c# - 使用带反射的 T4 .tt 模板

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

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

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

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

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

这两种解决方案对于我的用例来说都不是最佳的。我们的合约上已经有很多反射代码。此外,反射作为 API 已经足够困难了,更不用说要求开发人员理解第二个 API 来推理代码结构了。

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

  • 使用 T4
  • 反射(reflection) T4 所在项目中的装配
  • Visual Studio 2013

最佳答案

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

Shadow Copying Assemblies

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

关于c# - 使用带反射的 T4 .tt 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25872212/

相关文章:

c# - 在 C# 中,我如何评估一个类的任何成员是否包含 switch case 或 if else 构造?

java - 什么可能是 ParameterizedType 的实例?

c# - 如何在 ASP.NET Web API 上对 Action Filter 进行依赖注入(inject)

c# - .NET 应用程序使用过多内存

c# - 有阿兹曼 64 位吗?

C# - System.StackOverflowException 与 Lambda

java - 加载从目录中的 jar 扩展另一个类的类

c# - 如何使用 SpecFlow 设置个人跟踪/日志记录

c# - 如何控制长时间运行的查询

.net - 在 MVVM 中创建 ViewModel 的最佳方法