如果我在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,还是有另一种方法可以使其工作?
答案 0 :(得分:0)
看起来TextTemplatingFileGenerator工具在32位进程中运行,并且无法将64位程序集导入到T4模板。
我找到了两个替代方案
编写一个自定义模板类,该类继承自Microsoft.VisualStudio.TextTemplating程序集中的TextTemplating类。我还认为,如果复杂代码存在文本生成,这比使用tt文件更好,因为它更容易理解和管理。这是一个例子。
在64位装配中
namespace SixtyFourBitClassLibrary
{
public class Class1
{
public string SampleString = "Sample";
}
}
在主装配中(也是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文件。我不在这里分享代码,但我检查它是否正常工作。
这两种解决方案都需要另一种方式(可能与扩展)来开始生成。