T4模板无法加载文件或程序集“ System.Runtime,版本= 4.2.0.0”

时间:2018-07-27 03:17:12

标签: c# visual-studio-2017 asp.net-core-2.0 t4

因此,我有一个T4模板正在尝试在设计时运行,但是它一直给我以下错误。

Running transformation: System.IO.FileNotFoundException: Could not load 
file or assembly 'System.Runtime, Version=4.2.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system 
cannot find the file specified.
File name: 'System.Runtime, Version=4.2.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a'

我的Visual Studios解决方案中包含10个项目,所有这些项目都针对.Net Core 2.0框架。我的T4模板目前看起来像这样:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="Services.Resources.DataTransferObjects.Infrastructures" #>
<#@ import namespace="System.Collections.Generic" #> 
<#@ assembly name="$(TargetDir)Services.dll" #>


<#@ output extension=".cs" #>
public class AdminDTO
{
        <#var editableObjs = Assembly
            .GetAssembly(typeof(GenericEditable<>))
            .GetTypes()
            .Where(p => p.BaseType != null && p.BaseType.IsGenericType && p.BaseType.GetGenericTypeDefinition() == (typeof(GenericEditable<>)))
            .ToList();
        #>
}

目前,我只需要模板中引用的程序集即可,该程序集是.Net Core 2.0类库项目。我尝试在此特定的库中添加System.Runtime.dll引用,但似乎没有任何区别。

我已经阅读了与此类似的其他几个问题,通常看来.Net Core似乎与T4模板有关,但是似乎大多数人的解决方案都针对.Net标准库。我不确定这是否适合我,因为我的整个解决方案仅涉及.Net Core项目。

编辑

我将所有项目都更改为.Net Standard 2.0而不是.Net Core,并且解决了最初的问题,但是现在我看到了此错误:

System.Reflection.ReflectionTypeLoadException: Unable to load one or 
more of the requested types. Retrieve the LoaderExceptions property for 
more information.
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at System.Reflection.RuntimeModule.GetTypes()
at System.Reflection.Assembly.GetTypes()

1 个答案:

答案 0 :(得分:3)

我发现了System.Runtime dll错误的解决方法。

将此bindingRedirect放在C:\Users\<user>\AppData\Local\Microsoft\VisualStudio\15.0_29f8d23a\devenv.exe.config-> <configuration>-> <runtime>内的<assemblyBinding>里面,其他所有的都是bindingRedirect的

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>

这是Visual Studio或T4模板引擎中的错误:https://developercommunity.visualstudio.com/content/problem/358905/filenotfoundexception-systemruntime-version4210-wh.html