我复制了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.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
旁边的文件使用绑定(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/