解决 VS2022 .NET 7 项目中的 T4 模版无法引用其他程序集的问题

搜索 devenv.exe.config 文件.
一般在 C:\Program Files\Microsoft Visual Studio\2022\*\Common7\IDE\devenv.exe.config
修改无效的话再修改AppData下的
C:\Users\*\AppData\Local\Microsoft\VisualStudio\17.0_*\devenv.exe.config

在这个XML中的 assemblyBinding (configuration -> runtime -> assemblyBinding) 中添加

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

可能是VS2022 默认还是用的 .net framework 的绑定的DLL,所以把 System.Runtime 任何版本的DLL都指定到 framework4 的DLL.

当你再T4使用反射的类库的时候,还是会报类似的错误.再引入下面部分,可以解决一定的问题.

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

但是当7.0的的类库和 4.0 的API不同的时候,这个方法就没用了.所以部分反射的方法还是会报错.
比如System.ComponentModel.TypeConverter 你按照上面方法加入了也没用.
目前只能避免使用了,自己写方法来解决.

参考 https://stackoverflow.com/questions/51550265/

posted @ 2023-05-22 17:07  Magian  阅读(416)  评论(0编辑  收藏  举报