我在我的 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/