代码之家  ›  专栏  ›  技术社区  ›  squadwuschel

C#T4从web.config使用assemblybinding/bindingRedirect

  •  2
  • squadwuschel  · 技术社区  · 7 年前

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

    到目前为止效果很好。但是现在我已经将我的一个NuGet组件更新到了一个新版本,并且我添加了assemblyBinding部分,这样我的组件的旧版本和新版本都可以工作。到目前为止,这对我的网站本身也很好。

    但我的T4模板现在带来了

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

    我正在使用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,Version=2.1.0.0,Culture=neutral,PublicKeyToken=d72343e09836ed19”}

    1 回复  |  直到 7 年前
        1
  •  2
  •   squadwuschel    7 年前

    问题是,T4模板没有使用web。在项目中,T4模板在visual studio的上下文中运行,并使用visual studio中的配置。

    解决这个问题的方法是从visual studio编辑配置并在其中添加dependentAssembly绑定

    对于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