如何在未安装 Visual Studio 的 PC 上运行 VS 2015 中的 TextTransform.exe?

问题描述 投票:0回答:2

我将

TextTransform.exe
从安装了 VS 2015 Update 3 的 PC 从位置
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.

我阅读了文章构建过程中的代码生成
我尝试复制“配置您的计算机”部分中描述的所有 dll-s。
但是我在安装了VS 2015的电脑上没有找到

$(ProgramFiles)\MSBuild\Microsoft\VisualStudio\v*.0\TextTemplating
文件夹。
我将文章中介绍的另外两个文件夹中的文件复制到我未安装 VS 2015 的电脑上包含
TextTransform.exe
的文件夹中。

运行后

TextTransform.exe
仍然出现错误。

这个错误应该如何修复? 我怎样才能运行

TextTransform.exe

更新

我从 MSBuild 脚本中调用

TextTransform.exe
。因此,如果有任何可以在 MSBuild 中实现的执行文本转换功能的方法,这对我来说是可以接受的,尽管需要更新构建脚本。
我想这样的解决方案可能存在,因为有一些 MSBuild 在不直接调用
TextTransform.exe
的情况下执行转换的示例,例如上面提到的文章。

visual-studio-2015 msbuild dependencies runtime-error code-generation
2个回答
3
投票

花了一段时间才解开,但我有一个工作

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.0
Microsoft.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
的工作目录。


0
投票

有一个新的官方工具

TextTransformCore.exe
(所有参数都与
TextTransform.exe
相同),它更容易复制(所有需要的文件都在那里)和使用(只需复制所需文件并运行):

  • 前往
    {VS_INSTALL_PATH}\Common7\IDE\
  • 复制以下文件
TextTransformCore.dll
TextTransformCoreResolver.dll
TextTransformCore.exe
TextTransformCore.runtimeconfig.json
  • 打开json文件,找到
    "SharedAssemblyPaths"
    ,其值包含所有需要的文件夹
"SharedAssemblyPaths": "TextTransform;PublicAssemblies;PrivateAssemblies;PrivateAssemblies\\Newtonsoft.Json.13.0.3.0;CommonExtensions\\Microsoft\\VBCSharp\\LanguageServices",
  • 复制 4 个文件夹,无需保留精确的目录结构,但您必须更新 json 文件以匹配更改
TextTransform
PublicAssemblies
PublicAssemblies
PrivateAssembliesPrivateAssemblies\\Newtonsoft.Json.13.0.3.0
CommonExtensions\\Microsoft\\VBCSharp\\LanguageServices
  • 完成。
© www.soinside.com 2019 - 2024. All rights reserved.