.Net Core T4运行的转换无法加载文件或程序集

问题描述

我有一个.Net Core Asp.Net MVC应用程序,我试图创建一个T4文件,该文件使用反射来列出控制器的所有方法。但是,在引用Controller类时,它将引发错误。我尝试添加Mvc.Core NuGet软件包,但最新版本为2.2.5,并且由于某种原因,它期望使用v3.1.0.0。

Error       Running transformation: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core,Version=3.1.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.AspNetCore.Mvc.Core,PublicKeyToken=adb9793829ddae60'
   at Microsoft.VisualStudio.TextTemplating5EB735DC155C701BA88F9010B0EBAB3638F86E339180B5A3766CEE0DDDB7B870EC569C6473D06A892E38A012E5B34C56690737513ADB101F2235F88AEABE2E1D.GeneratedTextTransformation.TransformText()
   at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site,T0 arg0)
   at CallSite.Target(Closure,CallSite,Object )
   at Microsoft.VisualStudio.TextTemplating.TransformationRunner.PerformTransformation()

这是我的tt文件

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ template language="C#v3.1" #>
<#@ assembly name="System.Core" #>
<#@ output extension=".cs" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Reflection" #>
class Foo {
    <# Assembly asm = Assembly.GetAssembly(typeof(UserController)); #>
}

解决方法

您不能直接在 T4 模板中引用程序集类。 如果您想使用解决方案的程序集访问路径,您可以使用 Host 类 File.ReadAllText(this.Host.ResolvePath("Him.txt"));