【发布时间】:2012-11-13 16:27:46
【问题描述】:
我在使用 Visual Studio 2012 中的 T4 工具时遇到问题。我的 .tt 文件有一个汇编指令,指向在同一解决方案中构建的 64 位 .DLL。这是调试tt文件的输出:
错误 308 主机在尝试解决 程序集参考“$(TargetDir)\DCSGenerator.dll”。转型 不会运行。引发了以下异常: System.IO.FileLoadException:给定的程序集名称或代码库是 无效的。 (来自 HRESULT 的异常:0x80131047)在 System.Reflection.AssemblyName.nInit(RuntimeAssembly& 程序集, Boolean for Introspection, Boolean raiseResolveEvent) at System.Reflection.AssemblyName..ctor(String assemblyName) 在 Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation(字符串 强名)在 Microsoft.VisualStudio.TextTemplating.VSHost.TextTemplatingService.ResolveAssemblyReference(字符串 装配参考)在 Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences(ITextTemplatingEngineHost 主机,模板处理会话 会话)C:\TFS\Dev01\CorePlatform\CoreServices\ImportExport.NET\ImportExport.NET\DicomInterface\TemplateUtilFunctions.tt 0 0 ImportExport.NET (CoreServices\ImportExport.NET\ImportExport.NET)
还有其他人有这个问题吗?
最好的问候,
更新 2012-11-14 09:17 (CET):Visual Studio 和因此 T4 生成器作为 32 位应用程序运行,我的程序集构建为 64 位 DLL。这可能是问题的根源。
更新 2012-11-14 09:43 (CET):尝试使用完整路径引用程序集,但这并没有解决问题。
【问题讨论】:
-
VS 以 32 位运行,因此如果引用的 dll 未标记为“任何 CPU”但需要 64 位架构,则 VS 托管的 T4 库无法加载 dll(32 位进程无法加载 64 位dll,反之亦然)
-
我在网上搜索了类似的问题后怀疑是这个。从来没有设法将目标平台切换到 32/64 位,因为我猜是因为一些解决方案的限制。但是,我将遵循这一线索。谢谢!
-
异常中的“$(TargetDir)\DCSGenerator.dll”对我来说看起来很奇怪,因为异常通常显示派生路径,而不是源。尝试硬编码完整路径,只是为了看看。
-
谢谢罗伯。我试过了,但结果还是一样。
标签: c# visual-studio-2012 t4 .net-4.5