如何在没有安装Visual Studio的PC上从VS 2015运行TextTransform.exe?

时间:2017-01-10 00:01:28

标签: visual-studio-2015 msbuild dependencies runtime-error code-generation

我从安装了VS 2015 Update 3的PC上复制TextTransform.exe,从位置C:\Program Files (x86)\Common Files\Microsoft Shared\TextTemplating\14.0\TextTransform.exe安装到没有安装VS 2015的PC。

TextTransform.exe被称为构建脚本的一部分。

当我运行它时,我得到以下错误:
Error: Exception has been thrown by the target of an invocation.

我阅读了文章Code Generation in a Build Process 我试图复制“配置你的机器”一节中描述的所有dll-s 但我没有在安装了VS 2015的PC上找到文件夹$(ProgramFiles)\MSBuild\Microsoft\VisualStudio\v*.0\TextTemplating 我将文章中描述的其他两个文件夹中的文件复制到未安装VS 2015的PC上包含TextTransform.exe的文件夹中。

运行TextTransform.exe后,错误仍然存​​在。

应如何修复此错误? 我怎样才能TextTransform.exe跑?

更新

我从MSBuild脚本中调用TextTransform.exe。因此,如果有任何可以在MSBuild中实现的方法来执行文本转换功能,那么我可以接受,但需要更新构建脚本。 我想这样的解决方案可能存在,因为MSBuild在没有直接调用TextTransform.exe的情况下执行转换时有例子,例如上面提到的文章。

1 个答案:

答案 0 :(得分:2)

花点时间解散,但是我有一个工作中的TextTransform.exe!这是我发现必要的步骤(注意:仅在VS2015和.NET 4.6.1上进行过测试):

首先,在构建计算机上,将以下所有文件复制到C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.0(或您希望该工具结束的任何位置)中:

C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.0\TextTransform.exe
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating.14.0\v4.0_14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.14.0.dll
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VSSDK\VisualStudioIntegration\Common\Assemblies\v4.0\Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VSSDK\VisualStudioIntegration\Common\Assemblies\v4.0\Microsoft.VisualStudio.TextTemplating.Interfaces.11.0.dll
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VSSDK\VisualStudioIntegration\Common\Assemblies\v4.0\Microsoft.VisualStudio.TextTemplating.Interfaces.14.0.dll
C:\Program Files (x86)\MsBuild\14.0\Bin\Microsoft.CodeAnalysis.dll
C:\Program Files (x86)\MsBuild\14.0\Bin\Microsoft.CodeAnalysis.CSharp.dll
C:\Program Files (x86)\MsBuild\14.0\Bin\Microsoft.CodeAnalysis.VisualBasic.dll
C:\Program Files (x86)\MsBuild\14.0\Bin\System.Reflection.Metadata.dll

如果您的T4模板包含C#/ VB代码,则Microsoft.VisualStudio.TextTemplating.Interfaces.10.0Microsoft.VisualStudio.TextTemplating.Interfaces.11.0 程序集将通过动态创建的应用程序域进行解析,并且不会在TextTransform.exe旁边找到。他们必须在GAC中注册。 在管理员命令提示符下,执行:

gacutil -i Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
gacutil -i Microsoft.VisualStudio.TextTemplating.Interfaces.11.0.dll

注意:gacutil通常在C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools中找到。

TextTransform.exe.config旁边创建一个具有绑定重定向的TextTransform.exe文件(根据您的.NET版本,可能是或不是必需的):

<?xml version ="1.0"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="1.1.37.0" newVersion="1.1.36.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

TextTransform.exe首次启动时,它将检查%VS140COMNTOOLS%\..\IDE\PrivateAssemblies上的文件夹,如果不存在则抛出异常。 因此,要么创建一个%VS140COMNTOOLS%环境变量以相应地指向路径,要么相对于该变量创建一个空的..\IDE\PrivateAssemblies 将在其中调用TextTransform.exe的工作目录。