在T4模板中引用64位DLL

时间:2017-11-29 08:49:18

标签: visual-studio 64-bit t4

如果我在T4模板中引用64位DLL,如

<#@ assembly name="path\to\64bit.dll" #>

并使用TextTransform.exe运行它,它将提供一个例外,说

There was a problem loading the assembly 'path\to\64bit.dll' The following Exception was thrown:
System.BadImageFormatException: Could not load file or assembly 'file:///path\to64bit.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.

是否有64位版本的TextTransform.exe,还是有另一种方法可以使其工作?

1 个答案:

答案 0 :(得分:0)

看起来TextTemplatingFileGenerator工具在32位进程中运行,并且无法将64位程序集导入到T4模板。

我找到了两个替代方案

  1. 编写一个自定义模板类,该类继承自Microsoft.VisualStudio.TextTemplating程序集中的TextTemplating类。我还认为,如果复杂代码存在文本生成,这比使用tt文件更好,因为它更容易理解和管理。这是一个例子。

    在64位装配中

    namespace SixtyFourBitClassLibrary
    {
        public class Class1
        {
            public string SampleString = "Sample";
        }
    }
    
  2. 在主装配中(也是64位)

        namespace ExecuteSixtyFourBitAssemblyInTT
        {
            class Program
            {
                static void Main(string[] args)
                {
                    SampleTemplate st = new SampleTemplate();
                    var s = st.TransformText();
    
                    Console.WriteLine(s);
                }       
            } 
    
            class SampleTemplate : TextTransformation
            {
                public override string TransformText()
                {
                    Class1 cls = new Class1();
    
                    return string.Format("{0} OK",cls.SampleString);
                }
            }
        }
    


    2.创建自定义文本模板主机。您可以查看Walkthrough: Creating a Custom Text Template Host。您可以使用此方法使用现有的tt文件。我不在这里分享代码,但我检查它是否正常工作。

    这两种解决方案都需要另一种方式(可能与扩展)来开始生成。