构建期间生成 T4 代码,自定义程序集参考

2024-03-08

我有一个 T4 模板,可以处理项目中的多个 .tt 文件。我还定义了一些自定义类来帮助完成代码转换过程。

<#@ template language="C#"  hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #> 

这在 Visual Studio 中有效,我有一个正确定义 $(TargetDir) 的 VS 宏。

现在,我想在构建过程中执行代码生成过程。我补充道:

<TransformOnBuild>true</TransformOnBuild>
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<IncludeDslT4Settings>true</IncludeDslT4Settings> <ItemGroup>
<T4ReferencePath Include="$(OutputPath)" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" /> 

我的构建运行了,但我得到:

C:\程序文件 (x86)\MSBuild\Microsoft\VisualStudio\TextTemplated\v10.0\Microsoft.TextTemplated.targets (407): 主机在尝试解决问题时抛出异常 程序集引用“$(TargetDir)\MyDependency.dll”。转变 将不会被运行。抛出以下异常: System.IO.FileLoadException:给定的程序集名称或代码库是 无效的。 (HRESULT 异常:0x80131047) System.Reflection.AssemblyName.nInit(RuntimeAssembly& 程序集, 内省的布尔值、raiseResolveEvent 的布尔值) System.Reflection.AssemblyName.nInit() 位于 Microsoft.VisualStudio.TextTemplate.GlobalAssemblyCacheHelper.GetLocation(字符串 强名称)在 Microsoft.VisualStudio.TextTemplated.Sdk.Host.GenericTextTemplatedHost.ResolveAssemblyReference(字符串 装配参考)位于 Microsoft.VisualStudio.TextTemplate.Engine.ResolveAssemblyReferences(ITextTemplatedEngineHost 主机、TemplateProcessingSession 会话)。行=-1,列=-1

显然不会解决$(TargetDir)在团队建设背景下。

我尝试将 TargetDir 添加到我的构建配置的属性组中,但无济于事。该值不会传递到 T4 代码生成器的上下文。

我不想使用环境变量。

我该如何设置$(TargetDir)在 Team Build 环境中正确吗?


我没有看到 $(OutputPath) 是由 Visual Studio 定义的。您是否在项目中的项目中尝试过 $(TargetDir) ?然后,您可以从 T4 文件的程序集声明中删除 $(TargetDir)\。

我刚刚尝试了很多可能性来获得与工作类似的东西,今天或明天会写一篇博客文章。

So:

<ItemGroup>
    <T4ReferencePath Include="$(TargetDir)" />
</ItemGroup>

在你的 csproj 中,并且

<#@ assembly name="MyDependency.dll" #>

在你的T4文件中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建期间生成 T4 代码,自定义程序集参考 的相关文章

随机推荐

  • iOS 应用程序的 Firebase 3.7.0 上的链接错误

    我尝试在我的 iOS 应用程序中使用 Firebase SDK 3 7 0 但它出现链接错误 我已按照 README md 中描述的步骤进行操作 该文件包含在从下载的框架 SDK 中https firebase google com doc
  • 渐变 IE8+ 所需的最低 CSS

    通常当我制作渐变时我使用colorzilla 渐变编辑器 http www colorzilla com gradient editor 默认情况下 它会为您生成 CSS 这是一个例子 background 1e5799 Old brows
  • ruby on Rails 如何删除文件routes.rb中的一行

    在我的文件routes rb中 namespace admin do resources albums except new edit destroy resources conversation replies except new ed
  • 有人提出了 javascript 的 Pipe 运算符吗?

    许多语言都有一个运算符 允许您将一个操作的结果通过管道传输到对另一个操作的调用中 例如 bash 中的运算符 gt F 中的运算符 在我看来 JavaScript 中方法链接的常见习惯用法的一大优点是它从上到下 从左到右读取 var foo
  • 视图更新后,旋转器动画开始弹跳

    我有一个图像 我对其应用了 360 度旋转以产生加载 旋转的效果 它工作正常 直到我在下面添加文本 图像仍然旋转 但垂直弹跳 这是查看它的代码 import SwiftUI main struct SpinnerApp App var bo
  • 安装 Kafka 作为 Windows 服务

    如何将 Apache Kafka 作为 Windows 服务安装并运行 现在我需要进入命令提示符并启动zookeeper和kafka服务器 有什么方法可以让我将 Apache Kafka 安装为 Windows 服务吗 我只看到下面的博客
  • 为什么我的 Google App Engine Mail API 调用仍然会导致 DeadlineExceededError,尽管将它们放入任务队列中?

    我有一个 Python 函数 它为我的邮件列表中的每个电子邮件地址添加一个任务队列 每次邮寄数千个 问题是 即使每封邮件都是通过任务队列中的执行发送的 我仍然遇到这个可怕的错误 DeadlineExceededError The API c
  • 正则表达式模式忽略多个文件夹

    忽略多个文件和文件夹的正确语法是怎样的电子包装机 https www npmjs com package electron packager 只有一个参数 例如 ignore docs 效果很好 但我想忽略多个文件夹和文件 例如 ignor
  • R中如何判断列表是否为空?

    本质上 我有一个创建 list 输出的函数 我希望我的函数不创建 list 而是用另一个值 例如 NULL 或字符串 替换它 有没有办法确定变量是否分配给空列表list 空列表为空 它没有元素 但仍然是一个列表 没有元素的列表的长度为 0
  • 如何解决 ClassNotFoundException?

    我正在尝试运行 Java 应用程序 但收到此错误 java lang ClassNotFoundException 冒号后面是缺少的类的位置 但是 我知道该位置不存在 因为该类位于其他地方 我怎样才能更新该类的路径 和类路径有关系吗 类路径
  • 我如何将小胡子中的变量大写

    我的小胡子模板中有一个名为 type 的变量 我想使用标题大小写将 type 的值大写 这可能吗 考虑到该类型不是网页上显示的类型 它存储一个值 type 你可以将它包裹在一个span并使用CSS CSS capitalize text t
  • 用C语言从M68k RAM地址获取特定字节

    通过 IDA 反汇编程序我到达了这个地址 0010FD74 00 00 00 00 00 00 03 00 00 00 00 00 82 03 80 02 现在我需要给定地址来获取特定字节 例如第 7 个位置有 03 我尝试过使用C语言来做
  • Android:将imageview转换为位图,转换为灰度,位图转换为imageview

    当我编译此代码时 我没有在 Eclipse 上收到任何警告 但是当我在设备或模拟器上运行它时 该程序被迫关闭 public class MainActivity extends Activity ImageView img Button b
  • 如何卸载 Ruby on Rails 并进行全新安装?

    我正在学习 Rails 教程 我遇到 RVM 版本问题并且收到很多错误 我想从 Ruby Rails Gemfiles 等的干净版本开始 谁能给我一些关于如何卸载 Ruby on Rails 环境的简短说明 尝试这个 rvm get hea
  • 在 PHP 7 中全局启用“strict_types”

    我目前正在将我的网站从 PHP5 迁移到 PHP7 并且我已经开始使用添加的严格类型功能 然而 这要求我以下行开头所有文件
  • 如何在 macOS 沙盒环境中从 C++ 运行 AppleScript 而不会侵犯权利

    我正在尝试使用AppleScript来控制ApplePhotos来自 QT C 应用程序中的应用程序 该应用程序必须在 macOS App Store 所需的沙箱环境中运行 我尝试通过 QProcess 启动来运行 AppleScripto
  • 如何使 CDT/Eclipse 与 C++11 线程一起工作?

    我尝试在 Eclipse 中测试 C 11 线程的示例 但我在运行程序时收到此消息 抛出 std system error 实例后调用终止 什么 不允许操作 我的系统 ubuntu gcc 4 7 Program include
  • Ksoap2 Android - 如何为复杂对象的子属性指定命名空间?

    我正在尝试使用 KSoap2 Android 将复杂对象上传到 WCF Web 服务 但执行此操作时遇到一些困难 当我使用SoapUI并手动填写数据时 我已经成功调用了Web服务 成功的SoapUI生成的请求如下
  • 错误 - Jenkins 检测到正在运行多个实例

    我正在将 Jenkins 作为 Windows 服务运行 一切都很好 突然从今天中午开始 我在打开它时开始看到以下错误 Jenkins 检测到您似乎正在运行多个实例 Jenkins 共享相同的主目录 这 詹金斯非常困惑 你可能会遇到奇怪的情
  • 构建期间生成 T4 代码,自定义程序集参考

    我有一个 T4 模板 可以处理项目中的多个 tt 文件 我还定义了一些自定义类来帮助完成代码转换过程 lt template language C hostspecific True debug True gt lt output exte