【问题标题】:Assembly references in T4 in Visual Studio 2012 .NET 4.5Visual Studio 2012 .NET 4.5 中 T4 中的程序集引用
【发布时间】: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


【解决方案1】:

正如我所怀疑的,通过使用PlatformTarget AnyCPU 构建依赖程序集解决了这个问题。现在生成的 DLL 兼容 32 位和 64 位程序集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多