C# T4 使用 web.config 中的 assemblyBinding/BindingRedirect

标签 c# .net-assembly t4

我在我的 Web 项目中创建了自己的 T4 Tempalte,该项目从我当前的解决方案加载使用的程序集并创建一些文件。

到目前为止效果很好。但现在我已将我的 NuGet 组件之一更新为新版本,并添加了 assemblyBinding 部分,以便组件的旧版本和新版本可以正常工作。到目前为止,这对于我的网站本身来说也很好。

但是我的 T4 模板现在带有

The File or Assembly "\xxx...\...." or a dependency could not be found

看来我的 T4 模板没有读取 web.config 中的 assemblyBinding 部分,这是可能的,并且是否有解决方法,无需更新每个依赖 dll 中的程序集引用。

我使用 T4 模板和已编译的 Dll 进行代码实现,在我的 DLL 中我正在加载我的程序集,效果很好。

  var assemblies = Factory.CreateAssemblyManager().LoadAssemblies(proxySettings.WebProjectName, proxySettings.FullPathToTheWebProject);

然后我在每个程序集中搜索我的自定义属性,在这里我收到上面的错误,无法加载文件或程序集。

  foreach (Assembly assembly in assemblies)
  {
      var types = assembly.GetTypes().Where(type  => type.GetMethods().Any(p => p.GetCustomAttributes(typeof (CreateProxyBaseAttribute), true).Any())).ToList();
   }

德语错误:

{"Die Datei oder Assembly\"Internal.Xyz.DomainModel, Version=2.1.0.0, Culture=neutral, PublicKeyToken=d72343e09836ed19\"oder eine Abhängigkeit davon wurde nicht gefunden。Das System kann die angegebene Datei nicht finden。":“Internal.Xyz.DomainModel,版本=2.1.0.0,文化=中性,PublicKeyToken=d72343e09836ed19”}

最佳答案

问题是,T4 模板未在项目内使用 web.config,T4 模板在 Visual Studio 的上下文中运行并使用 Visual Studio 的配置。

要解决该问题,请从 Visual Studio 编辑配置并在其中添加 dependentAssembly 绑定(bind)

对于 VS 2015 使用以下路径

c:\users\[user]\AppData\Local\Microsoft\VisualStudio\14.0\devenv.exe.config

在 VS 2017 中你需要使用这个路径

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE

您需要重新启动 Visual Studio

关于C# T4 使用 web.config 中的 assemblyBinding/BindingRedirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45628571/

相关文章:

c# - 使用 C# 复制图像 PropertyItems

c# - 如何从执行程序集引用库?

c# - 同类代码文件修改后生成T4文件

asp.net-mvc - T4 模板中的 RenderPartial()

asp.net-mvc - 在 View T4 模板中获取 Controller 名称

c# - 使用和垃圾收集

c# - .NET 中的事件签名 - 使用强类型 'Sender' 吗?

c# - .NET 4.5 SMTP 客户端在递送到取件目录时出现点填充问题

c# - Newtonsoft.Json 版本 8.0.2 无法加载文件或程序集错误

.net - 为什么私有(private)常量存储在 .NET 程序集中?