visual-studio-2015 - 如何在未安装 Visual Studio 的 PC 上从 VS 2015 运行 TextTransform.exe?

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

我复制了TextTransform.exe从位置 C:\Program Files (x86)\Common Files\Microsoft Shared\TextTemplating\14.0\TextTransform.exe 安装 VS 2015 Update 3 的 PC到没有安装 VS 2015 的 PC。
TextTransform.exe被称为构建脚本的一部分。

当我运行它时,我收到以下错误:Error: Exception has been thrown by the target of an invocation.
我读了文章Code Generation in a Build Process .
我试图复制“配置您的机器”部分中描述的所有 dll-s。
但是我没有找到文件夹$(ProgramFiles)\MSBuild\Microsoft\VisualStudio\v*.0\TextTemplating在我安装了 VS 2015 的电脑上。
我将文章中描述的其他两个文件夹中的文件复制到包含 TextTransform.exe 的文件夹中。在我没有安装 VS 2015 的电脑上。

运行后TextTransform.exe错误仍然发生。

应该如何修复这个错误?
我怎样才能得到TextTransform.exe跑?

更新

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

最佳答案

花了一些时间来解开,但我有一个工作 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 旁边的文件使用绑定(bind)重定向(可能需要也可能不需要,具体取决于您的 .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将从中调用。

关于visual-studio-2015 - 如何在未安装 Visual Studio 的 PC 上从 VS 2015 运行 TextTransform.exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41559054/

相关文章:

msbuild - 使用 <Message...> 时有没有办法打印换行符?

eclipse 构建问题

c++ - Visual Studio 2015 git 推送到网络驱动器

javascript - 如何停止/取消以 "Run JS Tests"开始且耗时过长的 Chutzpah 测试运行?

c++ - 无法在 VS2015 的 ARM 模式下构建 C++ 静态库(Windows Phone 8.1)

Golang 导入周期挑战

testing - Gradle 测试任务 : not found

visual-studio-2015 - 在 Visual Studio 2015 中禁用复制格式

Azure 辅助角色使用错误的服务配置进行发布

c# - 为什么我的解决方案是在 Visual Studio 中构建的,而不是使用 msbuild 从命令行构建的?